diff --git a/src/ui/script_ui.cpp b/src/ui/script_ui.cpp
index bf2575f52..aabcb90eb 100644
--- a/src/ui/script_ui.cpp
+++ b/src/ui/script_ui.cpp
@@ -1461,9 +1461,17 @@ local SCM CclDefineMenu(SCM list)
     }
 
     if (name) {
-	menu = malloc(sizeof(Menu));
-	memcpy(menu, &item, sizeof(Menu));
+	menu = FindMenu(name);
+	if (!menu) {
+	    menu = malloc(sizeof(Menu));
+	    *(Menu **)hash_add(MenuHash,name) = menu;
+	} else {
+	    // FIXME: this doesn't free everything
+	    free(menu->items);
+	    menu->items = NULL;
+	}
 	menu->nitems = 0; // reset to zero
+	memcpy(menu, &item, sizeof(Menu));
 	//move the buttons for different resolutions..
 	if (VideoWidth != 640) {
 	    if (VideoWidth == 0) {
@@ -1480,7 +1488,6 @@ local SCM CclDefineMenu(SCM list)
 	    }
 	}
 	//printf("Me:%s\n", name);
-	*(Menu **)hash_add(MenuHash,name) = menu;
     } else {
 	fprintf(stderr,"Name of menu is missed, skip definition\n");
     }
@@ -1717,11 +1724,6 @@ local SCM CclDefineMenuItem(SCM list)
 			if ( !gh_null_p(gh_car(sublist)) ) {
 			    item->d.button.text = gh_scm2newstr(
 				gh_car(sublist),NULL);
-			    // FIXME: can be removed
-			    if ( !strcmp(item->d.button.text, "null") ) {
-				free(item->d.button.text);
-				item->d.button.text = NULL;
-			    }
 			}
 			sublist=gh_cdr(sublist);
 		    } else if ( gh_eq_p(value, gh_symbol2scm("hotkey")) ) {