Index: src/preferences/appearance/ColorSet.h
===================================================================
--- src/preferences/appearance/ColorSet.h	(revision 22007)
+++ src/preferences/appearance/ColorSet.h	(working copy)
@@ -32,6 +32,7 @@
 		bool		ConvertFromMessage(const BMessage *msg);
 
 		void		SetToDefaults(void);
+		bool		IsDefaultable(void);
 
 		rgb_color 	StringToColor(const char *string);
 		rgb_color	AttributeToColor(int32 which);
Index: src/preferences/appearance/APRView.cpp
===================================================================
--- src/preferences/appearance/APRView.cpp	(revision 22007)
+++ src/preferences/appearance/APRView.cpp	(working copy)
@@ -146,7 +146,8 @@
 	fDefaults = new BButton(BRect(0,0,1,1),"DefaultsButton","Defaults",
 							new BMessage(DEFAULT_SETTINGS),
 							B_FOLLOW_LEFT |B_FOLLOW_TOP, B_WILL_DRAW | B_NAVIGABLE);
-	fDefaults->ResizeToPreferred(); 
+	fDefaults->ResizeToPreferred();
+	fDefaults->SetEnabled(false);
 	fDefaults->MoveTo((fPicker->Frame().right-(fDefaults->Frame().Width()*2)-20)/2,fPicker->Frame().bottom+20);
 	AddChild(fDefaults);
 	
@@ -157,13 +158,14 @@
 	fRevert = new BButton(cvrect,"RevertButton","Revert", 
 						new BMessage(REVERT_SETTINGS),
 						B_FOLLOW_LEFT |B_FOLLOW_TOP, B_WILL_DRAW | B_NAVIGABLE);
+	fRevert->SetEnabled(false);
 	AddChild(fRevert);
-	fRevert->SetEnabled(false);
 	
 }
 
 APRView::~APRView(void)
 {
+	//BPrivate::set_system_colors(&fCurrentSet);
 	ColorSet::SaveColorSet("/boot/home/config/settings/app_server/system_colors",fCurrentSet);
 }
 
@@ -185,6 +187,8 @@
 					   fDefaults->Frame().bottom + 10);
 	LoadSettings();
 	fAttrList->Select(0);
+	
+	fDefaults->SetEnabled(fCurrentSet.IsDefaultable());
 }
 
 void
@@ -221,6 +225,7 @@
 			// Update current fAttribute in the settings
 			fCurrentSet.SetColor(fAttrString.String(),col);
 			
+			fDefaults->SetEnabled(fCurrentSet.IsDefaultable());
 			fRevert->SetEnabled(true);
 			
 			break;
@@ -236,6 +241,8 @@
 			
 			fAttrString=whichitem->Text();
 			UpdateControlsFromAttr(whichitem->Text());
+
+			fDefaults->SetEnabled(fCurrentSet.IsDefaultable());
 			break;
 		}
 		case REVERT_SETTINGS: {
@@ -248,6 +255,7 @@
 		}
 		case DEFAULT_SETTINGS: {
 			fCurrentSet.SetToDefaults();
+			fDefaults->SetEnabled(false);
 			
 			UpdateControlsFromAttr(fAttrString.String());
 			BMenuItem *item = fDecorMenu->FindItem("Default");
@@ -272,7 +280,7 @@
 	// getting them from the server at this point for testing purposes.
 	
 	// Query the server for the current settings
-	//BPrivate::get_system_colors(&fCurrentSet);
+	// BPrivate::get_system_colors(&fCurrentSet);
 	
 	// TODO: remove this and enable the get_system_colors() call
 	if (ColorSet::LoadColorSet("/boot/home/config/settings/app_server/system_colors",&fCurrentSet) != B_OK) {
Index: src/preferences/appearance/ColorSet.cpp
===================================================================
--- src/preferences/appearance/ColorSet.cpp	(revision 22007)
+++ src/preferences/appearance/ColorSet.cpp	(working copy)
@@ -25,7 +25,15 @@
 	color.alpha = 255;
 }
 
+static bool
+match_rgb_color(rgb_color& color, uint8 red, uint8 green, uint8 blue)
+{
+	return color.red == red
+		&& color.green == green
+		&& color.blue == blue;
+}
 
+
 //	#pragma mark -
 
 
@@ -173,6 +181,39 @@
 }
 
 /*!
+	\brief Checks if the ColorSet can be set to defaults.
+*/
+bool
+ColorSet::IsDefaultable()
+{
+	return !match_rgb_color(panel_background, 216, 216, 216)
+		|| !match_rgb_color(panel_text, 0, 0, 0)
+		|| !match_rgb_color(document_background, 255, 255, 255)
+		|| !match_rgb_color(document_text, 0, 0, 0)
+		|| !match_rgb_color(control_background, 245, 245, 245)
+		|| !match_rgb_color(control_text, 0, 0, 0)
+		|| !match_rgb_color(control_border, 0, 0, 0)
+		|| !match_rgb_color(control_highlight, 102, 152, 203)
+		|| !match_rgb_color(keyboard_navigation_base, 0, 0, 229)
+		|| !match_rgb_color(keyboard_navigation_pulse, 0, 0, 0)
+		|| !match_rgb_color(shine, 255, 255, 255)
+		|| !match_rgb_color(shadow, 0, 0, 0)
+		|| !match_rgb_color(menu_background, 216, 216, 216)
+		|| !match_rgb_color(menu_selected_background, 115, 120, 184)
+		|| !match_rgb_color(menu_text, 0, 0, 0)
+		|| !match_rgb_color(menu_selected_text, 255, 255, 255)
+		|| !match_rgb_color(menu_selected_border, 0, 0, 0)
+		|| !match_rgb_color(tooltip_background, 255, 255, 0)
+		|| !match_rgb_color(tooltip_text, 0, 0, 0)
+		|| !match_rgb_color(success, 0, 255, 0)
+		|| !match_rgb_color(failure, 255, 0, 0)
+		|| !match_rgb_color(window_tab, 255, 203, 0)
+		|| !match_rgb_color(window_tab_text, 0, 0, 0)
+		|| !match_rgb_color(inactive_window_tab, 232, 232, 232)
+		|| !match_rgb_color(inactive_window_tab_text, 80, 80, 80);
+}
+
+/*!
 	\brief Attaches the color set's members as data to the given BMessage
 	\param msg The message to receive the attributes
 */
Index: src/preferences/menu/MenuWindow.h
===================================================================
--- src/preferences/menu/MenuWindow.h	(revision 22007)
+++ src/preferences/menu/MenuWindow.h	(working copy)
@@ -25,14 +25,11 @@
 		virtual void MessageReceived(BMessage *message);
 		virtual bool QuitRequested();
 
-		void Update();
-		void Defaults();
-
 	private:	
-		bool		fRevert;
-		ColorWindow* fColorWindow;
-		MenuBar*	fMenuBar;
-		BButton*	fRevertButton;
+		ColorWindow*	fColorWindow;
+		MenuBar*		fMenuBar;
+		BButton*		fDefaultsButton;
+		BButton*		fRevertButton;
 };
 
 #endif	// MENU_WINDOW_H
Index: src/preferences/menu/MenuSettings.cpp
===================================================================
--- src/preferences/menu/MenuSettings.cpp	(revision 22007)
+++ src/preferences/menu/MenuSettings.cpp	(working copy)
@@ -74,3 +74,17 @@
 	set_menu_info(&fDefaultSettings);
 }
 
+
+bool
+MenuSettings::IsDefaultable()
+{
+	menu_info info;
+	get_menu_info(&info);
+
+	return info.font_size !=  fDefaultSettings.font_size
+		|| 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;
+}
+
Index: src/preferences/menu/MenuSettings.h
===================================================================
--- src/preferences/menu/MenuSettings.h	(revision 22007)
+++ src/preferences/menu/MenuSettings.h	(working copy)
@@ -21,6 +21,7 @@
 
 		void Revert();
 		void ResetToDefaults();
+		bool IsDefaultable();
 
 	private:
 		MenuSettings();
Index: src/preferences/menu/MenuWindow.cpp
===================================================================
--- src/preferences/menu/MenuWindow.cpp	(revision 22007)
+++ src/preferences/menu/MenuWindow.cpp	(working copy)
@@ -31,7 +31,6 @@
 		B_NOT_ZOOMABLE | B_NOT_RESIZABLE | B_ASYNCHRONOUS_CONTROLS | B_QUIT_ON_WINDOW_CLOSE)
 {
 	fColorWindow = NULL;
-	fRevert = false;
 
 	BView* topView = new BView(Bounds(), "menuView", B_FOLLOW_ALL_SIDES,
 		B_WILL_DRAW);
@@ -48,10 +47,11 @@
 	BRect buttonFrame(menuBarFrame.left, menuBarFrame.bottom + 10, 
 		menuBarFrame.left + 75, menuBarFrame.bottom + 30);
 
-	BButton* defaultButton = new BButton(buttonFrame, "Default", "Defaults",
+	fDefaultsButton = new BButton(buttonFrame, "Default", "Defaults",
 		new BMessage(MENU_DEFAULT), B_FOLLOW_H_CENTER | B_FOLLOW_BOTTOM,
 		B_WILL_DRAW | B_NAVIGABLE);
-	topView->AddChild(defaultButton);
+	fDefaultsButton->SetEnabled(false);
+	topView->AddChild(fDefaultsButton);
 
 	buttonFrame.OffsetBy(buttonFrame.Width() + 20, 0);
 	fRevertButton = new BButton(buttonFrame, "Revert", "Revert", new BMessage(MENU_REVERT),
@@ -60,8 +60,7 @@
 	topView->AddChild(fRevertButton);
 
 	topView->MakeFocus();
-
-	Update();	
+	fMenuBar->Update();
 }
 
 
@@ -73,25 +72,27 @@
 
 	switch (msg->what) {
 		case MENU_REVERT:
-			fRevert = false;
 			settings->Revert();
-			Update();
+
+			fRevertButton->SetEnabled(false);
+			fDefaultsButton->SetEnabled(settings->IsDefaultable());
+			fMenuBar->Update();
 			break;
 
 		case MENU_DEFAULT:
-			fRevert = true;
 			settings->ResetToDefaults();
-			Update();
+
+			fDefaultsButton->SetEnabled(false);
+			fMenuBar->Update();
 			break;
 
 		case UPDATE_WINDOW:
-			Update();
+			fMenuBar->Update();
 			break;
 
 		case MENU_FONT_FAMILY:
 		case MENU_FONT_STYLE:
 		{
-			fRevert = true;
 			const font_family *family;
 			msg->FindString("family", (const char **)&family);
 			const font_style *style;
@@ -101,40 +102,49 @@
 			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);
-			Update();
+
+			fRevertButton->SetEnabled(true);
+			fDefaultsButton->SetEnabled(settings->IsDefaultable());
+			fMenuBar->Update();
 			break;
 		}
 
 		case MENU_FONT_SIZE:
-			fRevert = true;
 			settings->Get(info);
 			msg->FindFloat("size", &info.font_size);
 			settings->Set(info);
-			Update();
+
+			fRevertButton->SetEnabled(true);
+			fDefaultsButton->SetEnabled(settings->IsDefaultable());
+			fMenuBar->Update();
 			break;
 
 		case ALLWAYS_TRIGGERS_MSG:
-			fRevert = true;
 			settings->Get(info);
 			info.triggers_always_shown = !info.triggers_always_shown;
 			settings->Set(info);
+
+			fRevertButton->SetEnabled(true);
+			fDefaultsButton->SetEnabled(settings->IsDefaultable());
 			fMenuBar->UpdateMenu();
-			Update();
+			fMenuBar->Update();
 			break;
 
 		case CTL_MARKED_MSG:
-			fRevert = true;
 			// 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));
-			Update();
+
+			fRevertButton->SetEnabled(true);
+			fDefaultsButton->SetEnabled(settings->IsDefaultable());
+			fMenuBar->Update();
 			break;
 
 		case ALT_MARKED_MSG:
-			fRevert = true;
+
 			// 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);
@@ -142,7 +152,10 @@
 			set_modifier_key(B_RIGHT_OPTION_KEY, 0x60);
 
 			be_roster->Broadcast(new BMessage(B_MODIFIERS_CHANGED));
-			Update();
+
+			fRevertButton->SetEnabled(true);
+			fDefaultsButton->SetEnabled(settings->IsDefaultable());
+			fMenuBar->Update();
 			break;
 
 		case COLOR_SCHEME_OPEN_MSG:
@@ -158,8 +171,9 @@
 			break;
 
 		case MENU_COLOR:
-			fRevert = true;
-			Update();
+			fRevertButton->SetEnabled(true);
+			fDefaultsButton->SetEnabled(settings->IsDefaultable());
+			fMenuBar->Update();
 			break;
 
 		default:
@@ -180,13 +194,3 @@
 	return true;
 }
 
-
-void
-MenuWindow::Update()
-{
-	fRevertButton->SetEnabled(fRevert);
-
-	// alert the rest of the application to update	
-	fMenuBar->Update();
-}
-
Index: src/kits/tracker/SettingsViews.cpp
===================================================================
--- src/kits/tracker/SettingsViews.cpp	(revision 22007)
+++ src/kits/tracker/SettingsViews.cpp	(working copy)
@@ -93,6 +93,19 @@
 
 
 /*!
+	This function is used by the window to tell whether
+	it can ghost the defaults button or not. It doesn't
+	shows the default settings, this function should
+	return true.
+*/
+bool
+SettingsView::IsDefaultable() const
+{
+	return true;
+}
+
+
+/*!
 	The inherited functions should set the values that was
 	active when the settings window opened. It should also
 	update the UI widgets accordingly, preferrable by calling
@@ -317,6 +330,19 @@
 }
 
 
+bool
+DesktopSettingsView::IsDefaultable() const
+{
+	TrackerSettings settings;
+
+	return settings.ShowDisksIcon() != false
+		|| settings.MountVolumesOntoDesktop() != true
+		|| settings.MountSharedVolumesOntoDesktop() != true
+		|| settings.IntegrateNonBootBeOSDesktops() != false
+		|| settings.EjectWhenUnmounting() != true;
+}
+
+
 void
 DesktopSettingsView::Revert()
 {
@@ -570,6 +596,19 @@
 }
 
 
+bool
+WindowsSettingsView::IsDefaultable() const
+{
+	TrackerSettings settings;
+
+	return settings.ShowFullPathInTitleBar() != false
+		|| settings.SingleWindowBrowse() != false
+		|| settings.ShowNavigator() != false
+		|| settings.TransparentSelection() != true
+		|| settings.SortFolderNamesFirst() != true;
+}
+
+
 void
 WindowsSettingsView::Revert()
 {
@@ -843,6 +882,17 @@
 }
 
 
+bool
+TimeFormatSettingsView::IsDefaultable() const
+{
+	TrackerSettings settings;
+
+	return settings.TimeFormatSeparator() != kSlashSeparator
+		|| settings.DateOrderFormat() != kMDYFormat
+		|| settings.ClockIs24Hr() != false;
+}
+
+
 void
 TimeFormatSettingsView::Revert()
 {
@@ -1146,6 +1196,18 @@
 }
 
 
+bool
+SpaceBarSettingsView::IsDefaultable() const
+{
+	TrackerSettings settings;
+
+	return settings.ShowVolumeSpaceBar() != false
+		|| settings.UsedSpaceColor() != Color(0, 203, 0, 192)
+		|| settings.FreeSpaceColor() != Color(255, 255, 255, 192)
+		|| settings.WarningSpaceColor() != Color(203, 0, 0, 192);
+}
+
+
 void
 SpaceBarSettingsView::Revert()
 {
@@ -1307,6 +1369,16 @@
 }
 
 
+bool
+TrashSettingsView::IsDefaultable() const
+{
+	TrackerSettings settings;
+
+	return settings.DontMoveFilesToTrash() != false
+		|| settings.AskBeforeDeleteFile() != true;
+}
+
+
 void
 TrashSettingsView::Revert()
 {
Index: src/kits/tracker/TrackerSettingsWindow.cpp
===================================================================
--- src/kits/tracker/TrackerSettingsWindow.cpp	(revision 22007)
+++ src/kits/tracker/TrackerSettingsWindow.cpp	(working copy)
@@ -88,6 +88,7 @@
 	fDefaultsButton = new BButton(rect, "Defaults", "Defaults",
 		new BMessage(kDefaultsButtonPressed), B_FOLLOW_LEFT | B_FOLLOW_BOTTOM);
 	fDefaultsButton->ResizeToPreferred();
+	fDefaultsButton->SetEnabled(false);
 	fDefaultsButton->MoveBy(0, -fDefaultsButton->Bounds().Height());
 	topView->AddChild(fDefaultsButton);
 
@@ -240,13 +241,16 @@
 {
 	int32 itemCount = fSettingsTypeListView->CountItems();
 
+	bool defaultable = false;
 	bool revertable = false;
 
 	for (int32 i = 0; i < itemCount; i++) {
+		defaultable |= _ViewAt(i)->IsDefaultable();
 		revertable |= _ViewAt(i)->IsRevertable();
 	}
 
-	fSettingsTypeListView->Invalidate();	
+	fSettingsTypeListView->Invalidate();
+	fDefaultsButton->SetEnabled(defaultable);
 	fRevertButton->SetEnabled(revertable);
 
 	TrackerSettings().SaveSettings(false);
@@ -258,8 +262,10 @@
 {
 	int32 itemCount = fSettingsTypeListView->CountItems();
 	
-	for (int32 i = 0; i < itemCount; i++)
-		_ViewAt(i)->SetDefaults();
+	for (int32 i = 0; i < itemCount; i++) {
+		if (_ViewAt(i)->IsDefaultable())
+			_ViewAt(i)->SetDefaults();
+	}
 
 	_HandleChangedContents();
 }
Index: src/kits/tracker/SettingsViews.h
===================================================================
--- src/kits/tracker/SettingsViews.h	(revision 22007)
+++ src/kits/tracker/SettingsViews.h	(working copy)
@@ -57,6 +57,7 @@
 		virtual ~SettingsView();
 
 		virtual void SetDefaults();
+		virtual bool IsDefaultable() const;
 		virtual void Revert();
 		virtual void ShowCurrentSettings();
 		virtual void RecordRevertSettings();
@@ -75,6 +76,7 @@
 		virtual void GetPreferredSize(float *_width, float *_height);
 
 		virtual void SetDefaults();
+		virtual bool IsDefaultable() const;
 		virtual void Revert();
 		virtual void ShowCurrentSettings();
 		virtual void RecordRevertSettings();
@@ -108,6 +110,7 @@
 		virtual void GetPreferredSize(float *_width, float *_height);
 
 		virtual void SetDefaults();
+		virtual bool IsDefaultable() const;
 		virtual void Revert();
 		virtual void ShowCurrentSettings();
 		virtual void RecordRevertSettings();
@@ -139,6 +142,7 @@
 		virtual void GetPreferredSize(float *_width, float *_height);
 
 		virtual void SetDefaults();
+		virtual bool IsDefaultable() const;
 		virtual void Revert();
 		virtual void ShowCurrentSettings();
 		virtual void RecordRevertSettings();
@@ -178,6 +182,7 @@
 		virtual void GetPreferredSize(float *_width, float *_height);
 
 		virtual void SetDefaults();
+		virtual bool IsDefaultable() const;
 		virtual void Revert();
 		virtual void ShowCurrentSettings();
 		virtual void RecordRevertSettings();
@@ -206,6 +211,7 @@
 		virtual void GetPreferredSize(float *_width, float *_height);
 
 		virtual void SetDefaults();
+		virtual bool IsDefaultable() const;
 		virtual void Revert();
 		virtual void ShowCurrentSettings();
 		virtual void RecordRevertSettings();
