diff --git a/libretroshare/src/services/p3gxsreputation.cc b/libretroshare/src/services/p3gxsreputation.cc
index aa64bec14..bf3dabfcb 100644
--- a/libretroshare/src/services/p3gxsreputation.cc
+++ b/libretroshare/src/services/p3gxsreputation.cc
@@ -1063,9 +1063,8 @@ bool p3GxsReputation::saveList(bool& cleanup, std::list &savelist)
 	cleanup = true;
 	RsStackMutex stack(mReputationMtx); /****** LOCKED MUTEX *******/
 
-#ifdef DEBUG_REPUTATION
     std::cerr << "p3GxsReputation::saveList()" << std::endl;
-#endif
+
 	/* save */
 	std::map::iterator it;
 	for(it = mConfig.begin(); it != mConfig.end(); ++it)
diff --git a/retroshare-gui/src/gui/settings/AboutPage.h b/retroshare-gui/src/gui/settings/AboutPage.h
index e374a0c23..3f41750e0 100644
--- a/retroshare-gui/src/gui/settings/AboutPage.h
+++ b/retroshare-gui/src/gui/settings/AboutPage.h
@@ -36,8 +36,6 @@ public:
 	/** Default Destructor */
 	~AboutPage();
 
-	/** Saves the changes on this page */
-    virtual bool save(QString &errmsg) { return true;}
 	/** Loads the settings for this page */
 	virtual void load();
 
diff --git a/retroshare-gui/src/gui/settings/AppearancePage.cpp b/retroshare-gui/src/gui/settings/AppearancePage.cpp
index 7bc85a103..92747816b 100755
--- a/retroshare-gui/src/gui/settings/AppearancePage.cpp
+++ b/retroshare-gui/src/gui/settings/AppearancePage.cpp
@@ -31,6 +31,7 @@
 #include "AppearancePage.h"
 #include "rsharesettings.h"
 #include "gui/MainWindow.h"
+#include "gui/notifyqt.h"
 #include "gui/statusbar/peerstatus.h"
 #include "gui/statusbar/natstatus.h"
 #include "gui/statusbar/dhtstatus.h"
@@ -83,44 +84,66 @@ AppearancePage::AppearancePage(QWidget * parent, Qt::WindowFlags flags)
 	foreach (QString name, styleSheets.keys()) {
 		ui.cmboStyleSheet->addItem(name, styleSheets[name]);
 	}
+
+	connect(ui.cmboTollButtonsSize,           SIGNAL(currentIndexChanged(int)), this, SLOT(updateCmboToolButtonSize() ));
+	connect(ui.cmboListItemSize,              SIGNAL(currentIndexChanged(int)), this, SLOT(updateCmboListItemSize()   ));
+	connect(ui.cmboTollButtonsStyle,          SIGNAL(currentIndexChanged(int)), this, SLOT(updateCmboToolButtonStyle()));
+	connect(ui.cmboLanguage,                  SIGNAL(currentIndexChanged(int)), this, SLOT(updateLanguageCode()       ));
+	connect(ui.cmboStyle,                     SIGNAL(currentIndexChanged(int)), this, SLOT(updateInterfaceStyle()     ));
+	connect(ui.cmboStyleSheet,                SIGNAL(currentIndexChanged(int)), this, SLOT(updateSheetName()          ));
+	connect(ui.checkBoxDisableSysTrayToolTip, SIGNAL(toggled(bool)),           this, SLOT(updateStatusToolTip()    ));
+
+	connect(ui.mainPageButtonType_CB,  SIGNAL(currentIndexChanged(int)),           this, SLOT(updateRbtPageOnToolBar()    ));
+	connect(ui.menuItemsButtonType_CB, SIGNAL(currentIndexChanged(int)),           this, SLOT(updateActionButtonLoc()    ));
 }
 
-void AppearancePage::switch_status_grpStatus(bool b)        { switch_status(MainWindow::StatusGrpStatus  ,b) ; }
-void AppearancePage::switch_status_compactMode(bool b)      { switch_status(MainWindow::StatusCompactMode,b) ; }
-void AppearancePage::switch_status_showToolTip(bool b)      { switch_status(MainWindow::StatusShowToolTip,b) ; }
-void AppearancePage::switch_status_ShowStatus(bool b)       { switch_status(MainWindow::StatusShowStatus ,b) ; }
-void AppearancePage::switch_status_ShowPeer(bool b)         { switch_status(MainWindow::StatusShowPeer   ,b) ; }
-void AppearancePage::switch_status_ShowDHT(bool b)          { switch_status(MainWindow::StatusShowDHT    ,b) ; }
-void AppearancePage::switch_status_ShowHashing(bool b)      { switch_status(MainWindow::StatusShowHashing,b) ; }
-void AppearancePage::switch_status_ShowDisc(bool b)         { switch_status(MainWindow::StatusShowDisc   ,b) ; }
-void AppearancePage::switch_status_ShowRate(bool b)         { switch_status(MainWindow::StatusShowRate   ,b) ; }
-void AppearancePage::switch_status_ShowOpMode(bool b)       { switch_status(MainWindow::StatusShowOpMode ,b) ; }
-void AppearancePage::switch_status_ShowSound(bool b)        { switch_status(MainWindow::StatusShowSound  ,b) ; }
-void AppearancePage::switch_status_ShowToaster(bool b)      { switch_status(MainWindow::StatusShowToaster,b) ; }
-void AppearancePage::switch_status_ShowSystray(bool b)      { switch_status(MainWindow::StatusShowSystray,b) ; }
+void AppearancePage::switch_status_grpStatus(bool b)        { switch_status(MainWindow::StatusGrpStatus  ,"ShowStatusBar",         b) ; }
+void AppearancePage::switch_status_compactMode(bool b)      { switch_status(MainWindow::StatusCompactMode,"CompactMode",           b) ; }
+void AppearancePage::switch_status_showToolTip(bool b)      { switch_status(MainWindow::StatusShowToolTip,"DisableSysTrayToolTip", b) ; }
+void AppearancePage::switch_status_ShowStatus(bool b)       { switch_status(MainWindow::StatusShowStatus ,"ShowStatus",            b) ; }
+void AppearancePage::switch_status_ShowPeer(bool b)         { switch_status(MainWindow::StatusShowPeer   ,"ShowPeer",              b) ; }
+void AppearancePage::switch_status_ShowDHT(bool b)          { switch_status(MainWindow::StatusShowDHT    ,"ShowDHT",               b) ; }
+void AppearancePage::switch_status_ShowHashing(bool b)      { switch_status(MainWindow::StatusShowHashing,"ShowHashing",           b) ; }
+void AppearancePage::switch_status_ShowDisc(bool b)         { switch_status(MainWindow::StatusShowDisc   ,"ShowDisc",              b) ; }
+void AppearancePage::switch_status_ShowRate(bool b)         { switch_status(MainWindow::StatusShowRate   ,"ShowRate",              b) ; }
+void AppearancePage::switch_status_ShowOpMode(bool b)       { switch_status(MainWindow::StatusShowOpMode ,"ShowOpMode",            b) ; }
+void AppearancePage::switch_status_ShowSound(bool b)        { switch_status(MainWindow::StatusShowSound  ,"ShowSound",             b) ; }
+void AppearancePage::switch_status_ShowToaster(bool b)      { switch_status(MainWindow::StatusShowToaster,"ShowToaster",           b) ; }
+void AppearancePage::switch_status_ShowSystray(bool b)      { switch_status(MainWindow::StatusShowSystray,"ShowSysTrayOnStatusBar",b) ; }
 
-void AppearancePage::switch_status(MainWindow::StatusElement s,bool b)
+void AppearancePage::switch_status(MainWindow::StatusElement s,const QString& key, bool b)
 {
 	MainWindow *pMainWindow = MainWindow::getInstance();
 
     if(!pMainWindow)
         return ;
 
+	Settings->setValueToGroup("StatusBar", key, QVariant(b));
+
     pMainWindow->switchVisibilityStatus(s,b) ;
 }
 
-/** Saves the changes on this page */
-bool AppearancePage::save(QString &errmsg)
+void AppearancePage::updateLanguageCode()     { Settings->setLanguageCode(LanguageSupport::languageCode(ui.cmboLanguage->currentText())); }
+void AppearancePage::updateInterfaceStyle()
 {
-	Q_UNUSED(errmsg);
+    Rshare::setStyle(ui.cmboStyle->currentText());
+    Settings->setInterfaceStyle(ui.cmboStyle->currentText());
+}
+void AppearancePage::updateSheetName()        { Settings->setSheetName(ui.cmboStyleSheet->itemData(ui.cmboStyleSheet->currentIndex()).toString()); }
+void AppearancePage::updateRbtPageOnToolBar()
+{
+    Settings->setPageButtonLoc(!ui.mainPageButtonType_CB->currentIndex());
+    NotifyQt::getInstance()->notifySettingsChanged();
+}
+void AppearancePage::updateActionButtonLoc()
+{
+    Settings->setActionButtonLoc(!ui.menuItemsButtonType_CB->currentIndex());
+    NotifyQt::getInstance()->notifySettingsChanged();
+}
+void AppearancePage::updateStatusToolTip()    { MainWindow::getInstance()->toggleStatusToolTip(ui.checkBoxDisableSysTrayToolTip->isChecked()); }
 
-	QString languageCode = LanguageSupport::languageCode(ui.cmboLanguage->currentText());
-
-	Settings->setLanguageCode(languageCode);
-	Settings->setInterfaceStyle(ui.cmboStyle->currentText());
-	Settings->setSheetName(ui.cmboStyleSheet->itemData(ui.cmboStyleSheet->currentIndex()).toString());
-	Settings->setPageButtonLoc(ui.rbtPageOnToolBar->isChecked());
-	Settings->setActionButtonLoc(ui.rbtActionOnToolBar->isChecked());
+void AppearancePage::updateCmboToolButtonStyle()
+{
 	switch (ui.cmboTollButtonsStyle->currentIndex())
 	{
 		case 0:
@@ -136,6 +159,11 @@ bool AppearancePage::save(QString &errmsg)
 		default:
 			Settings->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
 	}
+    NotifyQt::getInstance()->notifySettingsChanged();
+}
+
+void AppearancePage::updateCmboToolButtonSize()
+{
 	switch (ui.cmboTollButtonsSize->currentIndex())
 	{
 		case 0:
@@ -157,6 +185,10 @@ bool AppearancePage::save(QString &errmsg)
         case 5:
             Settings->setToolButtonSize(128);
     }
+    NotifyQt::getInstance()->notifySettingsChanged();
+}
+void AppearancePage::updateCmboListItemSize()
+{
 	switch (ui.cmboListItemSize->currentIndex())
 	{
 		case 0:
@@ -178,29 +210,11 @@ bool AppearancePage::save(QString &errmsg)
         case 5:
             Settings->setListItemIconSize(128);
     }
-
-	/* Set to new style */
-	Rshare::setStyle(ui.cmboStyle->currentText());
-
-	Settings->setValueToGroup("StatusBar", "ShowStatusBar", QVariant(ui.grpStatus->isChecked()));
-	Settings->setValueToGroup("StatusBar", "CompactMode", QVariant(ui.checkBoxStatusCompactMode->isChecked()));
-	Settings->setValueToGroup("StatusBar", "DisableSysTrayToolTip", QVariant(ui.checkBoxDisableSysTrayToolTip->isChecked()));
-	MainWindow::getInstance()->toggleStatusToolTip(ui.checkBoxDisableSysTrayToolTip->isChecked());
-	Settings->setValueToGroup("StatusBar", "ShowStatus", QVariant(ui.checkBoxShowStatusStatus->isChecked()));
-	Settings->setValueToGroup("StatusBar", "ShowPeer", QVariant(ui.checkBoxShowPeerStatus->isChecked()));
-	Settings->setValueToGroup("StatusBar", "ShowNAT", QVariant(ui.checkBoxShowNATStatus->isChecked()));
-	Settings->setValueToGroup("StatusBar", "ShowDHT", QVariant(ui.checkBoxShowDHTStatus->isChecked()));
-	Settings->setValueToGroup("StatusBar", "ShowHashing", QVariant(ui.checkBoxShowHashingStatus->isChecked()));
-	Settings->setValueToGroup("StatusBar", "ShowDisc", QVariant(ui.checkBoxShowDiscStatus->isChecked()));
-	Settings->setValueToGroup("StatusBar", "ShowRate", QVariant(ui.checkBoxShowRateStatus->isChecked()));
-	Settings->setValueToGroup("StatusBar", "ShowOpMode", QVariant(ui.checkBoxShowOpModeStatus->isChecked()));
-	Settings->setValueToGroup("StatusBar", "ShowSound", QVariant(ui.checkBoxShowSoundStatus->isChecked()));
-	Settings->setValueToGroup("StatusBar", "ShowToaster", QVariant(ui.checkBoxShowToasterDisable->isChecked()));
-	Settings->setValueToGroup("StatusBar", "ShowSysTrayOnStatusBar", QVariant(ui.checkBoxShowSystrayOnStatus->isChecked()));
-
-	return true;
+    NotifyQt::getInstance()->notifySettingsChanged();
 }
 
+void AppearancePage::updateStyle() { Rshare::setStyle(ui.cmboStyle->currentText()); }
+
 /** Loads the settings for this page */
 void AppearancePage::load()
 {
@@ -217,10 +231,9 @@ void AppearancePage::load()
 	}
 	ui.cmboStyleSheet->setCurrentIndex(index);
 
-	ui.rbtPageOnToolBar->setChecked(Settings->getPageButtonLoc());
-	ui.rbtPageOnListItem->setChecked(!Settings->getPageButtonLoc());
-	ui.rbtActionOnToolBar->setChecked(Settings->getActionButtonLoc());
-	ui.rbtActionOnListItem->setChecked(!Settings->getActionButtonLoc());
+	ui.mainPageButtonType_CB->setCurrentIndex(!Settings->getPageButtonLoc());
+	ui.menuItemsButtonType_CB->setCurrentIndex(!Settings->getActionButtonLoc());
+
 	switch (Settings->getToolButtonStyle())
 	{
 		case Qt::ToolButtonIconOnly:
diff --git a/retroshare-gui/src/gui/settings/AppearancePage.h b/retroshare-gui/src/gui/settings/AppearancePage.h
index 2ae6ce212..a80b97d1a 100755
--- a/retroshare-gui/src/gui/settings/AppearancePage.h
+++ b/retroshare-gui/src/gui/settings/AppearancePage.h
@@ -34,8 +34,6 @@ public:
 	/** Default Constructor */
 	AppearancePage(QWidget * parent = 0, Qt::WindowFlags flags = 0);
 
-	/** Saves the changes on this page */
-	virtual bool save(QString &errmsg);
 	/** Loads the settings for this page */
 	virtual void load();
 
@@ -60,8 +58,20 @@ private slots:
     void switch_status_ShowToaster(bool) ;
     void switch_status_ShowSystray(bool) ;
 
+    void updateLanguageCode()    ;
+    void updateInterfaceStyle()  ;
+    void updateSheetName()       ;
+    void updateRbtPageOnToolBar();
+    void updateActionButtonLoc() ;
+    void updateStatusToolTip()   ;
+
+	void updateCmboToolButtonStyle();
+	void updateCmboToolButtonSize();
+	void updateCmboListItemSize();
+
+	void updateStyle() ;
 private:
-	void switch_status(MainWindow::StatusElement s,bool b);
+	void switch_status(MainWindow::StatusElement s,const QString& key,bool b);
 
 	/** Qt Designer generated object */
 	Ui::AppearancePage ui;
diff --git a/retroshare-gui/src/gui/settings/AppearancePage.ui b/retroshare-gui/src/gui/settings/AppearancePage.ui
index dface3903..f05634f8f 100755
--- a/retroshare-gui/src/gui/settings/AppearancePage.ui
+++ b/retroshare-gui/src/gui/settings/AppearancePage.ui
@@ -7,7 +7,7 @@
     0
     0
     1160
-    608
+    897
    
   
   
@@ -44,13 +44,6 @@
       Language
      
      
-      - 
-       
-        
-         Changes to language will only take effect after restarting RetroShare!
-        
-       
-      
 
       - 
        
         
@@ -70,7 +63,7 @@
         
        
       
 
-      - 
+      
- 
        
         
          Qt::Horizontal
@@ -83,6 +76,13 @@
         
        
       
 
+      - 
+       
+        
+         (Needs restart)
+        
+       
+      
 
       
     
    
@@ -198,124 +198,84 @@
      
       Tool Bar
      
-     
-      - 
-       
-        
-         QFrame::StyledPanel
-        
-        
-         QFrame::Plain
-        
-        
-         
-          2
-         
-         
-          2
-         
-         
-          2
-         
-         
-          2
-         
-         
- 
-          
+     
+      
- 
+       
+        
- 
+         
+          
+           Main page items:
+          
+         
+        
 
+        - 
+         
+          
- 
            
-            On Tool Bar
+            Buttons
            
-          
 
-          
-         - 
-          
+          
 
+          - 
            
-            On List Ite&m
+            Item list
            
-          
  
-          
-         - 
-          
-           
-            Qt::Horizontal
-           
-           
-            
-             300
-             16
-            
-           
-          
-         
 
-        
-       
+           
+         
+        
+        - 
+         
+          
+           Qt::Horizontal
+          
+          
+           
+            300
+            16
+           
+          
+         
+        
 
+       
       
-      - 
-       
-        
-         Where do you want to have the buttons for menu?
-        
-       
-      
 
-      - 
-       
-        
-         QFrame::StyledPanel
-        
-        
-         QFrame::Plain
-        
-        
-         
-          2
-         
-         
-          2
-         
-         
-          2
-         
-         
-          2
-         
-         
- 
-          
+      
- 
+       
+        
- 
+         
+          
+           Menu  items:
+          
+         
+        
 
+        - 
+         
+          
- 
            
-            On Tool Bar
+            Buttons
            
-          
 
-          
-         - 
-          
+          
 
+          - 
            
-            On List Item
+            Item list
            
-          
  
-          
-         - 
-          
-           
-            Qt::Horizontal
-           
-           
-            
-             300
-             16
-            
-           
-          
-         
 
-        
-       
+           
+         
+        
+        - 
+         
+          
+           Qt::Horizontal
+          
+          
+           
+            300
+            16
+           
+          
+         
+        
 
+       
       
-      - 
-       
-        
-         Where do you want to have the buttons for the page?
-        
-       
-      
 
-      - 
+      
- 
        
         
          
diff --git a/retroshare-gui/src/gui/settings/ChannelPage.cpp b/retroshare-gui/src/gui/settings/ChannelPage.cpp
index ca6c55031..b58035a01 100644
--- a/retroshare-gui/src/gui/settings/ChannelPage.cpp
+++ b/retroshare-gui/src/gui/settings/ChannelPage.cpp
@@ -30,21 +30,17 @@ ChannelPage::ChannelPage(QWidget * parent, Qt::WindowFlags flags)
 
 	/* Initialize GroupFrameSettingsWidget */
 	ui.groupFrameSettingsWidget->setOpenAllInNewTabText(tr("Open each channel in a new tab"));
+    ui.groupFrameSettingsWidget->setType(GroupFrameSettings::Channel) ;
+
+    connect(ui.loadThreadCheckBox,SIGNAL(toggled(bool)),this,SLOT(updateLoadThread)) ;
 }
 
+void ChannelPage::updateLoadThread() { Settings->setChannelLoadThread(ui.loadThreadCheckBox->isChecked()); }
+
 ChannelPage::~ChannelPage()
 {
 }
 
-/** Saves the changes on this page */
-bool ChannelPage::save(QString &/*errmsg*/)
-{
-	Settings->setChannelLoadThread(ui.loadThreadCheckBox->isChecked());
-	ui.groupFrameSettingsWidget->saveSettings(GroupFrameSettings::Channel);
-
-	return true;
-}
-
 /** Loads the settings for this page */
 void ChannelPage::load()
 {
diff --git a/retroshare-gui/src/gui/settings/ChannelPage.h b/retroshare-gui/src/gui/settings/ChannelPage.h
index 40e343fc0..69e28455b 100644
--- a/retroshare-gui/src/gui/settings/ChannelPage.h
+++ b/retroshare-gui/src/gui/settings/ChannelPage.h
@@ -33,8 +33,6 @@ public:
 	ChannelPage(QWidget * parent = 0, Qt::WindowFlags flags = 0);
 	~ChannelPage();
 
-	/** Saves the changes on this page */
-	virtual bool save(QString &errmsg);
 	/** Loads the settings for this page */
 	virtual void load();
 
@@ -42,6 +40,9 @@ public:
 	virtual QString pageName() const { return tr("Channels") ; }
 	virtual QString helpText() const { return ""; }
 
+protected slots:
+	void updateLoadThread() ;
+
 private:
 	Ui::ChannelPage ui;
 };
diff --git a/retroshare-gui/src/gui/settings/ChatPage.cpp b/retroshare-gui/src/gui/settings/ChatPage.cpp
index 8f74c69d9..b2f5d8478 100644
--- a/retroshare-gui/src/gui/settings/ChatPage.cpp
+++ b/retroshare-gui/src/gui/settings/ChatPage.cpp
@@ -93,6 +93,117 @@ static QString loadStyleInfo(ChatStyle::enumStyleType type, QListWidget *listWid
     }
     return stylePath;
 }
+void ChatPage::updateFontsAndEmotes()
+{
+    Settings->beginGroup(QString("Chat"));
+    Settings->setValue("Emoteicons_PrivatChat", ui.checkBox_emoteprivchat->isChecked());
+    Settings->setValue("Emoteicons_GroupChat", ui.checkBox_emotegroupchat->isChecked());
+    Settings->setValue("EnableCustomFonts", ui.checkBox_enableCustomFonts->isChecked());
+    Settings->setValue("EnableCustomFontSize", ui.checkBox_enableCustomFontSize->isChecked());
+	Settings->setValue("MinimumFontSize", ui.minimumFontSize->value());
+    Settings->setValue("EnableBold", ui.checkBox_enableBold->isChecked());
+    Settings->setValue("EnableItalics", ui.checkBox_enableItalics->isChecked());
+    Settings->setValue("MinimumContrast", ui.minimumContrast->value());
+    Settings->endGroup();
+}
+
+/** Saves the changes on this page */
+void ChatPage::updateChatParams()
+{
+	// state of distant Chat combobox
+	Settings->setValue("DistantChat", ui.distantChatComboBox->currentIndex());
+
+	Settings->setChatScreenFont(fontTempChat.toString());
+	NotifyQt::getInstance()->notifyChatFontChanged();
+
+	Settings->setChatSendMessageWithCtrlReturn(ui.sendMessageWithCtrlReturn->isChecked());
+	Settings->setChatSendAsPlainTextByDef(ui.sendAsPlainTextByDef->isChecked());
+	Settings->setChatLoadEmbeddedImages(ui.loadEmbeddedImages->isChecked());
+	Settings->setChatDoNotSendIsTyping(ui.DontSendTyping->isChecked());
+}
+
+void ChatPage::updateChatSearchParams()
+{
+	Settings->setChatSearchCharToStartSearch(ui.sbSearch_CharToStart->value());
+	Settings->setChatSearchCaseSensitively(ui.cbSearch_CaseSensitively->isChecked());
+	Settings->setChatSearchWholeWords(ui.cbSearch_WholeWords->isChecked());
+	Settings->setChatSearchMoveToCursor(ui.cbSearch_MoveToCursor->isChecked());
+	Settings->setChatSearchSearchWithoutLimit(ui.cbSearch_WithoutLimit->isChecked());
+	Settings->setChatSearchMaxSearchLimitColor(ui.sbSearch_MaxLimitColor->value());
+	Settings->setChatSearchFoundColor(rgbChatSearchFoundColor);
+}
+
+void ChatPage::updateDefaultLobbyIdentity()
+{
+    RsGxsId chosen_id ;
+	switch(ui.chatLobbyIdentity_IC->getChosenId(chosen_id))
+	{
+	case GxsIdChooser::KnowId:
+	case GxsIdChooser::UnKnowId:
+		rsMsgs->setDefaultIdentityForChatLobby(chosen_id) ;
+		break ;
+
+	default:;
+	}
+}
+
+
+void ChatPage::updateHistoryParams()
+{
+	Settings->setPublicChatHistoryCount(ui.publicChatLoadCount->value());
+	Settings->setPrivateChatHistoryCount(ui.privateChatLoadCount->value());
+	Settings->setLobbyChatHistoryCount(ui.lobbyChatLoadCount->value());
+
+	rsHistory->setEnable(RS_HISTORY_TYPE_PUBLIC , ui.publicChatEnable->isChecked());
+	rsHistory->setEnable(RS_HISTORY_TYPE_PRIVATE, ui.privateChatEnable->isChecked());
+	rsHistory->setEnable(RS_HISTORY_TYPE_LOBBY  , ui.lobbyChatEnable->isChecked());
+
+	rsHistory->setSaveCount(RS_HISTORY_TYPE_PUBLIC , ui.publicChatSaveCount->value());
+    rsHistory->setSaveCount(RS_HISTORY_TYPE_PRIVATE, ui.privateChatSaveCount->value());
+    rsHistory->setSaveCount(RS_HISTORY_TYPE_LOBBY  , ui.lobbyChatSaveCount->value());
+}
+
+void ChatPage::updatePublicStyle()
+{
+	ChatStyleInfo info;
+	QListWidgetItem *item = ui.publicList->currentItem();
+	if (item) {
+		info = item->data(Qt::UserRole).value();
+		if (publicStylePath != info.stylePath || publicStyleVariant != ui.publicComboBoxVariant->currentText()) {
+			Settings->setPublicChatStyle(info.stylePath, ui.publicComboBoxVariant->currentText());
+			NotifyQt::getInstance()->notifyChatStyleChanged(ChatStyle::TYPE_PUBLIC);
+		}
+	}
+}
+
+void ChatPage::updatePrivateStyle()
+{
+	ChatStyleInfo info;
+	QListWidgetItem *item = ui.privateList->currentItem();
+	if (item) {
+		info = item->data(Qt::UserRole).value();
+		if (privateStylePath != info.stylePath || privateStyleVariant != ui.privateComboBoxVariant->currentText()) {
+			Settings->setPrivateChatStyle(info.stylePath, ui.privateComboBoxVariant->currentText());
+			NotifyQt::getInstance()->notifyChatStyleChanged(ChatStyle::TYPE_PRIVATE);
+		}
+	}
+}
+
+void ChatPage::updateHistoryStyle()
+{
+	ChatStyleInfo info;
+	QListWidgetItem *item = ui.historyList->currentItem();
+	if (item) {
+		info = item->data(Qt::UserRole).value();
+		if (historyStylePath != info.stylePath || historyStyleVariant != ui.historyComboBoxVariant->currentText()) {
+			Settings->setHistoryChatStyle(info.stylePath, ui.historyComboBoxVariant->currentText());
+			NotifyQt::getInstance()->notifyChatStyleChanged(ChatStyle::TYPE_HISTORY);
+		}
+	}
+}
+
+void ChatPage::updateHistoryStorage() { rsHistory->setMaxStorageDuration(ui.max_storage_period->value() * 86400) ; }
+
 
 /** Constructor */
 ChatPage::ChatPage(QWidget * parent, Qt::WindowFlags flags)
@@ -101,121 +212,87 @@ ChatPage::ChatPage(QWidget * parent, Qt::WindowFlags flags)
     /* Invoke the Qt Designer generated object setup routine */
     ui.setupUi(this);
 
-       connect(ui.distantChatComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(distantChatComboBoxChanged(int)));
-
 #if QT_VERSION < 0x040600
     ui.minimumContrastLabel->hide();
     ui.minimumContrast->hide();
 #endif
+	connect(ui.distantChatComboBox,        SIGNAL(currentIndexChanged(int)), this, SLOT(distantChatComboBoxChanged(int)));
+
+	connect(ui.checkBox_emoteprivchat,     SIGNAL(toggled(bool)),            this, SLOT(updateFontsAndEmotes()));
+	connect(ui.checkBox_emotegroupchat,    SIGNAL(toggled(bool)),            this, SLOT(updateFontsAndEmotes()));
+	connect(ui.checkBox_enableCustomFonts, SIGNAL(toggled(bool)),            this, SLOT(updateFontsAndEmotes()));
+	connect(ui.minimumFontSize,            SIGNAL(valueChanged(int)),        this, SLOT(updateFontsAndEmotes()));
+	connect(ui.checkBox_enableBold,        SIGNAL(toggled(bool)),            this, SLOT(updateFontsAndEmotes()));
+	connect(ui.checkBox_enableItalics,     SIGNAL(toggled(bool)),            this, SLOT(updateFontsAndEmotes()));
+	connect(ui.minimumContrast,            SIGNAL(valueChanged(int)),        this, SLOT(updateFontsAndEmotes()));
+
+	connect(ui.distantChatComboBox,        SIGNAL(currentIndexChanged(int)), this, SLOT(updateChatParams()));
+	connect(ui.sendMessageWithCtrlReturn,  SIGNAL(toggled(bool)),            this, SLOT(updateChatParams()));
+	connect(ui.sendAsPlainTextByDef,       SIGNAL(toggled(bool)),            this, SLOT(updateChatParams()));
+	connect(ui.loadEmbeddedImages,         SIGNAL(toggled(bool)),            this, SLOT(updateChatParams()));
+	connect(ui.DontSendTyping,             SIGNAL(toggled(bool)),            this, SLOT(updateChatParams()));
+
+	connect(ui.sbSearch_CharToStart,       SIGNAL(valueChanged(int)),        this, SLOT(updateChatSearchParams()));
+	connect(ui.cbSearch_CaseSensitively,   SIGNAL(toggled(bool)),            this, SLOT(updateChatSearchParams()));
+	connect(ui.cbSearch_WholeWords,        SIGNAL(toggled(bool)),            this, SLOT(updateChatSearchParams()));
+	connect(ui.cbSearch_MoveToCursor,      SIGNAL(toggled(bool)),            this, SLOT(updateChatSearchParams()));
+	connect(ui.cbSearch_WithoutLimit,      SIGNAL(toggled(bool)),            this, SLOT(updateChatSearchParams()));
+	connect(ui.sbSearch_MaxLimitColor,     SIGNAL(valueChanged(int)),        this, SLOT(updateChatSearchParams()));
+
+	connect(ui.chatLobbyIdentity_IC,       SIGNAL(currentIndexChanged(int)), this, SLOT(updateDefaultLobbyIdentity()));
+
+	connect(ui.publicChatLoadCount,        SIGNAL(valueChanged(int)),        this, SLOT(updateHistoryParams()));
+	connect(ui.privateChatLoadCount,       SIGNAL(valueChanged(int)),        this, SLOT(updateHistoryParams()));
+	connect(ui.lobbyChatLoadCount,         SIGNAL(valueChanged(int)),        this, SLOT(updateHistoryParams()));
+	connect(ui.publicChatEnable,           SIGNAL(toggled(bool)),            this, SLOT(updateHistoryParams()));
+	connect(ui.privateChatEnable,          SIGNAL(toggled(bool)),            this, SLOT(updateHistoryParams()));
+	connect(ui.lobbyChatEnable,            SIGNAL(toggled(bool)),            this, SLOT(updateHistoryParams()));
+	connect(ui.publicChatSaveCount,        SIGNAL(valueChanged(int)),        this, SLOT(updateHistoryParams()));
+	connect(ui.privateChatSaveCount,       SIGNAL(valueChanged(int)),        this, SLOT(updateHistoryParams()));
+	connect(ui.lobbyChatSaveCount,         SIGNAL(valueChanged(int)),        this, SLOT(updateHistoryParams()));
+
+    connect(ui.publicList,                 SIGNAL(currentRowChanged(int)),   this, SLOT(updatePublicStyle())) ;
+    connect(ui.publicComboBoxVariant,      SIGNAL(currentIndexChanged(int)), this, SLOT(updatePublicStyle())) ;
+
+    connect(ui.privateList,                SIGNAL(currentRowChanged(int)),   this, SLOT(updatePrivateStyle())) ;
+    connect(ui.privateComboBoxVariant,     SIGNAL(currentIndexChanged(int)), this, SLOT(updatePrivateStyle())) ;
+
+    connect(ui.historyList,                SIGNAL(currentRowChanged(int)),   this, SLOT(updateHistoryStyle())) ;
+    connect(ui.historyComboBoxVariant,     SIGNAL(currentIndexChanged(int)), this, SLOT(updateHistoryStyle())) ;
+
+    connect(ui.max_storage_period,         SIGNAL(valueChanged(int)),        this, SLOT(updateHistoryStorage())) ;
+
+	connect(ui.chat_NewWindow,             SIGNAL(toggled(bool)),            this, SLOT(updateChatFlags()));
+	connect(ui.chat_Focus,                 SIGNAL(toggled(bool)),            this, SLOT(updateChatFlags()));
+	connect(ui.chat_tabbedWindow,          SIGNAL(toggled(bool)),            this, SLOT(updateChatFlags()));
+	connect(ui.chat_Blink,                 SIGNAL(toggled(bool)),            this, SLOT(updateChatFlags()));
+
+	connect(ui.chatLobby_Blink,            SIGNAL(toggled(bool)),            this, SLOT(updateChatLobbyFlags()));
+}
+void ChatPage::updateChatFlags()
+{
+	uint chatflags   = 0;
+
+	if (ui.chat_NewWindow->isChecked())
+		chatflags |= RS_CHAT_OPEN;
+	if (ui.chat_Focus->isChecked())
+		chatflags |= RS_CHAT_FOCUS;
+	if (ui.chat_tabbedWindow->isChecked())
+		chatflags |= RS_CHAT_TABBED_WINDOW;
+	if (ui.chat_Blink->isChecked())
+		chatflags |= RS_CHAT_BLINK;
+
+	Settings->setChatFlags(chatflags);
 }
 
-/** Saves the changes on this page */
-bool
-ChatPage::save(QString &/*errmsg*/)
+void ChatPage::updateChatLobbyFlags()
 {
-    Settings->beginGroup(QString("Chat"));
-    Settings->setValue("Emoteicons_PrivatChat", ui.checkBox_emoteprivchat->isChecked());
-    Settings->setValue("Emoteicons_GroupChat", ui.checkBox_emotegroupchat->isChecked());
-    Settings->setValue("EnableCustomFonts", ui.checkBox_enableCustomFonts->isChecked());
-    Settings->setValue("EnableCustomFontSize", ui.checkBox_enableCustomFontSize->isChecked());
-		Settings->setValue("MinimumFontSize", ui.minimumFontSize->value());
-    Settings->setValue("EnableBold", ui.checkBox_enableBold->isChecked());
-    Settings->setValue("EnableItalics", ui.checkBox_enableItalics->isChecked());
-    Settings->setValue("MinimumContrast", ui.minimumContrast->value());
-    Settings->endGroup();
-    // state of distant Chat combobox
-    Settings->setValue("DistantChat", ui.distantChatComboBox->currentIndex());
+	uint chatLobbyFlags = 0;
 
-    Settings->setChatScreenFont(fontTempChat.toString());
-    NotifyQt::getInstance()->notifyChatFontChanged();
+	if (ui.chatLobby_Blink->isChecked())
+		chatLobbyFlags |= RS_CHATLOBBY_BLINK;
 
-    Settings->setChatSendMessageWithCtrlReturn(ui.sendMessageWithCtrlReturn->isChecked());
-    Settings->setChatSendAsPlainTextByDef(ui.sendAsPlainTextByDef->isChecked());
-    Settings->setChatLoadEmbeddedImages(ui.loadEmbeddedImages->isChecked());
-    Settings->setChatDoNotSendIsTyping(ui.DontSendTyping->isChecked());	
-	
-    Settings->setChatSearchCharToStartSearch(ui.sbSearch_CharToStart->value());
-    Settings->setChatSearchCaseSensitively(ui.cbSearch_CaseSensitively->isChecked());
-    Settings->setChatSearchWholeWords(ui.cbSearch_WholeWords->isChecked());
-    Settings->setChatSearchMoveToCursor(ui.cbSearch_MoveToCursor->isChecked());
-    Settings->setChatSearchSearchWithoutLimit(ui.cbSearch_WithoutLimit->isChecked());
-    Settings->setChatSearchMaxSearchLimitColor(ui.sbSearch_MaxLimitColor->value());
-    Settings->setChatSearchFoundColor(rgbChatSearchFoundColor);
-
-    Settings->setPublicChatHistoryCount(ui.publicChatLoadCount->value());
-    Settings->setPrivateChatHistoryCount(ui.privateChatLoadCount->value());
-    Settings->setLobbyChatHistoryCount(ui.lobbyChatLoadCount->value());
-
-    rsHistory->setEnable(RS_HISTORY_TYPE_PUBLIC , ui.publicChatEnable->isChecked());
-    rsHistory->setEnable(RS_HISTORY_TYPE_PRIVATE, ui.privateChatEnable->isChecked());
-    rsHistory->setEnable(RS_HISTORY_TYPE_LOBBY  , ui.lobbyChatEnable->isChecked());
-
-    rsHistory->setSaveCount(RS_HISTORY_TYPE_PUBLIC , ui.publicChatSaveCount->value());
-    rsHistory->setSaveCount(RS_HISTORY_TYPE_PRIVATE, ui.privateChatSaveCount->value());
-    rsHistory->setSaveCount(RS_HISTORY_TYPE_LOBBY  , ui.lobbyChatSaveCount->value());
-
-    RsGxsId chosen_id ;
-    switch(ui.chatLobbyIdentity_IC->getChosenId(chosen_id))
-    {
-        case GxsIdChooser::KnowId:
-        case GxsIdChooser::UnKnowId:
-        rsMsgs->setDefaultIdentityForChatLobby(chosen_id) ;
-        break ;
-
-        default:;
-    }
-
-    ChatStyleInfo info;
-    QListWidgetItem *item = ui.publicList->currentItem();
-    if (item) {
-        info = item->data(Qt::UserRole).value();
-        if (publicStylePath != info.stylePath || publicStyleVariant != ui.publicComboBoxVariant->currentText()) {
-            Settings->setPublicChatStyle(info.stylePath, ui.publicComboBoxVariant->currentText());
-            NotifyQt::getInstance()->notifyChatStyleChanged(ChatStyle::TYPE_PUBLIC);
-        }
-    }
-
-    item = ui.privateList->currentItem();
-    if (item) {
-        info = item->data(Qt::UserRole).value();
-        if (privateStylePath != info.stylePath || privateStyleVariant != ui.privateComboBoxVariant->currentText()) {
-            Settings->setPrivateChatStyle(info.stylePath, ui.privateComboBoxVariant->currentText());
-            NotifyQt::getInstance()->notifyChatStyleChanged(ChatStyle::TYPE_PRIVATE);
-        }
-    }
-
-    item = ui.historyList->currentItem();
-    if (item) {
-        info = item->data(Qt::UserRole).value();
-        if (historyStylePath != info.stylePath || historyStyleVariant != ui.historyComboBoxVariant->currentText()) {
-            Settings->setHistoryChatStyle(info.stylePath, ui.historyComboBoxVariant->currentText());
-            NotifyQt::getInstance()->notifyChatStyleChanged(ChatStyle::TYPE_HISTORY);
-        }
-    }
-
-	 rsHistory->setMaxStorageDuration(ui.max_storage_period->value() * 86400) ;
-
-    uint chatflags   = 0;
-
-    if (ui.chat_NewWindow->isChecked())
-        chatflags |= RS_CHAT_OPEN;
-    if (ui.chat_Focus->isChecked())
-        chatflags |= RS_CHAT_FOCUS;
-    if (ui.chat_tabbedWindow->isChecked())
-        chatflags |= RS_CHAT_TABBED_WINDOW;
-    if (ui.chat_Blink->isChecked())
-        chatflags |= RS_CHAT_BLINK;
-
-    Settings->setChatFlags(chatflags);
-
-    uint chatLobbyFlags = 0;
-
-    if (ui.chatLobby_Blink->isChecked())
-        chatLobbyFlags |= RS_CHATLOBBY_BLINK;
-
-    Settings->setChatLobbyFlags(chatLobbyFlags);
-
-    return true;
+	Settings->setChatLobbyFlags(chatLobbyFlags);
 }
 
 /** Loads the settings for this page */
diff --git a/retroshare-gui/src/gui/settings/ChatPage.h b/retroshare-gui/src/gui/settings/ChatPage.h
index f6445d4d5..8f7048e2c 100644
--- a/retroshare-gui/src/gui/settings/ChatPage.h
+++ b/retroshare-gui/src/gui/settings/ChatPage.h
@@ -35,8 +35,6 @@ class ChatPage : public ConfigPage
       /** Default Destructor */
       ~ChatPage() {}
 
-      /** Saves the changes on this page */
-      virtual bool save(QString &errmsg);
       /** Loads the settings for this page */
       virtual void load();
 
@@ -58,6 +56,17 @@ class ChatPage : public ConfigPage
  
     void distantChatComboBoxChanged(int);
   
+    void updateFontsAndEmotes();
+    void updateChatParams();
+    void updateChatSearchParams();
+    void updateDefaultLobbyIdentity() ;
+    void updateHistoryParams();
+    void updatePublicStyle() ;
+    void updatePrivateStyle() ;
+    void updateHistoryStyle() ;
+    void updateHistoryStorage();
+    void updateChatFlags();
+    void updateChatLobbyFlags();
 
   private:
       void setPreviewMessages(QString &stylePath, QString styleVariant, QTextBrowser *textBrowser);
diff --git a/retroshare-gui/src/gui/settings/CryptoPage.cpp b/retroshare-gui/src/gui/settings/CryptoPage.cpp
index 8cca2756c..1aa30b520 100755
--- a/retroshare-gui/src/gui/settings/CryptoPage.cpp
+++ b/retroshare-gui/src/gui/settings/CryptoPage.cpp
@@ -92,13 +92,6 @@ CryptoPage::~CryptoPage()
 {
 }
 
-/** Saves the changes on this page */
-bool
-CryptoPage::save(QString &/*errmsg*/)
-{
- 	return true;
-}
-
 /** Loads the settings for this page */
 void
 CryptoPage::load()
diff --git a/retroshare-gui/src/gui/settings/CryptoPage.h b/retroshare-gui/src/gui/settings/CryptoPage.h
index a1bcb42f0..fb07b0da7 100755
--- a/retroshare-gui/src/gui/settings/CryptoPage.h
+++ b/retroshare-gui/src/gui/settings/CryptoPage.h
@@ -35,8 +35,6 @@ class CryptoPage : public ConfigPage
       /** Default Destructor */
       ~CryptoPage();
 
-      /** Saves the changes on this page */
-      virtual bool save(QString &errmsg);
       /** Loads the settings for this page */
 
 		virtual QPixmap iconPixmap() const { return QPixmap(":/icons/settings/profile.svg") ; }
@@ -46,9 +44,9 @@ class CryptoPage : public ConfigPage
   private slots:
       virtual void load();
       void copyPublicKey();
-		void copyRSLink() ;
-		virtual void showEvent ( QShowEvent * event );
-		void profilemanager();
+	  void copyRSLink() ;
+	  virtual void showEvent ( QShowEvent * event );
+	  void profilemanager();
       bool fileSave();
       bool fileSaveAs();
       void showStats();
diff --git a/retroshare-gui/src/gui/settings/DirectoriesPage.cpp b/retroshare-gui/src/gui/settings/DirectoriesPage.cpp
index c3c466980..7fdd90cbb 100755
--- a/retroshare-gui/src/gui/settings/DirectoriesPage.cpp
+++ b/retroshare-gui/src/gui/settings/DirectoriesPage.cpp
@@ -37,6 +37,11 @@ DirectoriesPage::DirectoriesPage(QWidget * parent, Qt::WindowFlags flags)
     connect(ui.partialButton, SIGNAL(clicked( bool ) ), this , SLOT( setPartialsDirectory() ) );
     connect(ui.editShareButton, SIGNAL(clicked()), this, SLOT(editDirectories()));
     connect(ui.autoCheckDirectories_CB, SIGNAL(clicked(bool)), this, SLOT(toggleAutoCheckDirectories(bool)));
+
+    connect(ui.autoCheckDirectories_CB,     SIGNAL(toggled(bool)),    this,SLOT(updateAutoCheckDirectories())) ;
+    connect(ui.autoCheckDirectoriesDelay_SB,SIGNAL(valueChanged(int)),this,SLOT(updateAutoScanDirectoriesPeriod())) ;
+    connect(ui.shareDownloadDirectoryCB,    SIGNAL(toggled(bool)),    this,SLOT(updateShareDownloadDirectory())) ;
+    connect(ui.followSymLinks_CB,           SIGNAL(toggled(bool)),    this,SLOT(updateFollowSymLinks())) ;
 }
 
 void DirectoriesPage::toggleAutoCheckDirectories(bool b)
@@ -49,29 +54,10 @@ void DirectoriesPage::editDirectories()
 	ShareManager::showYourself() ;
 }
 
-/** Saves the changes on this page */
-bool DirectoriesPage::save(QString &/*errmsg*/)
-{
-	std::string dir = ui.incomingDir->text().toUtf8().constData();
-	if (!dir.empty())
-	{
-		rsFiles->setDownloadDirectory(dir);
-	}
-
-	dir = ui.partialsDir->text().toUtf8().constData();
-	if (!dir.empty())
-	{
-		rsFiles->setPartialsDirectory(dir);
-	}
-
-    rsFiles->setWatchEnabled(ui.autoCheckDirectories_CB->isChecked()) ;
-    rsFiles->setWatchPeriod(ui.autoCheckDirectoriesDelay_SB->value());
-
-	rsFiles->shareDownloadDirectory(ui.shareDownloadDirectoryCB->isChecked());
-	rsFiles->setFollowSymLinks(ui.followSymLinks_CB->isChecked());
-
-	return true;
-}
+void DirectoriesPage::updateAutoCheckDirectories()       {    rsFiles->setWatchEnabled(ui.autoCheckDirectories_CB->isChecked()) ; }
+void DirectoriesPage::updateAutoScanDirectoriesPeriod()  {    rsFiles->setWatchPeriod(ui.autoCheckDirectoriesDelay_SB->value()); }
+void DirectoriesPage::updateShareDownloadDirectory()     {    rsFiles->shareDownloadDirectory(ui.shareDownloadDirectoryCB->isChecked());}
+void DirectoriesPage::updateFollowSymLinks()             {    rsFiles->setFollowSymLinks(ui.followSymLinks_CB->isChecked()); }
 
 /** Loads the settings for this page */
 void DirectoriesPage::load()
@@ -95,6 +81,10 @@ void DirectoriesPage::setIncomingDirectory()
 	}
 
 	ui.incomingDir->setText(qdir);
+	std::string dir = ui.incomingDir->text().toUtf8().constData();
+
+    if(!dir.empty())
+		rsFiles->setDownloadDirectory(dir);
 }
 
 void DirectoriesPage::setPartialsDirectory()
@@ -105,4 +95,7 @@ void DirectoriesPage::setPartialsDirectory()
 	}
 
 	ui.partialsDir->setText(qdir);
+    std::string	dir = ui.partialsDir->text().toUtf8().constData();
+	if (!dir.empty())
+		rsFiles->setPartialsDirectory(dir);
 }
diff --git a/retroshare-gui/src/gui/settings/DirectoriesPage.h b/retroshare-gui/src/gui/settings/DirectoriesPage.h
index ffeb1bf34..dfb0f15cd 100755
--- a/retroshare-gui/src/gui/settings/DirectoriesPage.h
+++ b/retroshare-gui/src/gui/settings/DirectoriesPage.h
@@ -32,8 +32,6 @@ class DirectoriesPage: public ConfigPage
 public:
     DirectoriesPage(QWidget * parent = 0, Qt::WindowFlags flags = 0);
 
-    /** Saves the changes on this page */
-    virtual bool save(QString &errmsg);
     /** Loads the settings for this page */
     virtual void load();
 
@@ -47,6 +45,11 @@ private slots:
     void setPartialsDirectory();
 	void toggleAutoCheckDirectories(bool);
 
+    void updateAutoCheckDirectories()       ;
+    void updateAutoScanDirectoriesPeriod()  ;
+    void updateShareDownloadDirectory()     ;
+    void updateFollowSymLinks()             ;
+
 private:
    Ui::DirectoriesPage ui;
 };
diff --git a/retroshare-gui/src/gui/settings/FileAssociationsPage.cpp b/retroshare-gui/src/gui/settings/FileAssociationsPage.cpp
index 95bd33cf1..d8f5f003c 100755
--- a/retroshare-gui/src/gui/settings/FileAssociationsPage.cpp
+++ b/retroshare-gui/src/gui/settings/FileAssociationsPage.cpp
@@ -131,38 +131,6 @@ FileAssociationsPage::~FileAssociationsPage()
 {
 }
 
-//============================================================================
-
-bool
-FileAssociationsPage::save (QString &/*errmsg*/)
-{
-//    RshareSettings settings;
-
-
-//    settings.beginGroup("FileAssotiations");
-//    settings.setValue(".s01", "s01 test");
-//    settings.setValue(".s02", "s02 test");
-//    settings.setValue(".s03", "s03 test");
-//    settings.setValue(".s04", "s04 test");
-//     QMap::const_iterator ati = ations.constBegin();
-//     while (ati != ations.constEnd())
-//     {
-//         settings.setValue( ati.key(), ati.value() );
-//         qDebug() << "  - " << ati.key() << ati.value() << "\n" ;
-//         ++ati;
-//     }
-//
-//     settings.endGroup();
-
-//    settings.sync();
-
-//    delete settings;
-/*    */
-    return true;
-}
-
-//============================================================================
-
 void
 FileAssociationsPage::load()
 {
diff --git a/retroshare-gui/src/gui/settings/FileAssociationsPage.h b/retroshare-gui/src/gui/settings/FileAssociationsPage.h
index 769dbabb0..078a437e0 100755
--- a/retroshare-gui/src/gui/settings/FileAssociationsPage.h
+++ b/retroshare-gui/src/gui/settings/FileAssociationsPage.h
@@ -52,7 +52,6 @@ public:
     virtual ~FileAssociationsPage();
 
     virtual void load();
-    virtual bool save (QString &errmsg);
 	 virtual QPixmap iconPixmap() const { return QPixmap(":/images/filetype-association.png") ; }
 	 virtual QString pageName() const { return tr("Associations") ; }
 
diff --git a/retroshare-gui/src/gui/settings/ForumPage.cpp b/retroshare-gui/src/gui/settings/ForumPage.cpp
index 90ff1f176..d7681762e 100644
--- a/retroshare-gui/src/gui/settings/ForumPage.cpp
+++ b/retroshare-gui/src/gui/settings/ForumPage.cpp
@@ -30,24 +30,23 @@ ForumPage::ForumPage(QWidget * parent, Qt::WindowFlags flags)
 
 	/* Initialize GroupFrameSettingsWidget */
 	ui.groupFrameSettingsWidget->setOpenAllInNewTabText(tr("Open each forum in a new tab"));
+
+    connect(ui.setMsgToReadOnActivate,SIGNAL(toggled(bool)),this,SLOT(updateMsgReadOnActivate())) ;
+	connect(ui.expandNewMessages  , SIGNAL(toggled(bool)), this, SLOT( updateExpandNewMessages()));
+	connect(ui.loadEmbeddedImages , SIGNAL(toggled(bool)), this, SLOT(updateLoadEmbeddedImage() ));
+	connect(ui.loadEmoticons      , SIGNAL(toggled(bool)), this, SLOT(   updateLoadEmoticons()	 ));
+
+    ui.groupFrameSettingsWidget->setType(GroupFrameSettings::Forum) ;
 }
 
 ForumPage::~ForumPage()
 {
 }
 
-/** Saves the changes on this page */
-bool ForumPage::save(QString &/*errmsg*/)
-{
-	Settings->setForumMsgSetToReadOnActivate(ui.setMsgToReadOnActivate->isChecked());
-	Settings->setForumExpandNewMessages(ui.expandNewMessages->isChecked());
-	Settings->setForumLoadEmbeddedImages(ui.loadEmbeddedImages->isChecked());
-	Settings->setForumLoadEmoticons(ui.loadEmoticons->isChecked());
-
-	ui.groupFrameSettingsWidget->saveSettings(GroupFrameSettings::Forum);
-
-	return true;
-}
+void ForumPage::updateMsgReadOnActivate()   { Settings->setForumMsgSetToReadOnActivate(ui.setMsgToReadOnActivate->isChecked()); }
+void ForumPage::updateExpandNewMessages()	{ Settings->setForumExpandNewMessages(     ui.expandNewMessages     ->isChecked());}
+void ForumPage::updateLoadEmbeddedImages()	{ Settings->setForumLoadEmbeddedImages(    ui.loadEmbeddedImages    ->isChecked());}
+void ForumPage::updateLoadEmoticons()		{ Settings->setForumLoadEmoticons(         ui.loadEmoticons         ->isChecked()); }
 
 /** Loads the settings for this page */
 void ForumPage::load()
diff --git a/retroshare-gui/src/gui/settings/ForumPage.h b/retroshare-gui/src/gui/settings/ForumPage.h
index 6e1082a19..d4ca206e1 100644
--- a/retroshare-gui/src/gui/settings/ForumPage.h
+++ b/retroshare-gui/src/gui/settings/ForumPage.h
@@ -33,8 +33,6 @@ public:
 	ForumPage(QWidget * parent = 0, Qt::WindowFlags flags = 0);
 	~ForumPage();
 
-	/** Saves the changes on this page */
-	virtual bool save(QString &errmsg);
 	/** Loads the settings for this page */
 	virtual void load();
 
@@ -42,6 +40,12 @@ public:
 	virtual QString pageName() const { return tr("Forum") ; }
 	virtual QString helpText() const { return ""; }
 
+protected slots:
+    void updateMsgReadOnActivate();
+    void updateExpandNewMessages();
+    void updateLoadEmbeddedImages();
+    void updateLoadEmoticons();
+
 private:
 	Ui::ForumPage ui;
 };
diff --git a/retroshare-gui/src/gui/settings/GeneralPage.cpp b/retroshare-gui/src/gui/settings/GeneralPage.cpp
index 7aa5f016f..deed5a031 100755
--- a/retroshare-gui/src/gui/settings/GeneralPage.cpp
+++ b/retroshare-gui/src/gui/settings/GeneralPage.cpp
@@ -38,8 +38,6 @@ GeneralPage::GeneralPage(QWidget * parent, Qt::WindowFlags flags) :
     /* Invoke the Qt Designer generated object setup routine */
     ui.setupUi(this);
 
-    /* Connect signals */
-    connect(ui.runStartWizard_PB,SIGNAL(clicked()), this,SLOT(runStartWizard())) ;
 
     /* Hide platform specific features */
 #ifdef Q_OS_WIN
@@ -82,6 +80,19 @@ GeneralPage::GeneralPage(QWidget * parent, Qt::WindowFlags flags) :
 	ui.autoLogin->setEnabled(false);
 	ui.autoLogin->setToolTip(tr("Your RetroShare build has auto-login disabled."));
 #endif // RS_AUTOLOGIN
+
+    /* Connect signals */
+    connect(ui.useLocalServer,                              SIGNAL(toggled(bool)),     this,SLOT(updateUseLocalServer())) ;
+    connect(ui.idleSpinBox,                                 SIGNAL(valueChanged(int)), this,SLOT(updateMaxTimeBeforeIdle())) ;
+    connect(ui.checkStartMinimized,                         SIGNAL(toggled(bool)),     this,SLOT(updateStartMinimized())) ;
+    connect(ui.checkQuit,                                   SIGNAL(toggled(bool)),     this,SLOT(updateDoQuit())) ;
+    connect(ui.checkCloseToTray,                            SIGNAL(toggled(bool)),     this,SLOT(updateCloseToTray())) ;
+    connect(ui.autoLogin,                                   SIGNAL(toggled(bool)),     this,SLOT(updateAutoLogin())) ;
+    connect(ui.chkRunRetroshareAtSystemStartup,             SIGNAL(toggled(bool)),     this,SLOT(updateRunRSOnBoot())) ;
+    connect(ui.chkRunRetroshareAtSystemStartupMinimized,    SIGNAL(toggled(bool)),     this,SLOT(updateRunRSOnBoot())) ;
+    connect(ui.runStartWizard_PB,                           SIGNAL(clicked()),         this,SLOT(runStartWizard())) ;
+    connect(ui.checkAdvanced,                               SIGNAL(toggled(bool)),     this,SLOT(updateAdvancedMode())) ;
+    connect(ui.registerRetroShareProtocol,                  SIGNAL(toggled(bool)),     this,SLOT(updateRegisterRSProtocol())) ;
 }
 
 /** Destructor */
@@ -93,48 +104,48 @@ void GeneralPage::runStartWizard()
     QuickStartWizard(this).exec();
 }
 
-/** Saves the changes on this page */
-bool GeneralPage::save(QString &/*errmsg*/)
+void GeneralPage::updateAdvancedMode()
+{
+	if (ui.checkAdvanced->isChecked())
+	{
+		std::string opt("YES");
+		rsConfig->setConfigurationOption(RS_CONFIG_ADVANCED, opt);
+	}
+	else
+	{
+		std::string opt("NO");
+		rsConfig->setConfigurationOption(RS_CONFIG_ADVANCED, opt);
+	}
+}
+
+void GeneralPage::updateUseLocalServer()   { Settings->setUseLocalServer(ui.useLocalServer->isChecked()); }
+void GeneralPage::updateMaxTimeBeforeIdle(){ Settings->setMaxTimeBeforeIdle(ui.idleSpinBox->value()); }
+void GeneralPage::updateStartMinimized()   { Settings->setStartMinimized(ui.checkStartMinimized->isChecked()); }
+void GeneralPage::updateDoQuit()           { Settings->setValue("doQuit", ui.checkQuit->isChecked()); }
+void GeneralPage::updateCloseToTray()      { Settings->setCloseToTray(ui.checkCloseToTray->isChecked()); }
+void GeneralPage::updateAutoLogin()        { RsInit::setAutoLogin(ui.autoLogin->isChecked());}
+void GeneralPage::updateRunRSOnBoot()
 {
 #ifdef Q_OS_WIN
 #ifndef QT_DEBUG
   Settings->setRunRetroshareOnBoot(ui.chkRunRetroshareAtSystemStartup->isChecked(), ui.chkRunRetroshareAtSystemStartupMinimized->isChecked());
 #endif
 #endif
+}
 
-  Settings->setStartMinimized(ui.checkStartMinimized->isChecked());
-
-  if (ui.checkAdvanced->isChecked())
-  {
-    std::string opt("YES");
-    rsConfig->setConfigurationOption(RS_CONFIG_ADVANCED, opt);
-  }
-  else
-  {
-    std::string opt("NO");
-    rsConfig->setConfigurationOption(RS_CONFIG_ADVANCED, opt);
-  }
-
-  Settings->setValue("doQuit", ui.checkQuit->isChecked());
-  Settings->setCloseToTray(ui.checkCloseToTray->isChecked());
-  RsInit::setAutoLogin(ui.autoLogin->isChecked());
-
-  if (ui.registerRetroShareProtocol->isChecked() != Settings->getRetroShareProtocol()) {
-    QString error ="";
-    if (Settings->setRetroShareProtocol(ui.registerRetroShareProtocol->isChecked(), error) == false) {
-        if (ui.registerRetroShareProtocol->isChecked()) {
-            QMessageBox::critical(this, tr("Error"), tr("Could not add retroshare:// as protocol.").append("\n").append(error));
-        } else {
-            QMessageBox::critical(this, tr("Error"), tr("Could not remove retroshare:// protocol.").append("\n").append(error));
-        }
-    }
-  }
-
-  Settings->setUseLocalServer(ui.useLocalServer->isChecked());
-
-  Settings->setMaxTimeBeforeIdle(ui.idleSpinBox->value());
-
-  return true;
+void GeneralPage::updateRegisterRSProtocol()
+{
+	if (ui.registerRetroShareProtocol->isChecked() != Settings->getRetroShareProtocol())
+    {
+		QString error ="";
+		if (Settings->setRetroShareProtocol(ui.registerRetroShareProtocol->isChecked(), error) == false) {
+			if (ui.registerRetroShareProtocol->isChecked()) {
+				QMessageBox::critical(this, tr("Error"), tr("Could not add retroshare:// as protocol.").append("\n").append(error));
+			} else {
+				QMessageBox::critical(this, tr("Error"), tr("Could not remove retroshare:// protocol.").append("\n").append(error));
+			}
+		}
+	}
 }
 
 /** Loads the settings for this page */
diff --git a/retroshare-gui/src/gui/settings/GeneralPage.h b/retroshare-gui/src/gui/settings/GeneralPage.h
index fd7b90a33..d28146915 100755
--- a/retroshare-gui/src/gui/settings/GeneralPage.h
+++ b/retroshare-gui/src/gui/settings/GeneralPage.h
@@ -28,28 +28,37 @@
 
 class GeneralPage : public ConfigPage
 {
-  Q_OBJECT
+	Q_OBJECT
 
 public:
-  /** Default Constructor */
-  GeneralPage(QWidget * parent = 0, Qt::WindowFlags flags = 0);
-    /** Default Destructor */
-  ~GeneralPage();
+	/** Default Constructor */
+	GeneralPage(QWidget * parent = 0, Qt::WindowFlags flags = 0);
+	/** Default Destructor */
+	~GeneralPage();
 
-  /** Saves the changes on this page */
-  virtual bool save(QString &errmsg);
-  /** Loads the settings for this page */
-  virtual void load();
+	/** Saves the changes on this page */
+	/** Loads the settings for this page */
+	virtual void load();
 
-  virtual QPixmap iconPixmap() const { return QPixmap(":/icons/settings/general.svg") ; }
-  virtual QString pageName() const { return tr("General") ; }
-  virtual QString helpText() const { return ""; }
+	virtual QPixmap iconPixmap() const { return QPixmap(":/icons/settings/general.svg") ; }
+	virtual QString pageName() const { return tr("General") ; }
+	virtual QString helpText() const { return ""; }
+
+public slots:
+	void runStartWizard() ;
+	void updateAdvancedMode();
+	void updateUseLocalServer()   ;
+	void updateMaxTimeBeforeIdle();
+	void updateStartMinimized()   ;
+	void updateDoQuit()           ;
+	void updateCloseToTray()      ;
+	void updateAutoLogin()        ;
+	void updateRunRSOnBoot()      ;
+	void updateRegisterRSProtocol();
 
-  public slots:
-	  void runStartWizard() ;
 private:
-  /** Qt Designer generated object */
-  Ui::GeneralPage ui;
+	/** Qt Designer generated object */
+	Ui::GeneralPage ui;
 };
 
 #endif
diff --git a/retroshare-gui/src/gui/settings/GroupFrameSettingsWidget.cpp b/retroshare-gui/src/gui/settings/GroupFrameSettingsWidget.cpp
index 5b55ff689..ad5e06c5c 100644
--- a/retroshare-gui/src/gui/settings/GroupFrameSettingsWidget.cpp
+++ b/retroshare-gui/src/gui/settings/GroupFrameSettingsWidget.cpp
@@ -1,3 +1,5 @@
+#include 
+
 #include "GroupFrameSettingsWidget.h"
 #include "ui_GroupFrameSettingsWidget.h"
 
@@ -7,7 +9,11 @@ GroupFrameSettingsWidget::GroupFrameSettingsWidget(QWidget *parent) :
 {
 	ui->setupUi(this);
 
+    mType = GroupFrameSettings::Nothing ;
 	mEnable = true;
+
+    connect(ui->openAllInNewTabCheckBox,     SIGNAL(toggled(bool)),this,SLOT(saveSettings())) ;
+    connect(ui->hideTabBarWithOneTabCheckBox,SIGNAL(toggled(bool)),this,SLOT(saveSettings())) ;
 }
 
 GroupFrameSettingsWidget::~GroupFrameSettingsWidget()
@@ -22,6 +28,8 @@ void GroupFrameSettingsWidget::setOpenAllInNewTabText(const QString &text)
 
 void GroupFrameSettingsWidget::loadSettings(GroupFrameSettings::Type type)
 {
+    mType = type ;
+
 	GroupFrameSettings groupFrameSettings;
 	if (Settings->getGroupFrameSettings(type, groupFrameSettings)) {
 		ui->openAllInNewTabCheckBox->setChecked(groupFrameSettings.mOpenAllInNewTab);
@@ -32,13 +40,20 @@ void GroupFrameSettingsWidget::loadSettings(GroupFrameSettings::Type type)
 	}
 }
 
-void GroupFrameSettingsWidget::saveSettings(GroupFrameSettings::Type type)
+void GroupFrameSettingsWidget::saveSettings()
 {
-	if (mEnable) {
+    if(mType == GroupFrameSettings::Nothing)
+    {
+        std::cerr << "(EE) No type initialized for groupFrameSettings. This is a bug." << std::endl;
+        return;
+    }
+
+	if (mEnable)
+    {
 		GroupFrameSettings groupFrameSettings;
 		groupFrameSettings.mOpenAllInNewTab = ui->openAllInNewTabCheckBox->isChecked();
 		groupFrameSettings.mHideTabBarWithOneTab = ui->hideTabBarWithOneTabCheckBox->isChecked();
 
-		Settings->setGroupFrameSettings(type, groupFrameSettings);
+		Settings->setGroupFrameSettings(mType, groupFrameSettings);
 	}
 }
diff --git a/retroshare-gui/src/gui/settings/GroupFrameSettingsWidget.h b/retroshare-gui/src/gui/settings/GroupFrameSettingsWidget.h
index 418a9f9e6..aa7eb1b82 100644
--- a/retroshare-gui/src/gui/settings/GroupFrameSettingsWidget.h
+++ b/retroshare-gui/src/gui/settings/GroupFrameSettingsWidget.h
@@ -20,11 +20,15 @@ public:
 	void setOpenAllInNewTabText(const QString &text);
 
 	void loadSettings(GroupFrameSettings::Type type);
-	void saveSettings(GroupFrameSettings::Type type);
+
+    void setType(GroupFrameSettings::Type type) { mType = type ; }
+protected slots:
+	void saveSettings();
 
 private:
 	bool mEnable;
 	Ui::GroupFrameSettingsWidget *ui;
+    GroupFrameSettings::Type mType ;
 };
 
 #endif // GROUPFRAMESETTINGSWIDGET_H
diff --git a/retroshare-gui/src/gui/settings/MessagePage.cpp b/retroshare-gui/src/gui/settings/MessagePage.cpp
index 89dcaa0ac..1aa4509f0 100644
--- a/retroshare-gui/src/gui/settings/MessagePage.cpp
+++ b/retroshare-gui/src/gui/settings/MessagePage.cpp
@@ -51,8 +51,9 @@ MessagePage::MessagePage(QWidget * parent, Qt::WindowFlags flags)
     
     connect(ui.comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(distantMsgsComboBoxChanged(int)));
 
-
-	 //ui.encryptedMsgs_CB->setEnabled(false) ;
+	connect(ui.setMsgToReadOnActivate,SIGNAL(toggled(bool)),          this,SLOT(updateMsgToReadOnActivate()));
+	connect(ui.loadEmbeddedImages,    SIGNAL(toggled(bool)),          this,SLOT(updateLoadEmbededImages()  ));
+	connect(ui.openComboBox,          SIGNAL(currentIndexChanged(int)),this,SLOT(updateMsgOpen()            ));
 }
 
 MessagePage::~MessagePage()
@@ -79,17 +80,13 @@ void MessagePage::distantMsgsComboBoxChanged(int i)
 
 }
 
-/** Saves the changes on this page */
-bool
-MessagePage::save(QString &/*errmsg*/)
-{
-    Settings->setMsgSetToReadOnActivate(ui.setMsgToReadOnActivate->isChecked());
-    Settings->setMsgLoadEmbeddedImages(ui.loadEmbeddedImages->isChecked());
-    Settings->setMsgOpen((RshareSettings::enumMsgOpen) ui.openComboBox->itemData(ui.openComboBox->currentIndex()).toInt());
-    
-    // state of distant Message combobox
-    Settings->setValue("DistantMessages", ui.comboBox->currentIndex());
+void MessagePage::updateMsgToReadOnActivate() { Settings->setMsgSetToReadOnActivate(ui.setMsgToReadOnActivate->isChecked()); }
+void MessagePage::updateLoadEmbededImages()   { Settings->setMsgLoadEmbeddedImages(ui.loadEmbeddedImages->isChecked()); }
+void MessagePage::updateMsgOpen()             { Settings->setMsgOpen((RshareSettings::enumMsgOpen) ui.openComboBox->itemData(ui.openComboBox->currentIndex()).toInt());}
+void MessagePage::updateDistantMsgs()         { Settings->setValue("DistantMessages", ui.comboBox->currentIndex()); }
 
+void MessagePage::updateMsgTags()
+{
     std::map >::iterator Tag;
     for (Tag = m_pTags->types.begin(); Tag != m_pTags->types.end(); ++Tag) {
         // check for changed tags
@@ -107,8 +104,6 @@ MessagePage::save(QString &/*errmsg*/)
             }
         }
     }
-
-    return true;
 }
 
 /** Loads the settings for this page */
@@ -166,6 +161,8 @@ void MessagePage::addTag()
             m_changedTagIds.push_back(TagDlg.m_nId);
         }
     }
+
+    updateMsgTags();
 }
 
 void MessagePage::editTag()
@@ -196,6 +193,7 @@ void MessagePage::editTag()
             }
         }
     }
+    updateMsgTags();
 }
 
 void MessagePage::deleteTag()
@@ -228,6 +226,7 @@ void MessagePage::deleteTag()
     if (std::find(m_changedTagIds.begin(), m_changedTagIds.end(), nId) == m_changedTagIds.end()) {
         m_changedTagIds.push_back(nId);
     }
+    updateMsgTags();
 }
 
 void MessagePage::defaultTag()
@@ -244,6 +243,7 @@ void MessagePage::defaultTag()
         }
     }
 
+    updateMsgTags();
     fillTags();
 }
 
diff --git a/retroshare-gui/src/gui/settings/MessagePage.h b/retroshare-gui/src/gui/settings/MessagePage.h
index 99d3ca5f2..c58ab6e0f 100644
--- a/retroshare-gui/src/gui/settings/MessagePage.h
+++ b/retroshare-gui/src/gui/settings/MessagePage.h
@@ -37,8 +37,6 @@ public:
     MessagePage(QWidget * parent = 0, Qt::WindowFlags flags = 0);
     ~MessagePage();
 
-    /** Saves the changes on this page */
-    virtual bool save(QString &errmsg);
     /** Loads the settings for this page */
     virtual void load();
 
@@ -56,6 +54,11 @@ private slots:
     void currentRowChangedTag(int row);
     void distantMsgsComboBoxChanged(int);
 	 
+	void updateMsgToReadOnActivate() ;
+	void updateLoadEmbededImages()       ;
+	void updateMsgOpen()                 ;
+	void updateDistantMsgs()             ;
+	void updateMsgTags()    ;
 
 private:
     void fillTags();
diff --git a/retroshare-gui/src/gui/settings/NetworkPage.cpp b/retroshare-gui/src/gui/settings/NetworkPage.cpp
index 4bc31e1b2..0c0bd7f67 100755
--- a/retroshare-gui/src/gui/settings/NetworkPage.cpp
+++ b/retroshare-gui/src/gui/settings/NetworkPage.cpp
@@ -30,13 +30,6 @@ NetworkPage::NetworkPage(QWidget * parent, Qt::WindowFlags flags)
 
 }
 
-/** Saves the changes on this page */
-bool
-NetworkPage::save(QString &/*errmsg*/)
-{
-	return true;
-}
-
 /** Loads the settings for this page */
 void
 NetworkPage::load()
diff --git a/retroshare-gui/src/gui/settings/NetworkPage.h b/retroshare-gui/src/gui/settings/NetworkPage.h
index 9244e99a0..fa1cf8968 100755
--- a/retroshare-gui/src/gui/settings/NetworkPage.h
+++ b/retroshare-gui/src/gui/settings/NetworkPage.h
@@ -31,8 +31,6 @@ public:
     NetworkPage(QWidget * parent = 0, Qt::WindowFlags flags = 0);
     ~NetworkPage() {}
 
-    /** Saves the changes on this page */
-    virtual bool save(QString &errmsg);
     /** Loads the settings for this page */
     virtual void load();
 
diff --git a/retroshare-gui/src/gui/settings/NotifyPage.cpp b/retroshare-gui/src/gui/settings/NotifyPage.cpp
index 1c31af679..2c9dbde5b 100755
--- a/retroshare-gui/src/gui/settings/NotifyPage.cpp
+++ b/retroshare-gui/src/gui/settings/NotifyPage.cpp
@@ -37,106 +37,151 @@
 NotifyPage::NotifyPage(QWidget * parent, Qt::WindowFlags flags)
   : ConfigPage(parent, flags)
 {
-  /* Invoke the Qt Designer generated object setup routine */
-  ui.setupUi(this);
+	/* Invoke the Qt Designer generated object setup routine */
+	ui.setupUi(this);
 
-  connect(ui.testFeedButton, SIGNAL(clicked()), this, SLOT(testFeed()));
-  connect(ui.testToasterButton, SIGNAL(clicked()), this, SLOT(testToaster()));
-  connect(ui.pushButtonDisableAll,SIGNAL(toggled(bool)), NotifyQt::getInstance(), SLOT(SetDisableAll(bool)));
-  connect(NotifyQt::getInstance(),SIGNAL(disableAllChanged(bool)), ui.pushButtonDisableAll, SLOT(setChecked(bool)));
-  connect(ui.chatLobbies_CountFollowingText,SIGNAL(toggled(bool)),ui.chatLobbies_TextToNotify,SLOT(setEnabled(bool)));
+	connect(ui.testFeedButton, SIGNAL(clicked()), this, SLOT(testFeed()));
+	connect(ui.testToasterButton, SIGNAL(clicked()), this, SLOT(testToaster()));
+	connect(ui.pushButtonDisableAll,SIGNAL(toggled(bool)), NotifyQt::getInstance(), SLOT(SetDisableAll(bool)));
+	connect(NotifyQt::getInstance(),SIGNAL(disableAllChanged(bool)), ui.pushButtonDisableAll, SLOT(setChecked(bool)));
+	connect(ui.chatLobbies_CountFollowingText,SIGNAL(toggled(bool)),ui.chatLobbies_TextToNotify,SLOT(setEnabled(bool)));
 
-  ui.notify_Blogs->hide();
+	ui.notify_Blogs->hide();
 
-  QFont font = ui.notify_Peers->font(); // use font from existing checkbox
+	QFont font = ui.notify_Peers->font(); // use font from existing checkbox
 
-  /* add feed and Toaster notify */
-  int rowFeed = 0;
-  int rowToaster = 0;
-  int pluginCount = rsPlugins->nbPlugins();
-  for (int i = 0; i < pluginCount; ++i) {
-      RsPlugin *rsPlugin = rsPlugins->plugin(i);
-      if (rsPlugin) {
-          FeedNotify *feedNotify = rsPlugin->qt_feedNotify();
-          if (feedNotify) {
-              QString name;
-              if (feedNotify->hasSetting(name)) {
+	/* add feed and Toaster notify */
+	int rowFeed = 0;
+	int rowToaster = 0;
+	int pluginCount = rsPlugins->nbPlugins();
+	for (int i = 0; i < pluginCount; ++i)
+	{
+		RsPlugin *rsPlugin = rsPlugins->plugin(i);
+		if (rsPlugin) {
+			FeedNotify *feedNotify = rsPlugin->qt_feedNotify();
+			if (feedNotify) {
+				QString name;
+				if (feedNotify->hasSetting(name)) {
 
-                  QCheckBox *enabledCheckBox = new QCheckBox(name, this);
-                  enabledCheckBox->setFont(font);
-                  ui.feedLayout->addWidget(enabledCheckBox, rowFeed++);
+					QCheckBox *enabledCheckBox = new QCheckBox(name, this);
+					enabledCheckBox->setFont(font);
+					ui.feedLayout->addWidget(enabledCheckBox, rowFeed++);
 
-                  mFeedNotifySettingList.push_back(FeedNotifySetting(feedNotify, enabledCheckBox));
-              }
-          }
+					mFeedNotifySettingList.push_back(FeedNotifySetting(feedNotify, enabledCheckBox));
 
-          ToasterNotify *toasterNotify = rsPlugin->qt_toasterNotify();
-          if (toasterNotify) {
-              QString name;
-              if (toasterNotify->hasSetting(name)) {
+                    connect(enabledCheckBox,SIGNAL(toggled(bool)),this,SLOT(updateFeedNotifySettings())) ;
+				}
+			}
 
-                  QCheckBox *enabledCheckBox = new QCheckBox(name, this);
-                  enabledCheckBox->setFont(font);
-                  ui.toasterLayout->addWidget(enabledCheckBox, rowToaster++);
+			ToasterNotify *toasterNotify = rsPlugin->qt_toasterNotify();
+			if (toasterNotify) {
+				QString name;
+				if (toasterNotify->hasSetting(name)) {
 
-                  mToasterNotifySettingList.push_back(ToasterNotifySetting(toasterNotify, enabledCheckBox));
-              }
+					QCheckBox *enabledCheckBox = new QCheckBox(name, this);
+					enabledCheckBox->setFont(font);
+					ui.toasterLayout->addWidget(enabledCheckBox, rowToaster++);
 
-              QMap map;
-              if (toasterNotify->hasSettings(name, map)) {
-                  if (!map.empty()){
-                      QWidget* widget = new QWidget();
-                      QVBoxLayout* vbLayout = new QVBoxLayout(widget);
-                      QLabel *label = new QLabel(name, this);
-                      QFont fontBold = QFont(font);
-                      fontBold.setBold(true);
-                      label->setFont(fontBold);
-                      vbLayout->addWidget(label);
-                      for (QMap::const_iterator it = map.begin(); it != map.end(); ++it){
-                          QCheckBox *enabledCheckBox = new QCheckBox(it.value(), this);
-                          enabledCheckBox->setAccessibleName(it.key());
-                          enabledCheckBox->setFont(font);
-                          vbLayout->addWidget(enabledCheckBox);
-                          mToasterNotifySettingList.push_back(ToasterNotifySetting(toasterNotify, enabledCheckBox));
-                      }
-                      ui.toasterLayout->addWidget(widget, rowToaster++);
-                  }
-              }
-          }
-      }
-  }
+					mToasterNotifySettingList.push_back(ToasterNotifySetting(toasterNotify, enabledCheckBox));
 
-  /* add user notify */
-  const QList &userNotifyList = MainWindow::getInstance()->getUserNotifyList();
-  QList::const_iterator it;
-  rowFeed = 0;
-  mChatLobbyUserNotify = 0;
-  for (it = userNotifyList.begin(); it != userNotifyList.end(); ++it) {
-      UserNotify *userNotify = *it;
+                    connect(enabledCheckBox,SIGNAL(toggled(bool)),this,SLOT(updateToasterNotifySettings())) ;
+				}
 
-      QString name;
-      if (!userNotify->hasSetting(&name, NULL)) {
-          continue;
-      }
+				QMap map;
+				if (toasterNotify->hasSettings(name, map)) {
+					if (!map.empty()){
+						QWidget* widget = new QWidget();
+						QVBoxLayout* vbLayout = new QVBoxLayout(widget);
+						QLabel *label = new QLabel(name, this);
+						QFont fontBold = QFont(font);
+						fontBold.setBold(true);
+						label->setFont(fontBold);
+						vbLayout->addWidget(label);
+						for (QMap::const_iterator it = map.begin(); it != map.end(); ++it){
+							QCheckBox *enabledCheckBox = new QCheckBox(it.value(), this);
+							enabledCheckBox->setAccessibleName(it.key());
+							enabledCheckBox->setFont(font);
+							vbLayout->addWidget(enabledCheckBox);
+							mToasterNotifySettingList.push_back(ToasterNotifySetting(toasterNotify, enabledCheckBox));
 
-      QCheckBox *enabledCheckBox = new QCheckBox(name, this);
-      enabledCheckBox->setFont(font);
-      ui.notifyLayout->addWidget(enabledCheckBox, rowFeed, 0, 0);
-      connect(enabledCheckBox, SIGNAL(toggled(bool)), this, SLOT(notifyToggled()));
+							connect(enabledCheckBox,SIGNAL(toggled(bool)),this,SLOT(updateToasterNotifySettings())) ;
+						}
+						ui.toasterLayout->addWidget(widget, rowToaster++);
+					}
+				}
+			}
+		}
 
-      QCheckBox *combinedCheckBox = new QCheckBox(tr("Combined"), this);
-      combinedCheckBox->setFont(font);
-      ui.notifyLayout->addWidget(combinedCheckBox, rowFeed, 1);
+	}
 
-      QCheckBox *blinkCheckBox = new QCheckBox(tr("Blink"), this);
-      blinkCheckBox->setFont(font);
-      ui.notifyLayout->addWidget(blinkCheckBox, rowFeed++, 2);
+	        /* add user notify */
+	        const QList &userNotifyList = MainWindow::getInstance()->getUserNotifyList();
+	QList::const_iterator it;
+	rowFeed = 0;
+	mChatLobbyUserNotify = 0;
+	for (it = userNotifyList.begin(); it != userNotifyList.end(); ++it) {
+		UserNotify *userNotify = *it;
 
-      mUserNotifySettingList.push_back(UserNotifySetting(userNotify, enabledCheckBox, combinedCheckBox, blinkCheckBox));
+		QString name;
+		if (!userNotify->hasSetting(&name, NULL)) {
+			continue;
+		}
 
-      //To get ChatLobbyUserNotify Settings
-      if (!mChatLobbyUserNotify) mChatLobbyUserNotify = dynamic_cast(*it);
-  }
+		QCheckBox *enabledCheckBox = new QCheckBox(name, this);
+		enabledCheckBox->setFont(font);
+		ui.notifyLayout->addWidget(enabledCheckBox, rowFeed, 0, 0);
+		connect(enabledCheckBox, SIGNAL(toggled(bool)), this, SLOT(notifyToggled()));
+
+		QCheckBox *combinedCheckBox = new QCheckBox(tr("Combined"), this);
+		combinedCheckBox->setFont(font);
+		ui.notifyLayout->addWidget(combinedCheckBox, rowFeed, 1);
+
+		QCheckBox *blinkCheckBox = new QCheckBox(tr("Blink"), this);
+		blinkCheckBox->setFont(font);
+		ui.notifyLayout->addWidget(blinkCheckBox, rowFeed++, 2);
+
+		mUserNotifySettingList.push_back(UserNotifySetting(userNotify, enabledCheckBox, combinedCheckBox, blinkCheckBox));
+
+		connect(enabledCheckBox,SIGNAL(toggled(bool)),this,SLOT(updateUserNotifySettings())) ;
+		connect(blinkCheckBox,SIGNAL(toggled(bool)),this,SLOT(updateUserNotifySettings())) ;
+		connect(combinedCheckBox,SIGNAL(toggled(bool)),this,SLOT(updateUserNotifySettings())) ;
+
+		//To get ChatLobbyUserNotify Settings
+		if (!mChatLobbyUserNotify) mChatLobbyUserNotify = dynamic_cast(*it);
+	}
+
+	connect(ui.popup_Connect,           SIGNAL(toggled(bool)), this, SLOT(updateNotifyFlags())) ;
+	connect(ui.popup_NewMsg,            SIGNAL(toggled(bool)), this, SLOT(updateNotifyFlags())) ;
+	connect(ui.popup_DownloadFinished,  SIGNAL(toggled(bool)), this, SLOT(updateNotifyFlags())) ;
+	connect(ui.popup_PrivateChat,       SIGNAL(toggled(bool)), this, SLOT(updateNotifyFlags())) ;
+	connect(ui.popup_GroupChat,         SIGNAL(toggled(bool)), this, SLOT(updateNotifyFlags())) ;
+	connect(ui.popup_ChatLobby,         SIGNAL(toggled(bool)), this, SLOT(updateNotifyFlags())) ;
+	connect(ui.popup_ConnectAttempt,    SIGNAL(toggled(bool)), this, SLOT(updateNotifyFlags())) ;
+
+	connect(ui.message_ConnectAttempt,  SIGNAL(toggled(bool)), this, SLOT(updateMessageFlags())) ;
+
+	connect(ui.notify_Peers,        SIGNAL(toggled(bool)), this, SLOT(updateNewsFeedFlags()));
+	connect(ui.notify_Channels,     SIGNAL(toggled(bool)), this, SLOT(updateNewsFeedFlags()));
+	connect(ui.notify_Forums,       SIGNAL(toggled(bool)), this, SLOT(updateNewsFeedFlags()));
+	connect(ui.notify_Posted,       SIGNAL(toggled(bool)), this, SLOT(updateNewsFeedFlags()));
+	connect(ui.notify_Messages,     SIGNAL(toggled(bool)), this, SLOT(updateNewsFeedFlags()));
+	connect(ui.notify_Chat,         SIGNAL(toggled(bool)), this, SLOT(updateNewsFeedFlags()));
+	connect(ui.notify_Security,     SIGNAL(toggled(bool)), this, SLOT(updateNewsFeedFlags()));
+	connect(ui.notify_SecurityIp,   SIGNAL(toggled(bool)), this, SLOT(updateNewsFeedFlags()));
+
+    connect(ui.systray_ChatLobby,   SIGNAL(toggled(bool)),this,SLOT(updateSystrayChatLobby()));
+    connect(ui.systray_GroupChat,   SIGNAL(toggled(bool)),this,SLOT(updateSystrayGroupChat()));
+
+    connect(ui.spinBoxToasterXMargin, SIGNAL(valueChanged(int)),this, SLOT(updateToasterMargin())) ;
+    connect(ui.spinBoxToasterYMargin, SIGNAL(valueChanged(int)),this, SLOT(updateToasterMargin())) ;
+
+	connect(ui.comboBoxToasterPosition,  SIGNAL(currentIndexChanged(int)),this, SLOT(updateToasterPosition())) ;
+
+	connect(ui.chatLobbies_CountUnRead,        SIGNAL(toggled(bool)),this, SLOT(updateChatLobbyUserNotify())) ;
+	connect(ui.chatLobbies_CheckNickName,      SIGNAL(toggled(bool)),this, SLOT(updateChatLobbyUserNotify())) ;
+	connect(ui.chatLobbies_CountFollowingText, SIGNAL(toggled(bool)),this, SLOT(updateChatLobbyUserNotify())) ;
+	connect(ui.chatLobbies_TextToNotify,       SIGNAL(textChanged(QString)),this, SLOT(updateChatLobbyUserNotify()));
+	connect(ui.chatLobbies_TextCaseSensitive,  SIGNAL(toggled(bool)),this, SLOT(updateChatLobbyUserNotify())) ;
 }
 
 NotifyPage::~NotifyPage()
@@ -203,64 +248,62 @@ uint NotifyPage::getNotifyFlags()
     return notifyFlags;
 }
 
-/** Saves the changes on this page */
-bool
-NotifyPage::save(QString &/*errmsg*/)
+
+void NotifyPage::updateFeedNotifySettings()
 {
-    /* extract from rsNotify the flags */
-
-    uint messageflags = 0;
-
-    if (ui.message_ConnectAttempt->isChecked())
-        messageflags |= RS_MESSAGE_CONNECT_ATTEMPT;
-
-    /* save feed notify */
-    QList::iterator feedNotifyIt;
-    for (feedNotifyIt = mFeedNotifySettingList.begin(); feedNotifyIt != mFeedNotifySettingList.end(); ++feedNotifyIt) {
-        feedNotifyIt->mFeedNotify->setNotifyEnabled(feedNotifyIt->mEnabledCheckBox->isChecked());
-    }
+	/* save feed notify */
+	QList::iterator feedNotifyIt;
+	for (feedNotifyIt = mFeedNotifySettingList.begin(); feedNotifyIt != mFeedNotifySettingList.end(); ++feedNotifyIt)
+		feedNotifyIt->mFeedNotify->setNotifyEnabled(feedNotifyIt->mEnabledCheckBox->isChecked());
+}
 
+void NotifyPage::updateToasterNotifySettings()
+{
     /* save toaster notify */
     QList::iterator toasterNotifyIt;
     for (toasterNotifyIt = mToasterNotifySettingList.begin(); toasterNotifyIt != mToasterNotifySettingList.end(); ++toasterNotifyIt) {
-        if(toasterNotifyIt->mEnabledCheckBox->accessibleName().isEmpty()){
+        if(toasterNotifyIt->mEnabledCheckBox->accessibleName().isEmpty())
             toasterNotifyIt->mToasterNotify->setNotifyEnabled(toasterNotifyIt->mEnabledCheckBox->isChecked()) ;
-        } else {
+        else
             toasterNotifyIt->mToasterNotify->setNotifyEnabled(toasterNotifyIt->mEnabledCheckBox->accessibleName(), toasterNotifyIt->mEnabledCheckBox->isChecked()) ;
-        }
     }
+}
 
-    /* save user notify */
-    QList::iterator notifyIt;
-    for (notifyIt = mUserNotifySettingList.begin(); notifyIt != mUserNotifySettingList.end(); ++notifyIt) {
-        notifyIt->mUserNotify->setNotifyEnabled(notifyIt->mEnabledCheckBox->isChecked(), notifyIt->mCombinedCheckBox->isChecked(), notifyIt->mBlinkCheckBox->isChecked());
-    }
+void NotifyPage::updateUserNotifySettings()
+{
+	/* save user notify */
+	QList::iterator notifyIt;
+	for (notifyIt = mUserNotifySettingList.begin(); notifyIt != mUserNotifySettingList.end(); ++notifyIt)
+		notifyIt->mUserNotify->setNotifyEnabled(notifyIt->mEnabledCheckBox->isChecked(), notifyIt->mCombinedCheckBox->isChecked(), notifyIt->mBlinkCheckBox->isChecked());
 
-    Settings->setNotifyFlags(getNotifyFlags());
-    Settings->setNewsFeedFlags(getNewsFlags());
-    Settings->setMessageFlags(messageflags);
+	MainWindow::installNotifyIcons();
+}
 
-    Settings->setDisplayTrayChatLobby(ui.systray_ChatLobby->isChecked());
-    Settings->setDisplayTrayGroupChat(ui.systray_GroupChat->isChecked());
-    MainWindow::installGroupChatNotifier();
-    MainWindow::installNotifyIcons();
+void NotifyPage::updateMessageFlags() {  Settings->setMessageFlags( ui.message_ConnectAttempt->isChecked()? RS_MESSAGE_CONNECT_ATTEMPT : 0); }
+void NotifyPage::updateNotifyFlags()  {	 Settings->setNotifyFlags(getNotifyFlags()); }
+void NotifyPage::updateNewsFeedFlags(){  Settings->setNewsFeedFlags(getNewsFlags()); }
 
+void NotifyPage::updateSystrayChatLobby() { Settings->setDisplayTrayChatLobby(ui.systray_ChatLobby->isChecked()); }
+void NotifyPage::updateSystrayGroupChat() { Settings->setDisplayTrayGroupChat(ui.systray_GroupChat->isChecked()); MainWindow::installGroupChatNotifier(); }
+void NotifyPage::updateToasterMargin()    { Settings->setToasterMargin(QPoint(ui.spinBoxToasterXMargin->value(), ui.spinBoxToasterYMargin->value())); }
+
+void NotifyPage::updateToasterPosition()
+{
     int index = ui.comboBoxToasterPosition->currentIndex();
-    if (index != -1) {
+    if (index != -1)
         Settings->setToasterPosition((RshareSettings::enumToasterPosition) ui.comboBoxToasterPosition->itemData(index).toInt());
-    }
+}
 
-    Settings->setToasterMargin(QPoint(ui.spinBoxToasterXMargin->value(), ui.spinBoxToasterYMargin->value()));
+void NotifyPage::updateChatLobbyUserNotify()
+{
+	if(!mChatLobbyUserNotify)
+		return ;
 
-    if (mChatLobbyUserNotify){
-        mChatLobbyUserNotify->setCountUnRead(ui.chatLobbies_CountUnRead->isChecked()) ;
-        mChatLobbyUserNotify->setCheckForNickName(ui.chatLobbies_CheckNickName->isChecked()) ;
-        mChatLobbyUserNotify->setCountSpecificText(ui.chatLobbies_CountFollowingText->isChecked()) ;
-        mChatLobbyUserNotify->setTextToNotify(ui.chatLobbies_TextToNotify->document()->toPlainText());
-        mChatLobbyUserNotify->setTextCaseSensitive(ui.chatLobbies_TextCaseSensitive->isChecked());
-    }
-    load();
-    return true;
+	mChatLobbyUserNotify->setCountUnRead(ui.chatLobbies_CountUnRead->isChecked()) ;
+	mChatLobbyUserNotify->setCheckForNickName(ui.chatLobbies_CheckNickName->isChecked()) ;
+	mChatLobbyUserNotify->setCountSpecificText(ui.chatLobbies_CountFollowingText->isChecked()) ;
+	mChatLobbyUserNotify->setTextToNotify(ui.chatLobbies_TextToNotify->document()->toPlainText());
+	mChatLobbyUserNotify->setTextCaseSensitive(ui.chatLobbies_TextCaseSensitive->isChecked());
 }
 
 /** Loads the settings for this page */
diff --git a/retroshare-gui/src/gui/settings/NotifyPage.h b/retroshare-gui/src/gui/settings/NotifyPage.h
index 900c8efb6..547af2767 100755
--- a/retroshare-gui/src/gui/settings/NotifyPage.h
+++ b/retroshare-gui/src/gui/settings/NotifyPage.h
@@ -76,8 +76,6 @@ public:
     /** Default Destructor */
     ~NotifyPage();
 
-    /** Saves the changes on this page */
-    virtual bool save(QString &errmsg);
     /** Loads the settings for this page */
     virtual void load();
 
@@ -90,6 +88,20 @@ private slots:
 	void testToaster();
 	void testFeed();
 
+	void updateFeedNotifySettings();
+	void updateToasterNotifySettings();
+	void updateUserNotifySettings();
+	void updateMessageFlags() ;
+	void updateNotifyFlags()  ;
+	void updateNewsFeedFlags();
+
+	void updateSystrayChatLobby();
+	void updateSystrayGroupChat();
+	void updateToasterMargin();
+
+	void updateToasterPosition();
+	void updateChatLobbyUserNotify();
+
 private:
 	uint getNewsFlags();
 	uint getNotifyFlags();
diff --git a/retroshare-gui/src/gui/settings/PeoplePage.cpp b/retroshare-gui/src/gui/settings/PeoplePage.cpp
index 66265f4de..8f95b2b2f 100644
--- a/retroshare-gui/src/gui/settings/PeoplePage.cpp
+++ b/retroshare-gui/src/gui/settings/PeoplePage.cpp
@@ -29,28 +29,26 @@ PeoplePage::PeoplePage(QWidget * parent, Qt::WindowFlags flags)
 {
 	ui.setupUi(this);
 	setAttribute(Qt::WA_QuitOnClose, false);
+
+    connect(ui.autoPositiveOpinion_CB,SIGNAL(toggled(bool)),this,SLOT(updateAutoPositiveOpinion())) ;
+    connect(ui.thresholdForPositive_SB,SIGNAL(valueChanged(int)),this,SLOT(updateThresholdForRemotelyPositiveReputation()));
+    connect(ui.thresholdForNegative_SB,SIGNAL(valueChanged(int)),this,SLOT(updateThresholdForRemotelyNegativeReputation()));
+    connect(ui.preventReloadingBannedIdentitiesFor_SB,SIGNAL(valueChanged(int)),this,SLOT(updateRememberDeletedNodes()));
+    connect(ui.deleteBannedIdentitiesAfter_SB,SIGNAL(valueChanged(int)),this,SLOT(updateDeleteBannedNodesThreshold()));
 }
 
+void PeoplePage::updateAutoPositiveOpinion() {  rsReputations->setNodeAutoPositiveOpinionForContacts(ui.autoPositiveOpinion_CB->isChecked()) ; }
+
+void PeoplePage::updateThresholdForRemotelyPositiveReputation() {  rsReputations->setThresholdForRemotelyPositiveReputation(ui.thresholdForPositive_SB->value()); }
+void PeoplePage::updateThresholdForRemotelyNegativeReputation() {  rsReputations->setThresholdForRemotelyNegativeReputation(ui.thresholdForNegative_SB->value()); }
+
+void PeoplePage::updateRememberDeletedNodes()       {    rsReputations->setRememberDeletedNodesThreshold(ui.preventReloadingBannedIdentitiesFor_SB->value()); }
+void PeoplePage::updateDeleteBannedNodesThreshold() {    rsIdentity->setDeleteBannedNodesThreshold(ui.deleteBannedIdentitiesAfter_SB->value());}
+
 PeoplePage::~PeoplePage()
 {
 }
 
-/** Saves the changes on this page */
-bool PeoplePage::save(QString &/*errmsg*/)
-{
-    if(ui.autoPositiveOpinion_CB->isChecked())
-        rsReputations->setNodeAutoPositiveOpinionForContacts(true) ;
-    else
-        rsReputations->setNodeAutoPositiveOpinionForContacts(false) ;
-
-    rsReputations->setThresholdForRemotelyPositiveReputation(ui.thresholdForPositive_SB->value());
-    rsReputations->setThresholdForRemotelyNegativeReputation(ui.thresholdForNegative_SB->value());
-    rsReputations->setRememberDeletedNodesThreshold(ui.preventReloadingBannedIdentitiesFor_SB->value());
-    rsIdentity->setDeleteBannedNodesThreshold(ui.deleteBannedIdentitiesAfter_SB->value());
-
-    return true;
-}
-
 /** Loads the settings for this page */
 void PeoplePage::load()
 {
diff --git a/retroshare-gui/src/gui/settings/PeoplePage.h b/retroshare-gui/src/gui/settings/PeoplePage.h
index 393436f57..b3e14adfa 100644
--- a/retroshare-gui/src/gui/settings/PeoplePage.h
+++ b/retroshare-gui/src/gui/settings/PeoplePage.h
@@ -33,8 +33,6 @@ public:
 	PeoplePage(QWidget * parent = 0, Qt::WindowFlags flags = 0);
 	~PeoplePage();
 
-	/** Saves the changes on this page */
-	virtual bool save(QString &errmsg);
 	/** Loads the settings for this page */
 	virtual void load();
 
@@ -42,6 +40,15 @@ public:
 	virtual QString pageName() const { return tr("People") ; }
 	virtual QString helpText() const { return ""; }
 
+protected slots:
+    void updateAutoPositiveOpinion() ;
+
+    void updateThresholdForRemotelyPositiveReputation();
+    void updateThresholdForRemotelyNegativeReputation();
+
+    void updateRememberDeletedNodes();
+    void updateDeleteBannedNodesThreshold() ;
+
 private:
 	Ui::PeoplePage ui;
 };
diff --git a/retroshare-gui/src/gui/settings/PluginsPage.cpp b/retroshare-gui/src/gui/settings/PluginsPage.cpp
index 39bd39a4a..cdc326ec0 100644
--- a/retroshare-gui/src/gui/settings/PluginsPage.cpp
+++ b/retroshare-gui/src/gui/settings/PluginsPage.cpp
@@ -210,13 +210,6 @@ PluginsPage::~PluginsPage()
 {
 }
 
-/** Saves the changes on this page */
-bool PluginsPage::save(QString &/*errmsg*/)
-{
-	// nothing to save for now.
-    return true;
-}
-
 /** Loads the settings for this page */
 void PluginsPage::load()
 {
diff --git a/retroshare-gui/src/gui/settings/PluginsPage.h b/retroshare-gui/src/gui/settings/PluginsPage.h
index 08354ca68..0d8f72dac 100644
--- a/retroshare-gui/src/gui/settings/PluginsPage.h
+++ b/retroshare-gui/src/gui/settings/PluginsPage.h
@@ -32,8 +32,6 @@ class PluginsPage : public ConfigPage
 		PluginsPage(QWidget * parent = 0, Qt::WindowFlags flags = 0);
 		~PluginsPage();
 
-		/** Saves the changes on this page */
-		virtual bool save(QString &errmsg);
 		/** Loads the settings for this page */
 		virtual void load();
 
diff --git a/retroshare-gui/src/gui/settings/PostedPage.cpp b/retroshare-gui/src/gui/settings/PostedPage.cpp
index 30b18f24d..76b3411b0 100644
--- a/retroshare-gui/src/gui/settings/PostedPage.cpp
+++ b/retroshare-gui/src/gui/settings/PostedPage.cpp
@@ -32,20 +32,13 @@ PostedPage::PostedPage(QWidget * parent, Qt::WindowFlags flags)
 
 	/* Initialize GroupFrameSettingsWidget */
 	ui->groupFrameSettingsWidget->setOpenAllInNewTabText(tr("Open each topic in a new tab"));
+	ui->groupFrameSettingsWidget->setType(GroupFrameSettings::Posted);
 }
 
 PostedPage::~PostedPage()
 {
 }
 
-/** Saves the changes on this page */
-bool PostedPage::save(QString &/*errmsg*/)
-{
-	ui->groupFrameSettingsWidget->saveSettings(GroupFrameSettings::Posted);
-
-	return true;
-}
-
 /** Loads the settings for this page */
 void PostedPage::load()
 {
diff --git a/retroshare-gui/src/gui/settings/PostedPage.h b/retroshare-gui/src/gui/settings/PostedPage.h
index 73a454c5f..bc2cb8aa0 100644
--- a/retroshare-gui/src/gui/settings/PostedPage.h
+++ b/retroshare-gui/src/gui/settings/PostedPage.h
@@ -36,8 +36,6 @@ public:
 	PostedPage(QWidget * parent = 0, Qt::WindowFlags flags = 0);
 	~PostedPage();
 
-	/** Saves the changes on this page */
-	virtual bool save(QString &errmsg);
 	/** Loads the settings for this page */
 	virtual void load();
 
diff --git a/retroshare-gui/src/gui/settings/RelayPage.cpp b/retroshare-gui/src/gui/settings/RelayPage.cpp
index a7cc7e041..258bc05aa 100644
--- a/retroshare-gui/src/gui/settings/RelayPage.cpp
+++ b/retroshare-gui/src/gui/settings/RelayPage.cpp
@@ -51,6 +51,16 @@ RelayPage::RelayPage(QWidget * parent, Qt::WindowFlags flags)
 
 	QObject::connect(ui.enableCheckBox,SIGNAL(stateChanged(int)),this,SLOT(updateEnabled()));
 	QObject::connect(ui.serverCheckBox,SIGNAL(stateChanged(int)),this,SLOT(updateEnabled()));
+
+	QObject::connect(ui.noFriendSpinBox,SIGNAL(valueChanged(int)),this,SLOT(updateTotals()));
+	QObject::connect(ui.bandFriendSpinBox,SIGNAL(valueChanged(int)),this,SLOT(updateTotals()));
+	QObject::connect(ui.noFOFSpinBox,SIGNAL(valueChanged(int)),this,SLOT(updateTotals()));
+	QObject::connect(ui.bandFOFSpinBox,SIGNAL(valueChanged(int)),this,SLOT(updateTotals()));
+	QObject::connect(ui.noGeneralSpinBox,SIGNAL(valueChanged(int)),this,SLOT(updateTotals()));
+	QObject::connect(ui.bandGeneralSpinBox,SIGNAL(valueChanged(int)),this,SLOT(updateTotals()));
+
+	QObject::connect(ui.enableCheckBox,SIGNAL(toggled(bool)),this,SLOT(updateRelayMode()));
+	QObject::connect(ui.serverCheckBox,SIGNAL(toggled(bool)),this,SLOT(updateRelayMode()));
 }
 
 QString RelayPage::helpText() const
@@ -66,10 +76,8 @@ QString RelayPage::helpText() const
 				  is encrypted and authenticated by the two relayed nodes.
  
") ;
 }
 
-	/** Saves the changes on this page */
-bool RelayPage::save(QString &/*errmsg*/)
+void RelayPage::updateTotals()
 {
-
 	int nFriends = ui.noFriendSpinBox->value();
 	int friendBandwidth = ui.bandFriendSpinBox->value();
 
@@ -85,7 +93,12 @@ bool RelayPage::save(QString &/*errmsg*/)
 	rsDht->setRelayAllowance(RSDHT_RELAY_CLASS_FRIENDS, nFriends, 1024 * friendBandwidth);
 	rsDht->setRelayAllowance(RSDHT_RELAY_CLASS_FOF, nFOF, 1024 * fofBandwidth);
 	rsDht->setRelayAllowance(RSDHT_RELAY_CLASS_GENERAL, nGeneral, 1024 * genBandwidth);
+}
 
+/** Saves the changes on this page */
+
+void RelayPage::updateRelayMode()
+{
 	uint32_t relayMode = 0;
 	if (ui.enableCheckBox->isChecked())
 	{
@@ -106,7 +119,6 @@ bool RelayPage::save(QString &/*errmsg*/)
 	}
 
 	rsDht->setRelayMode(relayMode);
-	return true;
 }
 
 	/** Loads the settings for this page */
@@ -182,13 +194,9 @@ void RelayPage::updateRelayOptions()
 	int genBandwidth = ui.bandGeneralSpinBox->value();
 
 	ui.totalFriendLineEdit->setText(QString::number(nFriends * friendBandwidth * 2));
-
 	ui.totalFOFLineEdit->setText(QString::number(nFOF * fofBandwidth * 2));
-
 	ui.totalGeneralLineEdit->setText(QString::number(nGeneral * genBandwidth * 2));
-
 	ui.totalBandwidthLineEdit->setText(QString::number((nFriends * friendBandwidth + nFOF * fofBandwidth + nGeneral * genBandwidth) * 2));
-
 	ui.noTotalLineEdit->setText(QString::number(nFriends + nFOF + nGeneral));
 }
 
diff --git a/retroshare-gui/src/gui/settings/RelayPage.h b/retroshare-gui/src/gui/settings/RelayPage.h
index d88dbd07b..5c8036926 100644
--- a/retroshare-gui/src/gui/settings/RelayPage.h
+++ b/retroshare-gui/src/gui/settings/RelayPage.h
@@ -35,8 +35,6 @@ class RelayPage: public ConfigPage
 		RelayPage(QWidget * parent = 0, Qt::WindowFlags flags = 0);
 		~RelayPage() {}
 
-		/** Saves the changes on this page */
-		virtual bool save(QString &/*errmsg*/);
 		/** Loads the settings for this page */
 		virtual void load();
 
@@ -51,6 +49,8 @@ class RelayPage: public ConfigPage
 		void addServer();
 		void removeServer();
 		void loadServers();
+		void updateTotals();
+		void updateRelayMode();
 
 	private:
 
diff --git a/retroshare-gui/src/gui/settings/ServerPage.cpp b/retroshare-gui/src/gui/settings/ServerPage.cpp
index 8ece6d7cd..c80a56bbe 100755
--- a/retroshare-gui/src/gui/settings/ServerPage.cpp
+++ b/retroshare-gui/src/gui/settings/ServerPage.cpp
@@ -58,11 +58,6 @@ ServerPage::ServerPage(QWidget * parent, Qt::WindowFlags flags)
   /* Invoke the Qt Designer generated object setup routine */
   ui.setupUi(this);
 
-  connect( ui.netModeComboBox, SIGNAL( activated ( int ) ), this, SLOT( toggleUPnP( ) ) );
-  connect( ui.allowIpDeterminationCB, SIGNAL( toggled( bool ) ), this, SLOT( toggleIpDetermination(bool) ) );
-  connect( ui.cleanKnownIPs_PB, SIGNAL( clicked( ) ), this, SLOT( clearKnownAddressList() ) );
-  connect( ui.testIncoming_PB, SIGNAL( clicked( ) ), this, SLOT( updateInProxyIndicator() ) );
-
   manager = NULL ;
 
     ui.filteredIpsTable->setHorizontalHeaderItem(COLUMN_RANGE,new QTableWidgetItem(tr("IP Range"))) ;
@@ -107,11 +102,32 @@ ServerPage::ServerPage(QWidget * parent, Qt::WindowFlags flags)
 
 	ui.hiddenpage_incoming->setVisible(false);
 
+	connect( ui.netModeComboBox, SIGNAL( activated ( int ) ), this, SLOT( toggleUPnP( ) ) );
+	connect( ui.allowIpDeterminationCB, SIGNAL( toggled( bool ) ), this, SLOT( toggleIpDetermination(bool) ) );
+	connect( ui.cleanKnownIPs_PB, SIGNAL( clicked( ) ), this, SLOT( clearKnownAddressList() ) );
+	connect( ui.testIncoming_PB, SIGNAL( clicked( ) ), this, SLOT( updateInProxyIndicator() ) );
+    connect( ui.showDiscStatusBar,SIGNAL(toggled(bool)),this,SLOT(updateShowDiscStatusBar())) ;
+
 #ifdef SERVER_DEBUG
 	std::cerr << "ServerPage::ServerPage() called";
 	std::cerr << std::endl;
 #endif
+
+	connect(ui.netModeComboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(saveAddresses()));
+	connect(ui.discComboBox,   SIGNAL(currentIndexChanged(int)),this,SLOT(saveAddresses()));
+	connect(ui.localAddress,   SIGNAL(textChanged(QString)),this,SLOT(saveAddresses()));
+	connect(ui.extAddress,     SIGNAL(textChanged(QString)),this,SLOT(saveAddresses()));
+	connect(ui.dynDNS,         SIGNAL(textChanged(QString)),this,SLOT(saveAddresses()));
+
+	connect(ui.hiddenpage_proxyAddress_tor, SIGNAL(textChanged(QString)),this,SLOT(saveAddresses()));
+	connect(ui.hiddenpage_proxyPort_tor,    SIGNAL(textChanged(QString)),this,SLOT(saveAddresses()));
+	connect(ui.hiddenpage_proxyAddress_i2p, SIGNAL(textChanged(QString)),this,SLOT(saveAddresses()));
+	connect(ui.hiddenpage_proxyPort_i2p,    SIGNAL(textChanged(QString)),this,SLOT(saveAddresses()));
+
+	connect(ui.totalDownloadRate,SIGNAL(valueChanged(int)),this,SLOT(saveRates()));
+	connect(ui.totalUploadRate,  SIGNAL(valueChanged(int)),this,SLOT(saveRates()));
 }
+
 void ServerPage::checkIpRange(const QString& ipstr)
 {
     QColor color;
@@ -183,22 +199,7 @@ void ServerPage::toggleTunnelConnection(bool b)
         //rsPeers->allowTunnelConnection(b) ;
 }
 
-/** Saves the changes on this page */
-bool
-ServerPage::save(QString &/*errmsg*/)
-{
-    Settings->setStatusBarFlag(STATUSBAR_DISC, ui.showDiscStatusBar->isChecked());
-
-/* save the server address */
-/* save local address */
-/* save the url for DNS access */
-
-/* restart server */
-
-/* save all? */
-   saveAddresses();
- return true;
-}
+void ServerPage::updateShowDiscStatusBar() { Settings->setStatusBarFlag(STATUSBAR_DISC, ui.showDiscStatusBar->isChecked()); }
 
 /** Loads the settings for this page */
 void ServerPage::load()
@@ -815,7 +816,6 @@ void ServerPage::saveAddresses()
 	}
 
 	rsPeers->setDynDNS(ownId, ui.dynDNS->text().toStdString());
-	rsConfig->SetMaxDataRates( ui.totalDownloadRate->value(), ui.totalUploadRate->value() );
 
 	// HANDLE PROXY SERVER.
 	std::string orig_proxyaddr, new_proxyaddr;
@@ -846,6 +846,10 @@ void ServerPage::saveAddresses()
 	load();
 }
 
+void ServerPage::saveRates()
+{
+	rsConfig->SetMaxDataRates( ui.totalDownloadRate->value(), ui.totalUploadRate->value() );
+}
 
 /***********************************************************************************/
 /***********************************************************************************/
diff --git a/retroshare-gui/src/gui/settings/ServerPage.h b/retroshare-gui/src/gui/settings/ServerPage.h
index 4561cd7ca..02685bfc0 100755
--- a/retroshare-gui/src/gui/settings/ServerPage.h
+++ b/retroshare-gui/src/gui/settings/ServerPage.h
@@ -47,8 +47,6 @@ public:
     ServerPage(QWidget * parent = 0, Qt::WindowFlags flags = 0);
     ~ServerPage() {}
 
-    /** Saves the changes on this page */
-    virtual bool save(QString &errmsg);
     /** Loads the settings for this page */
     virtual void load();
 
@@ -81,6 +79,8 @@ private slots:
 
     // server
     void saveAddresses();
+    void saveRates();
+	void updateShowDiscStatusBar() ;
     void toggleUPnP();
     void toggleIpDetermination(bool) ;
     void toggleTunnelConnection(bool) ;
diff --git a/retroshare-gui/src/gui/settings/ServicePermissionsPage.cpp b/retroshare-gui/src/gui/settings/ServicePermissionsPage.cpp
index 5ded8fb80..d608c24af 100644
--- a/retroshare-gui/src/gui/settings/ServicePermissionsPage.cpp
+++ b/retroshare-gui/src/gui/settings/ServicePermissionsPage.cpp
@@ -31,16 +31,18 @@
 ServicePermissionsPage::ServicePermissionsPage(QWidget * parent, Qt::WindowFlags flags) :
     ConfigPage(parent, flags)
 {
-  /* Invoke the Qt Designer generated object setup routine */
-  ui.setupUi(this);
+	/* Invoke the Qt Designer generated object setup routine */
+	ui.setupUi(this);
 
-    connect(ui.cb_hideOffline, SIGNAL(toggled(bool)), ui.frame, SLOT(setHideOffline(bool)));
-    //QObject::connect(ui.tableWidget,SIGNAL(itemChanged(QTableWidgetItem *)),  this, SLOT(tableItemChanged(QTableWidgetItem *)));
+	ui.cb_hideOffline->setChecked(true);
 
-    ui.frame->setHideOffline(ui.cb_hideOffline->isChecked());
+	connect(ui.cb_hideOffline, SIGNAL(toggled(bool)), ui.frame, SLOT(setHideOffline(bool)));
+	//QObject::connect(ui.tableWidget,SIGNAL(itemChanged(QTableWidgetItem *)),  this, SLOT(tableItemChanged(QTableWidgetItem *)));
 
-    // Not implemented?
-    ui.pushButton->hide();
+	ui.frame->setHideOffline(ui.cb_hideOffline->isChecked());
+
+	// Not implemented?
+	ui.pushButton->hide();
 }
 
 QString ServicePermissionsPage::helpText() const
diff --git a/retroshare-gui/src/gui/settings/ServicePermissionsPage.h b/retroshare-gui/src/gui/settings/ServicePermissionsPage.h
index abc54c9b0..b8559bbef 100644
--- a/retroshare-gui/src/gui/settings/ServicePermissionsPage.h
+++ b/retroshare-gui/src/gui/settings/ServicePermissionsPage.h
@@ -35,8 +35,6 @@ public:
     ServicePermissionsPage(QWidget * parent = 0, Qt::WindowFlags flags = 0);
     ~ServicePermissionsPage() {}
 
-    /** Saves the changes on this page */
-    virtual bool save(QString &/*errmsg*/) { return true ;}
     /** Loads the settings for this page */
     virtual void load() {}
 
diff --git a/retroshare-gui/src/gui/settings/SoundPage.cpp b/retroshare-gui/src/gui/settings/SoundPage.cpp
index ef93c7679..8b3f79a39 100644
--- a/retroshare-gui/src/gui/settings/SoundPage.cpp
+++ b/retroshare-gui/src/gui/settings/SoundPage.cpp
@@ -46,6 +46,7 @@ SoundPage::SoundPage(QWidget * parent, Qt::WindowFlags flags)
 	connect(ui.defaultButton, SIGNAL(clicked()), this, SLOT(defaultButtonClicked()));
 	connect(ui.browseButton, SIGNAL(clicked()), this, SLOT(browseButtonClicked()));
 	connect(ui.playButton, SIGNAL(clicked()), this, SLOT(playButtonClicked()));
+	connect(ui.eventTreeWidget, SIGNAL(itemChanged(QTreeWidgetItem*, int)), this, SLOT(updateSounds()));
 
 	ui.eventTreeWidget->setColumnCount(COLUMN_COUNT);
 
@@ -100,7 +101,7 @@ QTreeWidgetItem *SoundPage::addItem(QTreeWidgetItem *groupItem, const QString &n
 }
 
 /** Saves the changes on this page */
-bool SoundPage::save(QString &/*errmsg*/)
+void SoundPage::updateSounds()
 {
 	QTreeWidgetItemIterator itemIterator(ui.eventTreeWidget);
 	QTreeWidgetItem *item = NULL;
@@ -113,8 +114,6 @@ bool SoundPage::save(QString &/*errmsg*/)
 			SoundManager::setEventFilename(event, item->text(COLUMN_FILENAME));
 		}
 	}
-
-	return true;
 }
 
 /** Loads the settings for this page */
diff --git a/retroshare-gui/src/gui/settings/SoundPage.h b/retroshare-gui/src/gui/settings/SoundPage.h
index 831233784..989fcc1a2 100644
--- a/retroshare-gui/src/gui/settings/SoundPage.h
+++ b/retroshare-gui/src/gui/settings/SoundPage.h
@@ -37,8 +37,6 @@ public:
 	/** Default Destructor */
 	~SoundPage();
 
-	/** Saves the changes on this page */
-	virtual bool save(QString &errmsg);
 	/** Loads the settings for this page */
 	virtual void load();
 
@@ -52,6 +50,7 @@ private slots:
 	void defaultButtonClicked();
 	void browseButtonClicked();
 	void playButtonClicked();
+	void updateSounds();
 
 private:
 	QTreeWidgetItem *addGroup(const QString &name);
diff --git a/retroshare-gui/src/gui/settings/TransferPage.h b/retroshare-gui/src/gui/settings/TransferPage.h
index 75cab1b4c..eca52ace5 100644
--- a/retroshare-gui/src/gui/settings/TransferPage.h
+++ b/retroshare-gui/src/gui/settings/TransferPage.h
@@ -35,8 +35,6 @@ class TransferPage: public ConfigPage
 		TransferPage(QWidget * parent = 0, Qt::WindowFlags flags = 0);
 		~TransferPage() {}
 
-		/** Saves the changes on this page */
-		virtual bool save(QString &/*errmsg*/) { return true ; }
 		/** Loads the settings for this page */
 		virtual void load() {}
 
diff --git a/retroshare-gui/src/gui/settings/WebuiPage.cpp b/retroshare-gui/src/gui/settings/WebuiPage.cpp
index f8923a174..4afad5968 100644
--- a/retroshare-gui/src/gui/settings/WebuiPage.cpp
+++ b/retroshare-gui/src/gui/settings/WebuiPage.cpp
@@ -33,7 +33,7 @@ WebuiPage::~WebuiPage()
 
 }
 
-bool WebuiPage::save(QString &errmsg)
+bool WebuiPage::updateParams(QString &errmsg)
 {
     std::cerr << "WebuiPage::save()" << std::endl;
     bool ok = true;
@@ -148,12 +148,15 @@ void WebuiPage::onEnableCBClicked(bool checked)
         ui.params_GB->setEnabled(false);
         ui.applyStartBrowser_PB->setEnabled(false);
     }
+
+    QString S;
+    updateParams(S);
 }
 
 void WebuiPage::onApplyClicked()
 {
     QString errmsg;
-    bool ok = save(errmsg);
+    bool ok = updateParams(errmsg);
     if(!ok)
     {
         QMessageBox::warning(0, tr("failed to start Webinterface"), "Failed to start the webinterface.");
diff --git a/retroshare-gui/src/gui/settings/WebuiPage.h b/retroshare-gui/src/gui/settings/WebuiPage.h
index 3ff6a45a9..c7e167ff8 100644
--- a/retroshare-gui/src/gui/settings/WebuiPage.h
+++ b/retroshare-gui/src/gui/settings/WebuiPage.h
@@ -20,8 +20,6 @@ public:
     /** Default Destructor */
   ~WebuiPage();
 
-  /** Saves the changes on this page */
-  virtual bool save(QString &errmsg);
   /** Loads the settings for this page */
   virtual void load();
 
@@ -47,6 +45,8 @@ private:
   /** Qt Designer generated object */
   Ui::WebuiPage ui;
 
+  bool updateParams(QString &errmsg);
+
   static resource_api::ApiServer* apiServer;
   static resource_api::ApiServerMHD* apiServerMHD;
  #ifdef LIBRESAPI_LOCAL_SERVER
diff --git a/retroshare-gui/src/gui/settings/rsettingswin.cpp b/retroshare-gui/src/gui/settings/rsettingswin.cpp
index 50052eaa1..1b88cbb53 100644
--- a/retroshare-gui/src/gui/settings/rsettingswin.cpp
+++ b/retroshare-gui/src/gui/settings/rsettingswin.cpp
@@ -141,7 +141,7 @@ SettingsPage::initStackedWidget()
     ui.stackedWidget->setCurrentIndex(-1);
     ui.stackedWidget->removeWidget(ui.stackedWidget->widget(0));
 
-    addPage(new GeneralPage(0));
+    addPage(new GeneralPage());
     addPage(new ServerPage());
     addPage(new TransferPage());
     addPage(new RelayPage() );
@@ -211,39 +211,11 @@ SettingsPage::setNewPage(int page)
 }
 
 /** Saves changes made to settings. */
-void
-SettingsPage::saveChanges()
+void SettingsPage::notifySettingsChanged()
 {
-	QString errmsg;
-
-	/* Call each config page's save() method to save its data */
-	int i, count = ui.stackedWidget->count();
-	for (i = 0; i < count; i++)
-	{
-		ConfigPage *page = dynamic_cast(ui.stackedWidget->widget(i));
-		if (page && page->wasLoaded()) {
-			if (!page->save(errmsg))
-			{
-				/* Display the offending page */
-				ui.stackedWidget->setCurrentWidget(page);
-
-				/* Show the user what went wrong */
-				QMessageBox::warning(this,
-				tr("Error Saving Configuration on page")+" "+QString::number(i), errmsg,
-				QMessageBox::Ok, QMessageBox::NoButton);
-
-				/* Don't process the rest of the pages */
-				return;
-			}
-		}
-	}
-
 	/* call to RsIface save function.... */
 	//rsicontrol -> ConfigSave();
 
-	if (NotifyQt::getInstance()) {
+	if (NotifyQt::getInstance())
 		NotifyQt::getInstance()->notifySettingsChanged();
-	}
-
-    close();
 }
diff --git a/retroshare-gui/src/gui/settings/rsettingswin.h b/retroshare-gui/src/gui/settings/rsettingswin.h
index 51371f8f7..eff14f31b 100755
--- a/retroshare-gui/src/gui/settings/rsettingswin.h
+++ b/retroshare-gui/src/gui/settings/rsettingswin.h
@@ -58,8 +58,10 @@ public slots:
 	void setNewPage(int page);
 
 private slots:
-	/** Called when user clicks "Save Settings" */
-	void saveChanges();
+	void notifySettingsChanged();
+
+	// Called when user clicks "Save Settings"
+	//void saveChanges();
 	//void dialogFinished(int result);
 
 private:
@@ -67,7 +69,6 @@ private:
 
 private:
 	FloatingHelpBrowser *mHelpBrowser;
-	//static RSettingsWin *_instance;
 	static int lastPage;
 
 	/* UI - from Designer */
diff --git a/retroshare-gui/src/retroshare-gui/configpage.h b/retroshare-gui/src/retroshare-gui/configpage.h
index 1299f2b3f..ecb292740 100644
--- a/retroshare-gui/src/retroshare-gui/configpage.h
+++ b/retroshare-gui/src/retroshare-gui/configpage.h
@@ -23,6 +23,7 @@
 #ifndef _CONFIGPAGE_H
 #define _CONFIGPAGE_H
 
+#include 
 #include 
 
 class ConfigPage : public QWidget
@@ -37,8 +38,6 @@ class ConfigPage : public QWidget
 		/** Pure virtual method. Subclassed pages save their config settings here
 		 * and return true if everything was saved successfully. */
 
-		virtual bool save(QString &errmsg) = 0;
-
 		bool wasLoaded() { return loaded ; }
 
 		// Icon to be used to display the config page.
@@ -53,6 +52,8 @@ class ConfigPage : public QWidget
 		//
 		virtual QString helpText() const = 0;
 
+private:
+        virtual bool save(QString &errmsg) { std::cerr << "(EE) save() shoud not be called!" << std::endl; return true;}
 	protected:
 		virtual void showEvent(QShowEvent * /*event*/)
 		{