diff --git a/controls/combo.c b/controls/combo.c
index 3c3590f..26903fa 100644
--- a/controls/combo.c
+++ b/controls/combo.c
@@ -902,6 +902,7 @@
 	   case LBN_KILLFOCUS:
 		/* nothing to do here since ComboLBox always resets the focus to its
 		 * combo/edit counterpart */
+		 break;
        }
    }
    return 0;
diff --git a/controls/desktop.c b/controls/desktop.c
index b1651f2..fd2963c 100644
--- a/controls/desktop.c
+++ b/controls/desktop.c
@@ -32,17 +32,18 @@
     if ((file = _lopen32( filename, OF_READ )) == HFILE_ERROR32)
     {
         UINT32 len = GetWindowsDirectory32A( NULL, 0 );
-        if (!(buffer = HeapAlloc( SystemHeap, 0, len + strlen(filename) + 2 )))
+        if (!(buffer = HeapAlloc( GetProcessHeap(), 0,
+                                  len + strlen(filename) + 2 )))
             return 0;
         GetWindowsDirectory32A( buffer, len + 1 );
         strcat( buffer, "\\" );
         strcat( buffer, filename );
         file = _lopen32( buffer, OF_READ );
-        HeapFree( SystemHeap, 0, buffer );
+        HeapFree( GetProcessHeap(), 0, buffer );
     }
     if (file == HFILE_ERROR32) return 0;
     size = _llseek32( file, 0, 2 );
-    if (!(buffer = HeapAlloc( SystemHeap, 0, size )))
+    if (!(buffer = HeapAlloc( GetProcessHeap(), 0, size )))
     {
 	_lclose32( file );
 	return 0;
@@ -56,13 +57,13 @@
       /* Check header content */
     if ((fileHeader->bfType != 0x4d42) || (size < fileHeader->bfSize))
     {
-	HeapFree( SystemHeap, 0, buffer );
+	HeapFree( GetProcessHeap(), 0, buffer );
 	return 0;
     }
     hbitmap = CreateDIBitmap32( hdc, &bitmapInfo->bmiHeader, CBM_INIT,
                                 buffer + fileHeader->bfOffBits,
                                 bitmapInfo, DIB_RGB_COLORS );
-    HeapFree( SystemHeap, 0, buffer );
+    HeapFree( GetProcessHeap(), 0, buffer );
     return hbitmap;
 }
 
diff --git a/controls/listbox.c b/controls/listbox.c
index 1308e81..165f483 100644
--- a/controls/listbox.c
+++ b/controls/listbox.c
@@ -484,14 +484,17 @@
                          "rect=%d,%d-%d,%d\n",
                          wnd->hwndSelf, index, item ? item->str : "", action,
                          rect->left, rect->top, rect->right, rect->bottom );
-        /* FIXME: check LBS_USETABSTOPS style */
-        if (item)
-            ExtTextOut32A( hdc, rect->left + 1, rect->top + 1,
-                           ETO_OPAQUE | ETO_CLIPPED, rect, item->str,
-                           strlen(item->str), NULL );
-        else
+        if (!item)
             ExtTextOut32A( hdc, rect->left + 1, rect->top + 1,
                            ETO_OPAQUE | ETO_CLIPPED, rect, NULL, 0, NULL );
+        else if (!(descr->style & LBS_USETABSTOPS)) 
+	    ExtTextOut32A( hdc, rect->left + 1, rect->top + 1,
+			   ETO_OPAQUE | ETO_CLIPPED, rect, item->str,
+			   strlen(item->str), NULL );
+        else
+	    TabbedTextOut32A( hdc, rect->left + 1 , rect->top + 1,
+			      item->str, strlen(item->str), 
+			      descr->nb_tabs, descr->tabs, 0);
         if (item && item->selected)
         {
             SetBkColor32( hdc, oldBk );
@@ -595,7 +598,12 @@
     {
         INT32 i;
         LPINT16 p = (LPINT16)tabs;
-        for (i = 0; i < descr->nb_tabs; i++) descr->tabs[i] = *p++;
+        dprintf_listbox( stddeb, "Listbox %04x: settabstops ", wnd->hwndSelf);
+        for (i = 0; i < descr->nb_tabs; i++) {
+            descr->tabs[i] = *p++<<1; /* FIXME */
+            dprintf_listbox( stddeb, "%hd ", descr->tabs[i]);
+	}
+	dprintf_listbox( stddeb, "\n");
     }
     else memcpy( descr->tabs, tabs, descr->nb_tabs * sizeof(INT32) );
     /* FIXME: repaint the window? */
diff --git a/controls/menu.c b/controls/menu.c
index 9e08d31..682423f 100644
--- a/controls/menu.c
+++ b/controls/menu.c
@@ -3533,9 +3533,9 @@
     if (!name) return 0;
     
     /* check for Win32 module */
-    instance = MODULE_HANDLEtoHMODULE16( instance );
-    if (MODULE_GetPtr(instance)->flags & NE_FFLAGS_WIN32)
+    if (HIWORD(instance))
         return LoadMenu32A(instance,PTR_SEG_TO_LIN(name));
+    instance = GetExePtr( instance );
 
     if (!(hRsrc = FindResource16( instance, name, RT_MENU ))) return 0;
     if (!(handle = LoadResource16( instance, hRsrc ))) return 0;
