diff -ru lesstif2-0.94.4-old/lib/Xm-2.1/XmIm.c lesstif2-0.94.4/lib/Xm-2.1/XmIm.c
--- lesstif2-0.94.4-old/lib/Xm-2.1/XmIm.c	2004-10-20 21:32:11.000000000 +0200
+++ lesstif2-0.94.4/lib/Xm-2.1/XmIm.c	2007-03-28 14:39:27.000000000 +0200
@@ -133,7 +133,10 @@
 		p->next = q->next;
 	}
 
-	XtFree((char *)stuff);
+	/* if count!=0 then someone uses the stuff as orig_xim
+	   so unlink it but not free it */
+	if (!stuff->count)
+		XtFree((char *)stuff);
 }
 
 /*
@@ -1060,6 +1063,8 @@
 		   XCloseIM(stuff->xim);
 		DEBUGOUT(_LtDebug(__FILE__, w, "XCloseIM(%p)\n", stuff->xim));
 		stuff->orig_xim->xim = NULL;
+		/* stuff->orig_xim is now useless */
+		XtFree(stuff->orig_xim);
 	} else {
 		DEBUGOUT(_LtDebug(__FILE__, w, "XmImCloseXIM(%p), count -> %d\n",
 			stuff->xim, stuff->orig_xim->count));
