diff --git a/fluid/undo.cxx b/fluid/undo.cxx
index 98dff5ea291b3130164e5336453d37536e382fec..4c66ac2ea31a32df94568544c4b7b783ebd00370 100644
--- a/fluid/undo.cxx
+++ b/fluid/undo.cxx
@@ -34,9 +34,8 @@
 
 extern Fl_Preferences	fluid_prefs;	// FLUID preferences
 extern Fl_Menu_Item	Main_Menu[];	// Main menu
+extern Fl_Menu_Bar     *main_menubar;	// Main menubar
 
-#define UNDO_ITEM	25		// Undo menu item index
-#define REDO_ITEM	26		// Redo menu item index
 
 
 //
@@ -77,6 +76,7 @@ static char *undo_filename(int level) {
 
 // Redo menu callback
 void redo_cb(Fl_Widget *, void *) {
+  int undo_item = main_menubar->find_index(undo_cb);
 
   if (undo_current >= undo_last) return;
 
@@ -93,12 +93,14 @@ void redo_cb(Fl_Widget *, void *) {
   set_modflag(undo_current != undo_save);
 
   // Update undo/redo menu items...
-  if (undo_current >= undo_last) Main_Menu[REDO_ITEM].deactivate();
-  Main_Menu[UNDO_ITEM].activate();
+  if (undo_current >= undo_last) Main_Menu[undo_item].deactivate();
+  Main_Menu[undo_item].activate();
 }
 
 // Undo menu callback
 void undo_cb(Fl_Widget *, void *) {
+  int undo_item = main_menubar->find_index(undo_cb);
+  int redo_item = main_menubar->find_index(redo_cb);
 
   if (undo_current <= 0) return;
 
@@ -119,13 +121,15 @@ void undo_cb(Fl_Widget *, void *) {
   set_modflag(undo_current != undo_save);
 
   // Update undo/redo menu items...
-  if (undo_current <= 0) Main_Menu[UNDO_ITEM].deactivate();
-  Main_Menu[REDO_ITEM].activate();
+  if (undo_current <= 0) Main_Menu[undo_item].deactivate();
+  Main_Menu[redo_item].activate();
   undo_resume();
 }
 
 // Save current file to undo buffer
 void undo_checkpoint() {
+  int undo_item = main_menubar->find_index(undo_cb);
+  int redo_item = main_menubar->find_index(redo_cb);
   //  printf("undo_checkpoint(): undo_current=%d, undo_paused=%d, modflag=%d\n",
   //         undo_current, undo_paused, modflag);
 
@@ -150,13 +154,12 @@ void undo_checkpoint() {
   if (undo_current > undo_max) undo_max = undo_current;
 
   // Enable the Undo and disable the Redo menu items...
-  Main_Menu[UNDO_ITEM].activate();
-  Main_Menu[REDO_ITEM].deactivate();
+  Main_Menu[undo_item].activate();
+  Main_Menu[redo_item].deactivate();
 }
 
 // Clear undo buffer
 void undo_clear() {
-
   // Remove old checkpoint files...
   for (int i = 0; i <= undo_max; i ++) {
     fl_unlink(undo_filename(i));