diff --git a/controls/menu.c b/controls/menu.c
index 870c6fd..4875578 100644
--- a/controls/menu.c
+++ b/controls/menu.c
@@ -2119,14 +2119,18 @@
    }
    return (HMENU)ht;
 }
+
 /***********************************************************************
  *           MENU_ExecFocusedItem
  *
  * Execute a menu item (for instance when user pressed Enter).
  * Return the wID of the executed item. Otherwise, zero indicating
  * that no menu item wase executed;
+ * Have to receive the flags for the TrackPopupMenu options to avoid
+ * sending unwanted message.
+ *
  */
-static INT MENU_ExecFocusedItem( MTRACKER* pmt, HMENU hMenu )
+static INT MENU_ExecFocusedItem( MTRACKER* pmt, HMENU hMenu, UINT wFlags )
 {
     MENUITEM *item;
     POPUPMENU *menu = (POPUPMENU *) USER_HEAP_LIN_ADDR( hMenu );
@@ -2145,24 +2149,23 @@
     {
 	if (!(item->fState & (MF_GRAYED | MF_DISABLED)))
 	{
-	    if( menu->wFlags & MF_SYSMENU )
+	    /* If TPM_RETURNCMD is set you return the id, but 
+	       do not send a message to the owner */	   
+	    if(!(wFlags & TPM_RETURNCMD))
 	    {
-		PostMessageA( pmt->hOwnerWnd, WM_SYSCOMMAND, item->wID,
-			       MAKELPARAM((INT16)pmt->pt.x, (INT16)pmt->pt.y) );
+		if( menu->wFlags & MF_SYSMENU )
+		    PostMessageA( pmt->hOwnerWnd, WM_SYSCOMMAND, item->wID,
+				  MAKELPARAM((INT16)pmt->pt.x, (INT16)pmt->pt.y) );
+		else
+		    PostMessageA( pmt->hOwnerWnd, WM_COMMAND, item->wID, 0 );
 	    }
-	    else
-            {
-		PostMessageA( pmt->hOwnerWnd, WM_COMMAND, item->wID, 0 );
-            }
 	    return item->wID;
 	}
-	else return 0;
     }
     else
-    {
 	pmt->hCurrentMenu = MENU_ShowSubPopup( pmt->hOwnerWnd, hMenu, TRUE );
-	return 0;
-    }
+
+    return 0;
 }
 
 /***********************************************************************
@@ -2246,13 +2249,12 @@
 /***********************************************************************
  *           MENU_ButtonUp
  *
- * Return the the value of MENU_ExecFocusedItem if
- * the selected item was not a popup
- * 1 if the item was a popup
- * 0 otherwise.
- * A zero return value indicates that we can't go on with menu tracking.
+ * Return the value of MENU_ExecFocusedItem if
+ * the selected item was not a popup. Else open the popup.
+ * A zero return value indicates that we go on with menu tracking.
+ *
  */
-static INT MENU_ButtonUp( MTRACKER* pmt, HMENU hPtMenu )
+static INT MENU_ButtonUp( MTRACKER* pmt, HMENU hPtMenu, UINT wFlags)
 {
     TRACE("%p hmenu=0x%04x\n", pmt, hPtMenu);
 
@@ -2270,7 +2272,7 @@
 	if( item && (ptmenu->FocusedItem == id ))
 	{
 	    if( !(item->fType & MF_POPUP) )
-		return MENU_ExecFocusedItem( pmt, hPtMenu );
+		return MENU_ExecFocusedItem( pmt, hPtMenu, wFlags);
 	    hPtMenu = item->hSubMenu;
 	    if( hPtMenu == pmt->hCurrentMenu )
 	    {
@@ -2279,7 +2281,6 @@
 	        MENU_SelectItem( pmt->hOwnerWnd, hPtMenu, NO_SELECTED_ITEM, FALSE );
 	        MENU_MoveSelection( pmt->hOwnerWnd, hPtMenu, ITEM_NEXT );
 	    }
-	    return 1;
 	}
     }
     return 0;
@@ -2646,15 +2647,11 @@
 		    /* Check if a menu was selected by the mouse */
 		    if (hmenu)
 		    {
-                        executedMenuId = MENU_ButtonUp( &mt, hmenu );
+                        executedMenuId = MENU_ButtonUp( &mt, hmenu, wFlags);
 
-                        /* the executedMenuId higher than one means that it contains
-                         the id of the selected item so we have to put the fEndMenu to TRUE.
-                         Otherwise, it contains a continue
-                         flag returned by MENU_ButtonUp indicating if we can continue with
-                         menu tracking or not*/
-                        fEndMenu = ((executedMenuId > 1) ? TRUE : FALSE);
-                        
+			/* End the loop if executedMenuId is an item ID */
+			/* or if the job was done (executedMenuId = 1). */
+                        fEndMenu = (executedMenuId != 0);
 		    }
                     /* No menu was selected by the mouse */
                     /* if the function was called by TrackPopupMenu, continue
@@ -2736,8 +2733,8 @@
 
 		    if (msg.wParam == '\r' || msg.wParam == ' ')
 		    {
-                        executedMenuId = MENU_ExecFocusedItem(&mt,mt.hCurrentMenu);
-                        fEndMenu = ((executedMenuId != 0) ? TRUE:FALSE);
+                        executedMenuId = MENU_ExecFocusedItem(&mt,mt.hCurrentMenu, wFlags);
+                        fEndMenu = (executedMenuId != 0);
 
 			break;
 		    }
@@ -2753,8 +2750,8 @@
 		    else
 		    {
 			MENU_SelectItem( mt.hOwnerWnd, mt.hCurrentMenu, pos, TRUE );
-                        executedMenuId = MENU_ExecFocusedItem(&mt,mt.hCurrentMenu);
-                        fEndMenu = ((executedMenuId != 0) ? TRUE:FALSE);
+                        executedMenuId = MENU_ExecFocusedItem(&mt,mt.hCurrentMenu, wFlags);
+                        fEndMenu = (executedMenuId != 0);
 		    }
 		}		    
 		break;
@@ -2920,6 +2917,10 @@
 
 /**********************************************************************
  *           TrackPopupMenu   (USER32.549)
+ *
+ * Like the win32 API, the function return the command ID only if the
+ * flag TPM_RETURNCMD is on.
+ *
  */
 BOOL WINAPI TrackPopupMenu( HMENU hMenu, UINT wFlags, INT x, INT y,
                            INT nReserved, HWND hWnd, const RECT *lpRect )
@@ -2928,9 +2929,13 @@
 
     MENU_InitTracking(hWnd, hMenu, TRUE);
     SendMessageA( hWnd, WM_INITMENUPOPUP, hMenu, 0);
-    if (MENU_ShowPopup( hWnd, hMenu, 0, x, y, 0, 0 )) 
+    if (MENU_ShowPopup( hWnd, hMenu, 0, x, y, 0, 0 ))
 	ret = MENU_TrackMenu( hMenu, wFlags | TPM_POPUPMENU, 0, 0, hWnd, lpRect );
     MENU_ExitTracking(hWnd);
+
+    if( (!(wFlags & TPM_RETURNCMD)) && (ret != FALSE) )
+	ret = 1;
+
     return ret;
 }
 
@@ -3669,6 +3674,7 @@
     menu->FocusedItem = NO_SELECTED_ITEM;
 
     TRACE("return %04x\n", hMenu );
+
     return hMenu;
 }
 
