Index: src/preferences/menu/ColorWindow.cpp
===================================================================
--- src/preferences/menu/ColorWindow.cpp	(revision 23272)
+++ src/preferences/menu/ColorWindow.cpp	(working copy)
@@ -9,6 +9,7 @@
 
 
 #include "ColorWindow.h"
+#include "MenuSettings.h"
 #include "msg.h"
 
 #include <Application.h>
@@ -22,9 +23,9 @@
 		B_NOT_ZOOMABLE | B_NOT_RESIZABLE),
 	fOwner(owner)
 {
-	// Set and collect the variables for revert
-	get_menu_info(&fInfo);
-	get_menu_info(&fRevertInfo);
+	fCurrentColor = MenuSettings::GetInstance()->BackgroundColor();
+	fPreviousColor = MenuSettings::GetInstance()->PreviousBackgroundColor();
+	fDefaultColor = MenuSettings::GetInstance()->DefaultBackgroundColor();
 
 	BView *topView = new BView(Bounds(), "topView", B_FOLLOW_ALL_SIDES, 0);
 	topView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
@@ -32,7 +33,7 @@
 
 	fColorControl = new BColorControl(BPoint(10, 10), B_CELLS_32x8, 
 		9, "COLOR", new BMessage(MENU_COLOR), true);
-	fColorControl->SetValue(fInfo.background_color);
+	fColorControl->SetValue(fCurrentColor);
 	fColorControl->ResizeToPreferred();
 	topView->AddChild(fColorControl);
 
@@ -44,7 +45,7 @@
 		new BMessage(MENU_COLOR_DEFAULT), B_FOLLOW_LEFT | B_FOLLOW_TOP, 
 		B_WILL_DRAW | B_NAVIGABLE);
 	fDefaultButton->ResizeToPreferred();
-	fDefaultButton->SetEnabled(false);
+	fDefaultButton->SetEnabled(fCurrentColor != fDefaultColor);
 	topView->AddChild(fDefaultButton);
 
 	rect.OffsetBy(fDefaultButton->Bounds().Width() + 10, 0);
@@ -52,7 +53,7 @@
 		new BMessage(MENU_REVERT), B_FOLLOW_LEFT | B_FOLLOW_TOP, 
 		B_WILL_DRAW | B_NAVIGABLE);
 	fRevertButton->ResizeToPreferred();
-	fRevertButton->SetEnabled(false);
+	fRevertButton->SetEnabled(fCurrentColor != fPreviousColor);
 	topView->AddChild(fRevertButton);
 
 	ResizeTo(fColorControl->Bounds().Width() + 20, fRevertButton->Frame().bottom + 10);
@@ -68,45 +69,41 @@
 
 
 void
+ColorWindow::_UpdateAndPost()
+{
+	fDefaultButton->SetEnabled(fCurrentColor != fDefaultColor);
+	fRevertButton->SetEnabled(fCurrentColor != fPreviousColor);
+	
+	fCurrentColor = fColorControl->ValueAsColor();
+		
+	menu_info info;
+	get_menu_info(&info);
+	info.background_color = fCurrentColor;
+	set_menu_info(&info);
+	
+	be_app->PostMessage(MENU_COLOR);	
+}
+
+
+void
 ColorWindow::MessageReceived(BMessage *msg)
 {
 	switch (msg->what) {
 		case MENU_REVERT:
-			fColorControl->SetValue(fRevertInfo.background_color);
-			fInfo.background_color = fColorControl->ValueAsColor();
-			set_menu_info(&fInfo);
-			be_app->PostMessage(UPDATE_WINDOW);
-			fRevertButton->SetEnabled(false);
+			fColorControl->SetValue(fPreviousColor);
+			_UpdateAndPost();
 			break;
 
-		case MENU_COLOR_DEFAULT:
-			// change to system color for system wide
-			// compatability
-			rgb_color color;
-			color.red = 216;
-			color.blue = 216;
-			color.green = 216;
-			color.alpha = 255;
-			fColorControl->SetValue(color);
-			fDefaultButton->SetEnabled(false);
-			get_menu_info(&fInfo);
-			fInfo.background_color = fColorControl->ValueAsColor();
-			set_menu_info(&fInfo);
-			be_app->PostMessage(MENU_COLOR);
+		case MENU_COLOR_DEFAULT:			
+			fColorControl->SetValue(fDefaultColor);
+			_UpdateAndPost();
 			break;
 
 		case MENU_COLOR:
-			get_menu_info(&fInfo);
-			fRevertInfo.background_color = fInfo.background_color;
-			fInfo.background_color = fColorControl->ValueAsColor();
-			set_menu_info(&fInfo);
-			be_app->PostMessage(MENU_COLOR);
-			fDefaultButton->SetEnabled(true);
-			fRevertButton->SetEnabled(true);
+			_UpdateAndPost();			
 			break;
 
 		default:
-			be_app->PostMessage(UPDATE_WINDOW);
 			BWindow::MessageReceived(msg);
 			break;
 	}
Index: src/preferences/menu/ColorWindow.h
===================================================================
--- src/preferences/menu/ColorWindow.h	(revision 23272)
+++ src/preferences/menu/ColorWindow.h	(working copy)
@@ -27,12 +27,16 @@
 		virtual void Quit();
 		virtual void MessageReceived(BMessage* message);
 
+	private:
+		void		_UpdateAndPost();
+
 	private:	
-		BColorControl*		fColorControl;
+		BColorControl*	fColorControl;
 		BButton*		fDefaultButton;
-		BButton*		fRevertButton;
-		menu_info		fRevertInfo;
-		menu_info		fInfo;
+		BButton*		fRevertButton;		
+		rgb_color		fCurrentColor;
+		rgb_color		fPreviousColor;
+		rgb_color		fDefaultColor;	
 		BMessenger		fOwner;
 };
 
Index: src/preferences/menu/MenuBar.cpp
===================================================================
--- src/preferences/menu/MenuBar.cpp	(revision 23272)
+++ src/preferences/menu/MenuBar.cpp	(working copy)
@@ -20,16 +20,12 @@
 #include <TranslationUtils.h>	
 #include <Window.h>
 
-#include <stdio.h>
-#include <stdlib.h>
 
-
 MenuBar::MenuBar()
 	: BMenuBar(BRect(40, 10, 10, 10), "menu", B_FOLLOW_TOP | B_FRAME_EVENTS,
 		B_ITEMS_IN_COLUMN, true)
 {
-	_BuildMenu();
-	UpdateMenu();
+	_BuildMenu();	
 	SetItemMargins(14.0, 2.0, 20.0, 0.0);
 }
 
@@ -81,38 +77,19 @@
 
 
 void
-MenuBar::UpdateMenu()
+MenuBar::Update()
 {
 	menu_info info;
 	MenuSettings::GetInstance()->Get(info);
 
 	fAlwaysShowTriggersItem->SetMarked(info.triggers_always_shown);
 
-	key_map *keys; 
-	char* chars; 
-	get_key_map(&keys, &chars); 
-
-	bool altAsShortcut = (keys->left_command_key == 0x5d) 
-		&& (keys->right_command_key == 0x5f); 
-
-	free(chars); 
-	free(keys);
-
+	bool altAsShortcut = MenuSettings::GetInstance()->AltAsShortcut();
 	fAltAsShortcutItem->SetMarked(altAsShortcut); 
 	fControlAsShortcutItem->SetMarked(!altAsShortcut); 
-}
 
-
-void
-MenuBar::Update()
-{
-	UpdateMenu();
-
 	BFont font;
 	if (LockLooper()) {
-		menu_info info;
-		MenuSettings::GetInstance()->Get(info);
-
 		font.SetFamilyAndStyle(info.f_family, info.f_style);
 		font.SetSize(info.font_size);
 		SetFont(&font);
Index: src/preferences/menu/MenuBar.h
===================================================================
--- src/preferences/menu/MenuBar.h	(revision 23272)
+++ src/preferences/menu/MenuBar.h	(working copy)
@@ -18,8 +18,7 @@
 		MenuBar();
 
 		virtual	void AttachedToWindow();
-
-		void UpdateMenu();
+				
 		void Update();
 		virtual void FrameResized(float width, float height);
 
Index: src/preferences/menu/MenuSettings.cpp
===================================================================
--- src/preferences/menu/MenuSettings.cpp	(revision 23272)
+++ src/preferences/menu/MenuSettings.cpp	(working copy)
@@ -9,6 +9,10 @@
 
 
 #include "MenuSettings.h"
+#include <Roster.h>
+#include <Errors.h>
+#include <stdio.h>
+#include <stdlib.h>
 
  
 MenuSettings::MenuSettings()
@@ -17,15 +21,22 @@
 	// would provide and execute this information, as it does
 	// for get_menu_info and set_menu_info (or is this information
 	// coming from libbe.so? or else where?). 
-	fDefaultSettings.font_size = 12;
-	//info.f_family = "test";
-	//info.f_style = "test";
-	fDefaultSettings.background_color = ui_color(B_MENU_BACKGROUND_COLOR);
+	fDefaultSettings.font_size = 12;	
+	sprintf(fDefaultSettings.f_family,"%s","Bitstream Vera Sans");
+	sprintf(fDefaultSettings.f_style,"%s","Roman");
+	rgb_color color;
+	color.red = 216;
+	color.blue = 216;
+	color.green = 216;
+	color.alpha = 255;
+	fDefaultSettings.background_color = color;//ui_color(B_MENU_BACKGROUND_COLOR);
 	fDefaultSettings.separator = 0;
 	fDefaultSettings.click_to_open = true;
 	fDefaultSettings.triggers_always_shown = false;
-
-	fPreviousSettings = fDefaultSettings;
+	fDefaultAltAsShortcut = true;
+	
+	get_menu_info(&fPreviousSettings);
+	fPreviousAltAsShortcut = AltAsShortcut();
 }
 
 
@@ -55,26 +66,86 @@
 void
 MenuSettings::Set(menu_info &info)
 {
-	get_menu_info(&fPreviousSettings);
 	set_menu_info(&info);
 }
 
 
+bool
+MenuSettings::AltAsShortcut() const
+{
+	key_map *keys; 
+	char* chars; 
+	
+	get_key_map(&keys, &chars);
+	bool altAsShortcut = (keys->left_command_key == 0x5d) 
+		&& (keys->right_command_key == 0x5f); 
+
+	free(chars);
+	free(keys);
+	
+	return altAsShortcut;	
+}
+
+
 void
+MenuSettings::SetAltAsShortcut(bool altAsShortcut)
+{
+	if (altAsShortcut) {
+		// This might not be the same for all keyboards
+		set_modifier_key(B_LEFT_COMMAND_KEY, 0x5d);
+		set_modifier_key(B_RIGHT_COMMAND_KEY, 0x5f);
+		set_modifier_key(B_LEFT_CONTROL_KEY, 0x5c);
+		set_modifier_key(B_RIGHT_OPTION_KEY, 0x60);
+	} else {
+		// This might not be the same for all keyboards
+		set_modifier_key(B_LEFT_COMMAND_KEY, 0x5c);
+		set_modifier_key(B_RIGHT_COMMAND_KEY, 0x60);
+		set_modifier_key(B_LEFT_CONTROL_KEY, 0x5d);
+		set_modifier_key(B_RIGHT_OPTION_KEY, 0x5f);
+	}
+	be_roster->Broadcast(new BMessage(B_MODIFIERS_CHANGED));	
+}
+
+
+void
 MenuSettings::Revert()
 {
 	set_menu_info(&fPreviousSettings);
+	SetAltAsShortcut(fPreviousAltAsShortcut);
 }
 
 
 void
 MenuSettings::ResetToDefaults()
 {
-	get_menu_info(&fPreviousSettings);
 	set_menu_info(&fDefaultSettings);
+	SetAltAsShortcut(fDefaultAltAsShortcut);
 }
 
 
+rgb_color
+MenuSettings::BackgroundColor() const
+{
+	menu_info info;
+	get_menu_info(&info);	
+	return info.background_color;
+}
+
+
+rgb_color
+MenuSettings::PreviousBackgroundColor() const
+{
+	return fPreviousSettings.background_color;
+}
+
+
+rgb_color
+MenuSettings::DefaultBackgroundColor() const
+{
+	return fDefaultSettings.background_color;
+}
+
+
 bool
 MenuSettings::IsDefaultable()
 {
@@ -82,9 +153,29 @@
 	get_menu_info(&info);
 
 	return info.font_size !=  fDefaultSettings.font_size
+		|| strcmp(info.f_family, fDefaultSettings.f_family) != 0
+		|| strcmp(info.f_style, fDefaultSettings.f_style) != 0
 		|| info.background_color != fDefaultSettings.background_color
 		|| info.separator != fDefaultSettings.separator
 		|| info.click_to_open != fDefaultSettings.click_to_open
-		|| info.triggers_always_shown != fDefaultSettings.triggers_always_shown;
+		|| info.triggers_always_shown != fDefaultSettings.triggers_always_shown
+		|| AltAsShortcut() != fDefaultAltAsShortcut;
 }
 
+
+bool
+MenuSettings::IsRevertable()
+{
+	menu_info info;
+	get_menu_info(&info);
+
+	return info.font_size !=  fPreviousSettings.font_size
+		|| strcmp(info.f_family, fPreviousSettings.f_family) != 0
+		|| strcmp(info.f_style, fPreviousSettings.f_style) != 0
+		|| info.background_color != fPreviousSettings.background_color
+		|| info.separator != fPreviousSettings.separator
+		|| info.click_to_open != fPreviousSettings.click_to_open
+		|| info.triggers_always_shown != fPreviousSettings.triggers_always_shown
+		|| AltAsShortcut() != fPreviousAltAsShortcut;
+}
+
Index: src/preferences/menu/MenuSettings.h
===================================================================
--- src/preferences/menu/MenuSettings.h	(revision 23272)
+++ src/preferences/menu/MenuSettings.h	(working copy)
@@ -18,17 +18,28 @@
 
 		void Get(menu_info &info) const;
 		void Set(menu_info &info);
+		
+		bool 		AltAsShortcut() const;
+		void 		SetAltAsShortcut(bool altAsShortcut);	
+		
+		rgb_color	BackgroundColor() const;		
+		rgb_color	PreviousBackgroundColor() const;
+		rgb_color	DefaultBackgroundColor() const;
+	
 
 		void Revert();
 		void ResetToDefaults();
 		bool IsDefaultable();
-
+		bool IsRevertable();
+				
 	private:
 		MenuSettings();
 		~MenuSettings();
 
 		menu_info fPreviousSettings;
-		menu_info fDefaultSettings;	
+		menu_info fDefaultSettings;
+		bool	  fPreviousAltAsShortcut;
+		bool	  fDefaultAltAsShortcut;
 };
 
 #endif	// MENU_SETTINGS_H
Index: src/preferences/menu/MenuWindow.cpp
===================================================================
--- src/preferences/menu/MenuWindow.cpp	(revision 23272)
+++ src/preferences/menu/MenuWindow.cpp	(working copy)
@@ -20,7 +20,6 @@
 #include <Box.h>
 #include <Button.h>
 #include <MenuItem.h>
-#include <Roster.h>
 
 #include <stdio.h>
 #include <string.h>
@@ -31,6 +30,8 @@
 		B_NOT_ZOOMABLE | B_NOT_RESIZABLE | B_ASYNCHRONOUS_CONTROLS | B_QUIT_ON_WINDOW_CLOSE)
 {
 	fColorWindow = NULL;
+	
+	fSettings = MenuSettings::GetInstance();
 
 	BView* topView = new BView(Bounds(), "menuView", B_FOLLOW_ALL_SIDES,
 		B_WILL_DRAW);
@@ -60,34 +61,29 @@
 	topView->AddChild(fRevertButton);
 
 	topView->MakeFocus();
-	fMenuBar->Update();
+	
+	_UpdateAll();
 }
 
 
 void
 MenuWindow::MessageReceived(BMessage *msg)
 {
-	MenuSettings *settings = MenuSettings::GetInstance();
 	menu_info info;
 
 	switch (msg->what) {
 		case MENU_REVERT:
-			settings->Revert();
-
-			fRevertButton->SetEnabled(false);
-			fDefaultsButton->SetEnabled(settings->IsDefaultable());
-			fMenuBar->Update();
+			fSettings->Revert();
+			_UpdateAll();
 			break;
 
 		case MENU_DEFAULT:
-			settings->ResetToDefaults();
-
-			fDefaultsButton->SetEnabled(false);
-			fMenuBar->Update();
+			fSettings->ResetToDefaults();
+			_UpdateAll();
 			break;
 
 		case UPDATE_WINDOW:
-			fMenuBar->Update();
+			_UpdateAll();
 			break;
 
 		case MENU_FONT_FAMILY:
@@ -98,64 +94,39 @@
 			const font_style *style;
 			msg->FindString("style", (const char **)&style);
 
-			settings->Get(info);
+			fSettings->Get(info);
 			strlcpy(info.f_family, (const char *)family, B_FONT_FAMILY_LENGTH);
 			strlcpy(info.f_style, (const char *)style, B_FONT_STYLE_LENGTH);
-			settings->Set(info);
+			fSettings->Set(info);
 
-			fRevertButton->SetEnabled(true);
-			fDefaultsButton->SetEnabled(settings->IsDefaultable());
-			fMenuBar->Update();
+			_UpdateAll();
 			break;
 		}
 
 		case MENU_FONT_SIZE:
-			settings->Get(info);
+			fSettings->Get(info);
 			msg->FindFloat("size", &info.font_size);
-			settings->Set(info);
+			fSettings->Set(info);
 
-			fRevertButton->SetEnabled(true);
-			fDefaultsButton->SetEnabled(settings->IsDefaultable());
-			fMenuBar->Update();
+			_UpdateAll();
 			break;
 
 		case ALLWAYS_TRIGGERS_MSG:
-			settings->Get(info);
+			fSettings->Get(info);
 			info.triggers_always_shown = !info.triggers_always_shown;
-			settings->Set(info);
+			fSettings->Set(info);
 
-			fRevertButton->SetEnabled(true);
-			fDefaultsButton->SetEnabled(settings->IsDefaultable());
-			fMenuBar->UpdateMenu();
-			fMenuBar->Update();
+			_UpdateAll();
 			break;
 
-		case CTL_MARKED_MSG:
-			// This might not be the same for all keyboards
-			set_modifier_key(B_LEFT_COMMAND_KEY, 0x5c);
-			set_modifier_key(B_RIGHT_COMMAND_KEY, 0x60);
-			set_modifier_key(B_LEFT_CONTROL_KEY, 0x5d);
-			set_modifier_key(B_RIGHT_OPTION_KEY, 0x5f);
-			be_roster->Broadcast(new BMessage(B_MODIFIERS_CHANGED));
-
-			fRevertButton->SetEnabled(true);
-			fDefaultsButton->SetEnabled(settings->IsDefaultable());
-			fMenuBar->Update();
+		case CTL_MARKED_MSG:			
+			fSettings->SetAltAsShortcut(false);
+			_UpdateAll();
 			break;
 
 		case ALT_MARKED_MSG:
-
-			// This might not be the same for all keyboards
-			set_modifier_key(B_LEFT_COMMAND_KEY, 0x5d);
-			set_modifier_key(B_RIGHT_COMMAND_KEY, 0x5f);
-			set_modifier_key(B_LEFT_CONTROL_KEY, 0x5c);
-			set_modifier_key(B_RIGHT_OPTION_KEY, 0x60);
-
-			be_roster->Broadcast(new BMessage(B_MODIFIERS_CHANGED));
-
-			fRevertButton->SetEnabled(true);
-			fDefaultsButton->SetEnabled(settings->IsDefaultable());
-			fMenuBar->Update();
+			fSettings->SetAltAsShortcut(true);			
+			_UpdateAll();
 			break;
 
 		case COLOR_SCHEME_OPEN_MSG:
@@ -170,10 +141,8 @@
 			fColorWindow = NULL;
 			break;
 
-		case MENU_COLOR:
-			fRevertButton->SetEnabled(true);
-			fDefaultsButton->SetEnabled(settings->IsDefaultable());
-			fMenuBar->Update();
+		case MENU_COLOR:			
+			_UpdateAll();
 			break;
 
 		default:
@@ -183,6 +152,15 @@
 }
 
 
+void
+MenuWindow::_UpdateAll()
+{
+	fRevertButton->SetEnabled(fSettings->IsRevertable());
+	fDefaultsButton->SetEnabled(fSettings->IsDefaultable());
+	fMenuBar->Update();
+}
+
+
 bool
 MenuWindow::QuitRequested()
 {
Index: src/preferences/menu/MenuWindow.h
===================================================================
--- src/preferences/menu/MenuWindow.h	(revision 23272)
+++ src/preferences/menu/MenuWindow.h	(working copy)
@@ -10,7 +10,7 @@
 #ifndef MENU_WINDOW_H
 #define MENU_WINDOW_H
 
-
+#include "MenuSettings.h"
 #include <Menu.h>
 #include <Window.h>
 
@@ -20,16 +20,20 @@
 class MenuBar;
 class MenuWindow : public BWindow {
 	public:
-		MenuWindow(BRect frame);
+		MenuWindow(BRect frame);		
 		
 		virtual void MessageReceived(BMessage *message);
 		virtual bool QuitRequested();
-
+		
+	private:		
+		void _UpdateAll();
+		
 	private:	
 		ColorWindow*	fColorWindow;
 		MenuBar*		fMenuBar;
 		BButton*		fDefaultsButton;
 		BButton*		fRevertButton;
+		MenuSettings*	fSettings;
 };
 
 #endif	// MENU_WINDOW_H
