Index: src/preferences/virtualmemory/Settings.cpp
===================================================================
--- src/preferences/virtualmemory/Settings.cpp	(revision 21991)
+++ src/preferences/virtualmemory/Settings.cpp	(working copy)
@@ -205,6 +205,14 @@
 
 
 bool
+Settings::IsDefaultable()
+{
+	return fSwapEnabled != fInitialSwapEnabled
+		|| fSwapSize != fInitialSwapSize;
+}
+
+
+bool
 Settings::SwapChanged()
 {
 	return fSwapEnabled != fInitialSwapEnabled
Index: src/preferences/virtualmemory/Settings.h
===================================================================
--- src/preferences/virtualmemory/Settings.h	(revision 21991)
+++ src/preferences/virtualmemory/Settings.h	(working copy)
@@ -27,6 +27,7 @@
 
 		void SetSwapDefaults();
 		void RevertSwapChanges();
+		bool IsDefaultable();
 		bool SwapChanged();
 
 	private:
Index: src/preferences/virtualmemory/SettingsWindow.cpp
===================================================================
--- src/preferences/virtualmemory/SettingsWindow.cpp	(revision 21991)
+++ src/preferences/virtualmemory/SettingsWindow.cpp	(working copy)
@@ -196,17 +196,19 @@
 	// Add "Defaults" and "Revert" buttons
 
 	rect.top = box->Frame().bottom + 10;
-	BButton* button = new BButton(rect, "defaults", "Defaults", new BMessage(kMsgDefaults));
-	button->ResizeToPreferred();
-	view->AddChild(button);
+	fDefaultsButton = new BButton(rect, "defaults", "Defaults", new BMessage(kMsgDefaults));
+	fDefaultsButton->ResizeToPreferred();
+	fDefaultsButton->SetEnabled(fSettings.IsDefaultable());
+	view->AddChild(fDefaultsButton);
 
-	rect = button->Frame();
+	rect = fDefaultsButton->Frame();
 	rect.OffsetBy(rect.Width() + 10, 0);
 	fRevertButton = new BButton(rect, "revert", "Revert", new BMessage(kMsgRevert));
-	button->ResizeToPreferred();
+	fRevertButton->ResizeToPreferred();
+	fRevertButton->SetEnabled(false);
 	view->AddChild(fRevertButton);
 
-	view->ResizeTo(view->Frame().Width(), button->Frame().bottom + 10);
+	view->ResizeTo(view->Frame().Width(), fRevertButton->Frame().bottom + 10);
 	ResizeTo(view->Bounds().Width(), view->Bounds().Height());
 	AddChild(view);
 		// add view after resizing the window, so that the view's resizing
@@ -266,6 +268,8 @@
 
 	// ToDo: set volume
 
+	fDefaultsButton->SetEnabled(fSettings.IsDefaultable());
+
 	bool changed = fSettings.SwapChanged();
 	if (fRevertButton->IsEnabled() != changed) {
 		fRevertButton->SetEnabled(changed);
Index: src/preferences/virtualmemory/SettingsWindow.h
===================================================================
--- src/preferences/virtualmemory/SettingsWindow.h	(revision 21991)
+++ src/preferences/virtualmemory/SettingsWindow.h	(working copy)
@@ -30,6 +30,7 @@
 
 		BCheckBox*		fSwapEnabledCheckBox;
 		BSlider*		fSizeSlider;
+		BButton*		fDefaultsButton;
 		BButton*		fRevertButton;
 		BStringView*	fWarningStringView;
 
Index: src/preferences/mouse/MouseSettings.h
===================================================================
--- src/preferences/mouse/MouseSettings.h	(revision 21991)
+++ src/preferences/mouse/MouseSettings.h	(working copy)
@@ -30,6 +30,7 @@
 
 		void Revert();
 		void Defaults();
+		bool IsDefaultable();
 		void Dump();
 
 		BPoint WindowPosition() const { return fWindowPosition; }
Index: src/preferences/mouse/MouseWindow.cpp
===================================================================
--- src/preferences/mouse/MouseWindow.cpp	(revision 21991)
+++ src/preferences/mouse/MouseWindow.cpp	(working copy)
@@ -48,12 +48,13 @@
 	// Add the "Default" button
 	BRect rect(kBorderSpace, fSettingsView->Frame().bottom + kItemSpace + 2,
 		kBorderSpace + 75, fSettingsView->Frame().bottom + 20);
-	BButton *button = new BButton(rect, "defaults", "Defaults", new BMessage(kMsgDefaults));
-	button->ResizeToPreferred();
-	view->AddChild(button);
+	fDefaultsButton = new BButton(rect, "defaults", "Defaults", new BMessage(kMsgDefaults));
+	fDefaultsButton->ResizeToPreferred();
+	fDefaultsButton->SetEnabled(fSettings.IsDefaultable());
+	view->AddChild(fDefaultsButton);
 
 	// Add the "Revert" button
-	rect.OffsetBy(button->Bounds().Width() + kItemSpace, 0);
+	rect.OffsetBy(fDefaultsButton->Bounds().Width() + kItemSpace, 0);
 	fRevertButton = new BButton(rect, "revert", "Revert", new BMessage(kMsgRevert));
 	fRevertButton->SetEnabled(false);
 	fRevertButton->ResizeToPreferred();
@@ -64,7 +65,7 @@
 		// buttons and draw the selected imagery
 
 	ResizeTo(fSettingsView->Frame().right + kBorderSpace,
-		button->Frame().bottom + kBorderSpace - 1);
+		fRevertButton->Frame().bottom + kBorderSpace - 1);
 
 	// check if the window is on screen
 
@@ -105,7 +106,8 @@
 			fSettings.Defaults();
 			fSettingsView->UpdateFromSettings();
 
-			SetRevertable(true);
+			fDefaultsButton->SetEnabled(false);
+			fRevertButton->SetEnabled(true);
 			break;
 		}
 
@@ -114,7 +116,8 @@
 			fSettings.Revert();
 			fSettingsView->UpdateFromSettings();
 
-			SetRevertable(false);
+			fDefaultsButton->SetEnabled(fSettings.IsDefaultable());
+			fRevertButton->SetEnabled(false);
 			break;
 		}
 
@@ -124,7 +127,8 @@
 			if (message->FindInt32("index", &type) == B_OK) {
 				fSettings.SetMouseType(++type);
 				fSettingsView->SetMouseType(type);
-				SetRevertable(true);
+				fDefaultsButton->SetEnabled(fSettings.IsDefaultable());
+				fRevertButton->SetEnabled(true);
 			}
 			break;
 		}
@@ -134,7 +138,8 @@
 			int32 mode;
 			if (message->FindInt32("mode", &mode) == B_OK) {
 				fSettings.SetMouseMode((mode_mouse)mode);
-				SetRevertable(true);
+				fDefaultsButton->SetEnabled(fSettings.IsDefaultable());
+				fRevertButton->SetEnabled(true);
 			}
 			break;
 		}
@@ -145,7 +150,8 @@
 			if (message->FindInt32("be:value", &value) == B_OK) {
 				// slow = 1000000, fast = 0
 				fSettings.SetClickSpeed(value * 1000);
-				SetRevertable(true);
+				fDefaultsButton->SetEnabled(fSettings.IsDefaultable());
+				fRevertButton->SetEnabled(true);
 			}
 			break;
 		}
@@ -156,7 +162,8 @@
 			if (message->FindInt32("be:value", &value) == B_OK) {
 				// slow = 8192, fast = 524287
 				fSettings.SetMouseSpeed((int32)pow(2, value * 6 / 1000) * 8192);
-				SetRevertable(true);
+				fDefaultsButton->SetEnabled(fSettings.IsDefaultable());
+				fRevertButton->SetEnabled(true);
 			}
 			break;
 		}
@@ -167,7 +174,8 @@
 			if (message->FindInt32("be:value", &value) == B_OK) {
 				// slow = 0, fast = 262144
 				fSettings.SetAccelerationFactor((int32)pow(value * 4 / 1000, 2) * 16384);
-				SetRevertable(true);
+				fDefaultsButton->SetEnabled(fSettings.IsDefaultable());
+				fRevertButton->SetEnabled(true);
 			}
 			break;
 		}
@@ -189,7 +197,8 @@
 				}
 
 				fSettings.SetMapping(button, mapping);
-				SetRevertable(true);
+				fDefaultsButton->SetEnabled(fSettings.IsDefaultable());
+				fRevertButton->SetEnabled(true);
 				fSettingsView->MouseMapUpdated();
 			}
 			break;
@@ -201,10 +210,3 @@
 	}
 }
 
-
-void 
-MouseWindow::SetRevertable(bool revertable)
-{
-	fRevertButton->SetEnabled(revertable);
-}
-
Index: src/preferences/mouse/MouseWindow.h
===================================================================
--- src/preferences/mouse/MouseWindow.h	(revision 21991)
+++ src/preferences/mouse/MouseWindow.h	(working copy)
@@ -33,10 +33,9 @@
 		virtual bool QuitRequested();
 		virtual void MessageReceived(BMessage *message);
 
-		void SetRevertable(bool revertable);
-
 	private:
 		MouseSettings	fSettings;
+		BButton			*fDefaultsButton;
 		BButton			*fRevertButton;
 		SettingsView	*fSettingsView;
 };
Index: src/preferences/mouse/MouseSettings.cpp
===================================================================
--- src/preferences/mouse/MouseSettings.cpp	(revision 21991)
+++ src/preferences/mouse/MouseSettings.cpp	(working copy)
@@ -191,6 +191,23 @@
 }
 
 
+/** Checks if the settings are different then the system defaults
+ */
+
+bool
+MouseSettings::IsDefaultable()
+{
+	return fSettings.click_speed != kDefaultClickSpeed
+		|| fSettings.accel.speed != kDefaultMouseSpeed
+		|| fSettings.type != kDefaultMouseType
+		|| fSettings.accel.accel_factor != kDefaultAccelerationFactor
+		|| fMode != B_NORMAL_MOUSE
+		|| fSettings.map.button[0] != B_PRIMARY_MOUSE_BUTTON
+		|| fSettings.map.button[1] != B_SECONDARY_MOUSE_BUTTON
+		|| fSettings.map.button[2] != B_TERTIARY_MOUSE_BUTTON;
+}
+
+
 /**	Reverts to the active settings at program startup
  */
 
Index: src/preferences/fonts/FontView.cpp
===================================================================
--- src/preferences/fonts/FontView.cpp	(revision 21991)
+++ src/preferences/fonts/FontView.cpp	(working copy)
@@ -93,6 +93,13 @@
 	fFixedView->RelayoutIfNeeded();
 }
 
+bool
+FontView::IsDefaultable()
+{
+	return fPlainView->IsDefaultable()
+		|| fBoldView->IsDefaultable()
+		|| fFixedView->IsDefaultable();
+}
 
 bool
 FontView::IsRevertable()
Index: src/preferences/fonts/MainWindow.h
===================================================================
--- src/preferences/fonts/MainWindow.h	(revision 21991)
+++ src/preferences/fonts/MainWindow.h	(working copy)
@@ -33,6 +33,7 @@
 
 		BMessageRunner*	fRunner;
 		FontView*		fFontsView;
+		BButton*		fDefaultsButton;
 		BButton*		fRevertButton;
 
 		FontsSettings	fSettings;
Index: src/preferences/fonts/FontView.h
===================================================================
--- src/preferences/fonts/FontView.h	(revision 21991)
+++ src/preferences/fonts/FontView.h	(working copy)
@@ -25,6 +25,7 @@
 		void	UpdateFonts();
 		void	RelayoutIfNeeded();
 
+		bool	IsDefaultable();
 		bool	IsRevertable();
 
 	private:
Index: src/preferences/fonts/FontSelectionView.cpp
===================================================================
--- src/preferences/fonts/FontSelectionView.cpp	(revision 21991)
+++ src/preferences/fonts/FontSelectionView.cpp	(working copy)
@@ -392,6 +392,29 @@
 
 
 bool
+FontSelectionView::IsDefaultable()
+{
+	font_family default_family;
+	font_style default_style;
+	float default_size;
+
+	if (_get_system_default_font_(Name(), default_family, default_style, &default_size) != B_OK)
+		return false;
+
+	font_family current_family;
+	font_style current_style;
+	float current_size;
+
+	fCurrentFont.GetFamilyAndStyle(&current_family, &current_style);
+	current_size = fCurrentFont.Size();
+
+	return strcmp(current_family, default_family) != 0
+		|| strcmp(current_style, default_style) != 0
+		|| current_size != default_size;
+}
+
+
+bool
 FontSelectionView::IsRevertable()
 {
 	return fCurrentFont != fSavedFont;
Index: src/preferences/fonts/FontSelectionView.h
===================================================================
--- src/preferences/fonts/FontSelectionView.h	(revision 21991)
+++ src/preferences/fonts/FontSelectionView.h	(working copy)
@@ -34,6 +34,7 @@
 
 		void			SetDefaults();
 		void			Revert();
+		bool			IsDefaultable();
 		bool			IsRevertable();
 
 		void			UpdateFontsMenu();
Index: src/preferences/fonts/MainWindow.cpp
===================================================================
--- src/preferences/fonts/MainWindow.cpp	(revision 21991)
+++ src/preferences/fonts/MainWindow.cpp	(working copy)
@@ -35,15 +35,16 @@
 
 	rect.left = 10;
 	rect.top = rect.bottom - 10;
-	BButton *button = new BButton(rect, "defaults", "Defaults",
+	fDefaultsButton = new BButton(rect, "defaults", "Defaults",
 		new BMessage(kMsgSetDefaults), B_FOLLOW_LEFT | B_FOLLOW_BOTTOM, B_WILL_DRAW);
-	button->ResizeToPreferred();
-	float buttonHeight = button->Bounds().Height();
-	button->MoveBy(0, -buttonHeight);
-	view->AddChild(button);
+	fDefaultsButton->ResizeToPreferred();
+	fDefaultsButton->SetEnabled(false);
+	float buttonHeight = fDefaultsButton->Bounds().Height();
+	fDefaultsButton->MoveBy(0, -buttonHeight);
+	view->AddChild(fDefaultsButton);
 
-	rect = button->Frame();
-	rect.OffsetBy(button->Bounds().Width() + 10, 0);
+	rect = fDefaultsButton->Frame();
+	rect.OffsetBy(fDefaultsButton->Bounds().Width() + 10, 0);
 
 	fRevertButton = new BButton(rect, "revert", "Revert",
 		new BMessage(kMsgRevert), B_FOLLOW_LEFT | B_FOLLOW_BOTTOM, B_WILL_DRAW);
@@ -99,6 +100,8 @@
 
 	fRunner = new BMessageRunner(this, new BMessage(kMsgCheckFonts), 3000000);
 		// every 3 seconds
+
+	fDefaultsButton->SetEnabled(fFontsView->IsDefaultable());
 }
 
 
@@ -123,16 +126,19 @@
 {
 	switch (message->what) {
 		case kMsgUpdate:
+			fDefaultsButton->SetEnabled(fFontsView->IsDefaultable());
 			fRevertButton->SetEnabled(fFontsView->IsRevertable());
 			break;
 
 		case kMsgSetDefaults:
 			fFontsView->SetDefaults();
+			fDefaultsButton->SetEnabled(false);
 			fRevertButton->SetEnabled(fFontsView->IsRevertable());
 			break;
 
 		case kMsgRevert:
 			fFontsView->Revert();
+			fDefaultsButton->SetEnabled(fFontsView->IsDefaultable());
 			fRevertButton->SetEnabled(false);
 			break;
 
Index: src/preferences/keyboard/KeyboardSettings.cpp
===================================================================
--- src/preferences/keyboard/KeyboardSettings.cpp	(revision 21991)
+++ src/preferences/keyboard/KeyboardSettings.cpp	(working copy)
@@ -117,3 +117,11 @@
 	SetKeyboardRepeatDelay(kb_default_key_repeat_delay);
 	SetKeyboardRepeatRate(kb_default_key_repeat_rate);
 }
+
+
+bool
+KeyboardSettings::IsDefaultable()
+{
+	return fSettings.key_repeat_delay != kb_default_key_repeat_delay
+		|| fSettings.key_repeat_rate != kb_default_key_repeat_rate;
+}
Index: src/preferences/keyboard/KeyboardSettings.h
===================================================================
--- src/preferences/keyboard/KeyboardSettings.h	(revision 21991)
+++ src/preferences/keyboard/KeyboardSettings.h	(working copy)
@@ -21,6 +21,7 @@
 	void Dump();
 	void Revert();
 	void Defaults();
+	bool IsDefaultable();
 	
 	BPoint WindowCorner() const { return fCorner; }
 	void SetWindowCorner(BPoint corner);
Index: src/preferences/keyboard/KeyboardWindow.cpp
===================================================================
--- src/preferences/keyboard/KeyboardWindow.cpp	(revision 21991)
+++ src/preferences/keyboard/KeyboardWindow.cpp	(working copy)
@@ -39,6 +39,10 @@
 	if (slider !=NULL) 
 		slider->SetValue(fSettings.KeyboardRepeatDelay());
 	
+	BButton *button = (BButton *)FindView("keyboard_defaults");
+	if (button !=NULL)
+		button->SetEnabled(fSettings.IsDefaultable());
+
 #ifdef DEBUG
 	fSettings.Dump();	
 #endif
@@ -78,6 +82,10 @@
 				slider = (BSlider *)FindView("delay_until_key_repeat");
 				if (slider !=NULL) 
 					slider->SetValue(fSettings.KeyboardRepeatDelay());
+
+				button = (BButton *)FindView("keyboard_defaults");
+				if (button !=NULL)
+					button->SetEnabled(false);
 				
 				button = (BButton *)FindView("keyboard_revert");
 		  		if (button !=NULL) 
@@ -95,6 +103,10 @@
 				if (slider !=NULL) 
 					slider->SetValue(fSettings.KeyboardRepeatDelay());	    		
 				
+				button = (BButton *)FindView("keyboard_defaults");
+				if (button !=NULL)
+					button->SetEnabled(fSettings.IsDefaultable());
+
 				button = (BButton *)FindView("keyboard_revert");
 		  		if (button !=NULL) 
 		  			button->SetEnabled(false);
@@ -106,6 +118,10 @@
 					break;
 				fSettings.SetKeyboardRepeatRate(rate);
 				
+				button = (BButton *)FindView("keyboard_defaults");
+				if (button !=NULL)
+					button->SetEnabled(fSettings.IsDefaultable());
+
 				button = (BButton *)FindView("keyboard_revert");
 		  		if (button !=NULL) 
 	  				button->SetEnabled(true);
@@ -133,6 +149,10 @@
 				if (slider !=NULL) 
 					slider->SetValue(delay);
 
+				button = (BButton *)FindView("keyboard_defaults");
+				if (button !=NULL)
+					button->SetEnabled(fSettings.IsDefaultable());
+
 				button = (BButton *)FindView("keyboard_revert");
 	  			if (button !=NULL) 
 	  				button->SetEnabled(true);
Index: src/preferences/sounds/HWindow.cpp
===================================================================
--- src/preferences/sounds/HWindow.cpp	(revision 21991)
+++ src/preferences/sounds/HWindow.cpp	(working copy)
@@ -139,6 +139,7 @@
 						,new BMessage(M_STOP_MESSAGE)
 						,B_FOLLOW_RIGHT | B_FOLLOW_TOP);
 	button->ResizeToPreferred();
+	button->SetEnabled(false);
 	button->MoveTo(box->Bounds().right - button->Bounds().Width() - 15, rect.top);
 	box->AddChild(button);
 	
@@ -153,6 +154,7 @@
 								,new BMessage(M_PLAY_MESSAGE)
 								,B_FOLLOW_RIGHT | B_FOLLOW_TOP);
 	button->ResizeToPreferred();
+	button->SetEnabled(false);
 	button->MoveTo(rect.left - button->Bounds().Width() - 15, rect.top);
 	box->AddChild(button);
 	
@@ -408,9 +410,13 @@
 	
 	if(!menufield)
 		return;
+
 	if(sel >=0) {
-		menufield->SetEnabled(true);
-		button->SetEnabled(true);
+		HEventItem *item = cast_as(fEventList->ItemAt(sel),HEventItem);
+		const char* path = item->Path();
+
+		menufield->SetEnabled(path != NULL);
+		button->SetEnabled(path != NULL);
 	} else {
 		menufield->SetEnabled(false);
 		button->SetEnabled(false);
