Index: dll/win32/browseui/shellbrowser.cpp
===================================================================
--- dll/win32/browseui/shellbrowser.cpp	(revision 71026)
+++ dll/win32/browseui/shellbrowser.cpp	(working copy)
@@ -3417,6 +3417,11 @@
 
 LRESULT CShellBrowser::OnGoTravel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
 {
+    CComPtr<ITravelLog>     travelLog;
+
+    GetTravelLog(&travelLog);
+    travelLog->Travel(static_cast<IDropTarget *>(this), (wID - 0xA14A));
+
     return 0;
 }
 
Index: dll/win32/browseui/travellog.cpp
===================================================================
--- dll/win32/browseui/travellog.cpp	(revision 71026)
+++ dll/win32/browseui/travellog.cpp	(working copy)
@@ -507,23 +507,29 @@
     menuItemInfo.wID = idFirst;
     menuItemInfo.fState = MFS_ENABLED;
     menuItemInfo.dwTypeData = itemTextBuffer;
-    if ((dwFlags & TLMENUF_BACK) != 0)
+
+    int currentItemID = idLast - ((idLast - idFirst) / 2);
+    int offset = 0;
+
+    if ((dwFlags & TLMENUF_BACKANDFORTH) == TLMENUF_BACKANDFORTH)
     {
-        if ((dwFlags & TLMENUF_FORE) != 0)
+        currentItem = fCurrentEntry;
+        if (currentItem != NULL)
         {
-            currentItem = fCurrentEntry;
-            if (currentItem != NULL)
+            while (currentItem->fPreviousEntry != NULL)
             {
-                while (currentItem->fPreviousEntry != NULL)
-                    currentItem = currentItem->fPreviousEntry;
+                currentItem = currentItem->fPreviousEntry;
+                offset++;
             }
-            while (currentItem != fCurrentEntry)
+            menuItemInfo.wID = currentItemID - offset;
+            while (currentItem != NULL)
             {
                 hResult = currentItem->GetToolTipText(punk, itemTextBuffer);
                 if (SUCCEEDED(hResult))
                 {
+                    if (currentItem == fCurrentEntry && (dwFlags & TLMENUF_CHECKCURRENT))
+                        menuItemInfo.fState |= MFS_CHECKED;
                     FixAmpersands(itemTextBuffer);
-                    TRACE("CTravelLog::InsertMenuEntries adding entry L\"%S\"/L\"%S\" with id %d\n", itemTextBuffer, menuItemInfo.dwTypeData, menuItemInfo.wID);
                     if (InsertMenuItem(hmenu, nPos, TRUE, &menuItemInfo))
                     {
                         nPos++;
@@ -530,52 +536,33 @@
                         menuItemInfo.wID++;
                     }
                 }
+                menuItemInfo.fState &= ~MFS_CHECKED;
                 currentItem = currentItem->fNextEntry;
             }
         }
-        else
-        {
-            currentItem = fCurrentEntry;
-            if (currentItem != NULL)
-                currentItem = currentItem->fPreviousEntry;
-            while (currentItem != NULL)
-            {
-                hResult = currentItem->GetToolTipText(punk, itemTextBuffer);
-                if (SUCCEEDED(hResult))
-                {
-                    FixAmpersands(itemTextBuffer);
-                    TRACE("CTravelLog::InsertMenuEntries adding entry L\"%S\"/L\"%S\" with id %d\n", itemTextBuffer, menuItemInfo.dwTypeData, menuItemInfo.wID);
-                    if (InsertMenuItem(hmenu, nPos, TRUE, &menuItemInfo))
-                    {
-                        nPos++;
-                        menuItemInfo.wID++;
-                    }
-                }
-                currentItem = currentItem->fPreviousEntry;
-            }
-        }
+        return S_OK;
     }
-    if ((dwFlags & TLMENUF_INCLUDECURRENT) != 0)
+    if (dwFlags & TLMENUF_BACK)
     {
-        if (fCurrentEntry != NULL)
+        currentItem = fCurrentEntry;
+        if (currentItem != NULL)
+            currentItem = currentItem->fPreviousEntry;
+        while (currentItem != NULL)
         {
-            hResult = fCurrentEntry->GetToolTipText(punk, itemTextBuffer);
+            hResult = currentItem->GetToolTipText(punk, itemTextBuffer);
             if (SUCCEEDED(hResult))
             {
                 FixAmpersands(itemTextBuffer);
-                if ((dwFlags & TLMENUF_CHECKCURRENT) != 0)
-                    menuItemInfo.fState |= MFS_CHECKED;
-                TRACE("CTravelLog::InsertMenuEntries adding entry L\"%S\"/L\"%S\" with id %d\n", itemTextBuffer, menuItemInfo.dwTypeData, menuItemInfo.wID);
                 if (InsertMenuItem(hmenu, nPos, TRUE, &menuItemInfo))
                 {
                     nPos++;
                     menuItemInfo.wID++;
                 }
-                menuItemInfo.fState &= ~MFS_CHECKED;
             }
+            currentItem = currentItem->fPreviousEntry;
         }
     }
-    if ((dwFlags & TLMENUF_FORE) != 0)
+    if (dwFlags & TLMENUF_FORE)
     {
         currentItem = fCurrentEntry;
         if (currentItem != NULL)
@@ -586,7 +573,6 @@
             if (SUCCEEDED(hResult))
             {
                 FixAmpersands(itemTextBuffer);
-                TRACE("CTravelLog::InsertMenuEntries adding entry L\"%S\"/L\"%S\" with id %d\n", itemTextBuffer, menuItemInfo.dwTypeData, menuItemInfo.wID);
                 if (InsertMenuItem(hmenu, nPos, TRUE, &menuItemInfo))
                 {
                     nPos++;
