diff --git a/src/sbbs3/ctrl/MainFormUnit.cpp b/src/sbbs3/ctrl/MainFormUnit.cpp
index cd3c6acf4eaf5f925aa2cac71bcbd6a65392728f..78911f3758969d3acb31706953c2ba01a7e35ccd 100644
--- a/src/sbbs3/ctrl/MainFormUnit.cpp
+++ b/src/sbbs3/ctrl/MainFormUnit.cpp
@@ -69,6 +69,7 @@
 #include "ConfigWizardUnit.h"
 
 #include "sbbs.h"           // unixtodstr()
+#include "sbbs_ini.h"		// sbbs_read_ini()
 #include "userdat.h"		// lastuser()
 
 //---------------------------------------------------------------------------
@@ -84,7 +85,7 @@ TMainForm *MainForm;
 
 int     threads=1;
 
-static void thread_up(BOOL up)
+static void thread_up(BOOL up, BOOL setuid)
 {
 	char str[128];
 	static HANDLE mutex;
@@ -635,6 +636,7 @@ __fastcall TMainForm::TMainForm(TComponent* Owner)
     mail_startup.socket_open=socket_open;
     mail_startup.max_delivery_attempts=50;
     mail_startup.rescan_frequency=3600;  /* 60 minutes */
+    mail_startup.lines_per_yield=100;
 
     memset(&ftp_startup,0,sizeof(ftp_startup));
     ftp_startup.size=sizeof(ftp_startup);
@@ -1448,6 +1450,14 @@ void __fastcall TMainForm::StartupTimerTick(TObject *Sender)
     	mail_startup.rescan_frequency
             =Registry->ReadInteger("MailRescanFrequency");
 
+    if(Registry->ValueExists("MailLinesPerYield"))
+    	mail_startup.lines_per_yield
+            =Registry->ReadInteger("MailLinesPerYield");
+
+    if(Registry->ValueExists("MailMaxRecipients"))
+    	mail_startup.max_recipients
+            =Registry->ReadInteger("MailMaxRecipients");
+
     if(Registry->ValueExists("MailSMTPPort"))
     	mail_startup.smtp_port=Registry->ReadInteger("MailSMTPPort");
 
@@ -1465,11 +1475,17 @@ void __fastcall TMainForm::StartupTimerTick(TObject *Sender)
         SAFECOPY(mail_startup.default_user
             ,Registry->ReadString("MailDefaultUser").c_str());
 
-    if(Registry->ValueExists("MailDNSBlacklistFlag"))
-        SAFECOPY(mail_startup.dnsbl_flag
-            ,Registry->ReadString("MailDNSBlacklistFlag").c_str());
+    if(Registry->ValueExists("MailDNSBlacklistSubject"))
+        SAFECOPY(mail_startup.dnsbl_tag
+            ,Registry->ReadString("MailDNSBlacklistSubject").c_str());
+    else
+		SAFECOPY(mail_startup.dnsbl_tag,"SPAM");
+
+    if(Registry->ValueExists("MailDNSBlacklistHeader"))
+        SAFECOPY(mail_startup.dnsbl_hdr
+            ,Registry->ReadString("MailDNSBlacklistHeader").c_str());
     else
-		SAFECOPY(mail_startup.dnsbl_flag,"SPAM");
+		SAFECOPY(mail_startup.dnsbl_hdr,"X-DNSBL");
 
     if(Registry->ValueExists("MailDNSServer"))
         SAFECOPY(mail_startup.dns_server
@@ -1830,13 +1846,18 @@ void __fastcall TMainForm::SaveSettings(TObject* Sender)
         ,mail_startup.max_delivery_attempts);
     Registry->WriteInteger("MailRescanFrequency"
         ,mail_startup.rescan_frequency);
+    Registry->WriteInteger("MailMaxRecipients"
+        ,mail_startup.max_recipients);
+    Registry->WriteInteger("MailLinesPerYield"
+        ,mail_startup.lines_per_yield);
 
     Registry->WriteInteger("MailSMTPPort",mail_startup.smtp_port);
     Registry->WriteInteger("MailPOP3Port",mail_startup.pop3_port);
 
     Registry->WriteString("MailDefaultUser",mail_startup.default_user);
-	Registry->WriteString("MailDNSBlacklistFlag",mail_startup.dnsbl_flag);
-    
+	Registry->WriteString("MailDNSBlacklistHeader",mail_startup.dnsbl_hdr);
+	Registry->WriteString("MailDNSBlacklistSubject",mail_startup.dnsbl_tag);
+
     Registry->WriteString("MailRelayServer",mail_startup.relay_server);
     Registry->WriteInteger("MailRelayPort",mail_startup.relay_port);
     Registry->WriteString("MailDNSServer",mail_startup.dns_server);
@@ -1888,6 +1909,424 @@ void __fastcall TMainForm::SaveSettings(TObject* Sender)
     Registry->CloseKey();
     delete Registry;
 
+}
+
+//---------------------------------------------------------------------------
+void __fastcall TMainForm::ImportSettings(TObject* Sender)
+{
+    // Read Registry keys
+	TMemIniFile* IniFile=new TMemIniFile("sbbs.ini");
+
+    const char* section = "sbbsctrl";
+
+   	TopPanel->Height
+    	=IniFile->ReadInteger(section,"TopPanelHeight"
+    		,TopPanel->Height);
+   	UpperLeftPageControl->Width
+       	=IniFile->ReadInteger(section,"UpperLeftPageControlWidth"
+        	,UpperLeftPageControl->Width);
+   	LowerLeftPageControl->Width
+       	=IniFile->ReadInteger(section,"LowerLeftPageControlWidth"
+        	,LowerLeftPageControl->Width);
+    UndockableForms=IniFile->ReadBool(section,"UndockableForms"
+    	,UndockableForms);
+#if 0
+    if(UndockableForms) {
+        TelnetFormFloating=IniFile->ReadBool(section,"TelnetFormFloating",false);
+        EventsFormFloating=IniFile->ReadBool(section,"EventsFormFloating",false);
+        ServicesFormFloating=IniFile->ReadBool(section,"ServicesFormFloating",false);
+        NodeFormFloating=IniFile->ReadBool(section,"NodeFormFloating",false);
+        StatsFormFloating=IniFile->ReadBool(section,"StatsFormFloating",false);
+        ClientFormFloating=IniFile->ReadBool(section,"ClientFormFloating",false);
+        MailFormFloating=IniFile->ReadBool(section,"MailFormFloating",false);
+        FtpFormFloating=IniFile->ReadBool(section,"FtpFormFloating",false);
+    }
+#endif
+
+#if 0
+  	TelnetFormPage=IniFile->ReadInteger(section,"TelnetFormPage",TelnetFormPage);
+  	EventsFormPage=IniFile->ReadInteger(section,"EventsFormPage",EventsFormPage);
+   	ServicesFormPage=IniFile->ReadInteger(section,"ServicesFormPage",ServicesFormPage);
+   	NodeFormPage=IniFile->ReadInteger(section,"NodeFormPage",NodeFormPage);
+   	StatsFormPage=IniFile->ReadInteger(section,"StatsFormPage",StatsFormPage);
+  	ClientFormPage=IniFile->ReadInteger(section,"ClientFormPage",ClientFormPage);
+   	MailFormPage=IniFile->ReadInteger(section,"MailFormPage",MailFormPage);
+   	FtpFormPage=IniFile->ReadInteger(section,"FtpFormPage",FtpFormPage);
+
+#endif
+    
+#if 0
+    TelnetForm->Log->Color=ReadColor(IniFile,"TelnetLog");
+    ReadFont("TelnetLog",TelnetForm->Log->Font);
+    EventsForm->Log->Color=ReadColor(IniFile,"EventsLog");
+    ReadFont("EventsLog",EventsForm->Log->Font);
+    ServicesForm->Log->Color=ReadColor(IniFile,"ServicesLog");
+    ReadFont("ServicesLog",ServicesForm->Log->Font);
+    MailForm->Log->Color=ReadColor(IniFile,"MailLog");
+    ReadFont("MailLog",MailForm->Log->Font);
+    FtpForm->Log->Color=ReadColor(IniFile,"FtpLog");
+    ReadFont("FtpLog",FtpForm->Log->Font);
+    NodeForm->ListBox->Color=ReadColor(IniFile,"NodeList");
+    ReadFont("NodeList",NodeForm->ListBox->Font);
+    ClientForm->ListView->Color=ReadColor(IniFile,"ClientList");
+    ReadFont("ClientList",ClientForm->ListView->Font);
+#endif
+
+   	TelnetForm->Top=IniFile->ReadInteger(section,"TelnetFormTop"
+    	,TelnetForm->Top);
+   	TelnetForm->Left=IniFile->ReadInteger(section,"TelnetFormLeft"
+    	,TelnetForm->Left);
+   	TelnetForm->Width=IniFile->ReadInteger(section,"TelnetFormWidth"
+    	,TelnetForm->Width);
+   	TelnetForm->Height=IniFile->ReadInteger(section,"TelnetFormHeight"
+    	,TelnetForm->Height);
+
+   	EventsForm->Top=IniFile->ReadInteger(section,"EventsFormTop"
+    	,EventsForm->Top);
+   	EventsForm->Left=IniFile->ReadInteger(section,"EventsFormLeft"
+    	,EventsForm->Left);
+   	EventsForm->Width=IniFile->ReadInteger(section,"EventsFormWidth"
+    	,EventsForm->Width);
+   	EventsForm->Height=IniFile->ReadInteger(section,"EventsFormHeight"
+    	,EventsForm->Height);
+
+   	ServicesForm->Top=IniFile->ReadInteger(section,"ServicesFormTop"
+    	,ServicesForm->Top);
+   	ServicesForm->Left=IniFile->ReadInteger(section,"ServicesFormLeft"
+    	,ServicesForm->Left);
+   	ServicesForm->Width=IniFile->ReadInteger(section,"ServicesFormWidth"
+    	,ServicesForm->Width);
+   	ServicesForm->Height=IniFile->ReadInteger(section,"ServicesFormHeight"
+    	,ServicesForm->Height);
+
+   	FtpForm->Top=IniFile->ReadInteger(section,"FtpFormTop"
+    	,FtpForm->Top);
+   	FtpForm->Left=IniFile->ReadInteger(section,"FtpFormLeft"
+    	,FtpForm->Left);
+   	FtpForm->Width=IniFile->ReadInteger(section,"FtpFormWidth"
+    	,FtpForm->Width);
+   	FtpForm->Height=IniFile->ReadInteger(section,"FtpFormHeight"
+    	,FtpForm->Height);
+
+   	MailForm->Top=IniFile->ReadInteger(section,"MailFormTop"
+    	,MailForm->Top);
+   	MailForm->Left=IniFile->ReadInteger(section,"MailFormLeft"
+    	,MailForm->Left);
+   	MailForm->Width=IniFile->ReadInteger(section,"MailFormWidth"
+    	,MailForm->Width);
+   	MailForm->Height=IniFile->ReadInteger(section,"MailFormHeight"
+    	,MailForm->Height);
+
+   	NodeForm->Top=IniFile->ReadInteger(section,"NodeFormTop"
+    	,NodeForm->Top);
+   	NodeForm->Left=IniFile->ReadInteger(section,"NodeFormLeft"
+    	,NodeForm->Left);
+   	NodeForm->Width=IniFile->ReadInteger(section,"NodeFormWidth"
+    	,NodeForm->Width);
+   	NodeForm->Height=IniFile->ReadInteger(section,"NodeFormHeight"
+    	,NodeForm->Height);
+
+   	StatsForm->Top=IniFile->ReadInteger(section,"StatsFormTop"
+    	,StatsForm->Top);
+   	StatsForm->Left=IniFile->ReadInteger(section,"StatsFormLeft"
+    	,StatsForm->Left);
+   	StatsForm->Width=IniFile->ReadInteger(section,"StatsFormWidth"
+    	,StatsForm->Width);
+   	StatsForm->Height=IniFile->ReadInteger(section,"StatsFormHeight"
+    	,StatsForm->Height);
+
+   	ClientForm->Top=IniFile->ReadInteger(section,"ClientFormTop"
+    	,ClientForm->Top);
+   	ClientForm->Left=IniFile->ReadInteger(section,"ClientFormLeft"
+    	,ClientForm->Left);
+   	ClientForm->Width=IniFile->ReadInteger(section,"ClientFormWidth"
+    	,ClientForm->Width);
+   	ClientForm->Height=IniFile->ReadInteger(section,"ClientFormHeight"
+    	,ClientForm->Height);
+
+    for(int i=0;i<ClientForm->ListView->Columns->Count;i++) {
+        char str[128];
+        sprintf(str,"ClientListColumn%dWidth",i);
+        if(IniFile->ValueExists(section,str))
+            ClientForm->ListView->Columns->Items[i]->Width
+                =IniFile->ReadInteger(section,str,0);
+    }
+
+   	Toolbar->Visible=IniFile->ReadBool(section,"ToolbarVisible"
+    	,Toolbar->Visible);
+    ViewToolbarMenuItem->Checked=Toolbar->Visible;
+    ViewStatusBarMenuItem->Checked=StatusBar->Visible;
+
+   	LoginCommand=IniFile->ReadString(section,"LoginCommand"
+    	,LoginCommand);
+   	ConfigCommand=IniFile->ReadString(section,"ConfigCommand"
+    	,ConfigCommand);
+   	Password=IniFile->ReadString(section,"Password"
+    	,Password);
+   	MinimizeToSysTray=IniFile->ReadBool(section,"MinimizeToSysTray"
+    	,MinimizeToSysTray);
+   	NodeDisplayInterval=IniFile->ReadInteger(section,"NodeDisplayInterval"
+    	,NodeDisplayInterval);
+   	ClientDisplayInterval=IniFile->ReadInteger(section,"ClientDisplayInterval"
+    	,ClientDisplayInterval);
+
+   	MailLogFile=IniFile->ReadInteger(section,"MailLogFile",true);
+   	FtpLogFile=IniFile->ReadInteger(section,"FtpLogFile",true);
+
+    delete IniFile;
+
+    FILE* fp;
+
+    if((fp=fopen("sbbs.ini","r"))==NULL)
+    	return;
+
+    sbbs_read_ini(fp
+    	,(BOOL*)&SysAutoStart   		,&bbs_startup
+    	,(BOOL*)&FtpAutoStart 			,&ftp_startup
+    	,(BOOL*)&MailAutoStart 	    	,&mail_startup
+    	,(BOOL*)&ServicesAutoStart     	,&services_startup
+        );
+    fclose(fp);
+}
+//---------------------------------------------------------------------------
+void __fastcall TMainForm::ExportSettings(TObject* Sender)
+{
+	char str[128];
+
+	StatusBar->Panels->Items[4]->Text="Exporting Settings...";
+
+    NodeForm->Timer->Interval=NodeDisplayInterval*1000;
+    ClientForm->Timer->Interval=ClientDisplayInterval*1000;
+
+    // Write Registry keys
+	TMemIniFile* IniFile=new TMemIniFile("sbbs.ini");
+
+    const char* section = "SBBSCTRL::Settings";
+
+    IniFile->WriteString(section,"LoginCommand",LoginCommand);
+    IniFile->WriteString(section,"ConfigCommand",ConfigCommand);
+    IniFile->WriteString(section,"Password",Password);
+    IniFile->WriteBool(section,"MinimizeToSysTray",MinimizeToSysTray);
+    IniFile->WriteBool(section,"UndockableForms",UndockableForms);
+
+    section = "SBBSCTRL::MainForm";
+    IniFile->WriteInteger(section,"Top",Top);
+    IniFile->WriteInteger(section,"Left",Left);
+    IniFile->WriteInteger(section,"Height",Height);
+    IniFile->WriteInteger(section,"Width",Width);
+
+    IniFile->WriteInteger(section,"TopPanelHeight",TopPanel->Height);
+ 	IniFile->WriteInteger(section,"UpperLeftPageControlWidth"
+    	,UpperLeftPageControl->Width);
+    IniFile->WriteInteger(section,"LowerLeftPageControlWidth"
+    	,LowerLeftPageControl->Width);
+    IniFile->WriteBool(section,"ToolBarVisible",Toolbar->Visible);
+    IniFile->WriteBool(section,"StatusBarVisible",StatusBar->Visible);
+
+    section = "SBBSCTRL::NodeForm";
+    IniFile->WriteInteger(section,"Top",NodeForm->Top);
+    IniFile->WriteInteger(section,"Left",NodeForm->Left);
+    IniFile->WriteInteger(section,"Height",NodeForm->Height);
+    IniFile->WriteInteger(section,"Width",NodeForm->Width);
+    IniFile->WriteInteger(section,"Page"
+    	,PageNum((TPageControl*)NodeForm->HostDockSite));
+    IniFile->WriteBool(section,"Floating",NodeForm->Floating);
+    IniFile->WriteInteger(section,"DisplayInterval",NodeDisplayInterval);
+
+    section = "SBBSCTRL::StatsForm";
+    IniFile->WriteInteger(section,"Top",StatsForm->Top);
+    IniFile->WriteInteger(section,"Left",StatsForm->Left);
+    IniFile->WriteInteger(section,"Height",StatsForm->Height);
+    IniFile->WriteInteger(section,"Width",StatsForm->Width);
+    IniFile->WriteInteger(section,"Page"
+    	,PageNum((TPageControl*)StatsForm->HostDockSite));
+    IniFile->WriteBool(section,"Floating",StatsForm->Floating);
+
+    section = "SBBSCTRL::ClientForm";
+    IniFile->WriteInteger(section,"Top",ClientForm->Top);
+    IniFile->WriteInteger(section,"Left",ClientForm->Left);
+    IniFile->WriteInteger(section,"Height",ClientForm->Height);
+    IniFile->WriteInteger(section,"Width",ClientForm->Width);
+    IniFile->WriteInteger(section,"Page"
+    	,PageNum((TPageControl*)ClientForm->HostDockSite));
+    IniFile->WriteBool(section,"Floating",ClientForm->Floating);
+    IniFile->WriteInteger(section,"DisplayInterval",ClientDisplayInterval);
+
+    for(int i=0;i<ClientForm->ListView->Columns->Count;i++) {
+        char str[128];
+        sprintf(str,"Column%dWidth",i);
+        IniFile->WriteInteger(section,str
+            ,ClientForm->ListView->Columns->Items[i]->Width);
+    }
+
+    section = "SBBSCTRL::TelnetForm";
+    IniFile->WriteInteger(section,"Top",TelnetForm->Top);
+    IniFile->WriteInteger(section,"Left",TelnetForm->Left);
+    IniFile->WriteInteger(section,"Height",TelnetForm->Height);
+    IniFile->WriteInteger(section,"Width",TelnetForm->Width);
+    IniFile->WriteInteger(section,"Page"
+	    ,PageNum((TPageControl*)TelnetForm->HostDockSite));
+    IniFile->WriteBool(section,"Floating",TelnetForm->Floating);
+
+    section = "SBBSCTRL::EventForm";
+    IniFile->WriteInteger(section,"Top",EventsForm->Top);
+    IniFile->WriteInteger(section,"Left",EventsForm->Left);
+    IniFile->WriteInteger(section,"Height",EventsForm->Height);
+    IniFile->WriteInteger(section,"Width",EventsForm->Width);
+    IniFile->WriteInteger(section,"Page"
+	    ,PageNum((TPageControl*)EventsForm->HostDockSite));
+    IniFile->WriteBool(section,"Floating",EventsForm->Floating);
+
+    section = "SBBSCTRL::ServicesForm";
+    IniFile->WriteInteger(section,"Top",ServicesForm->Top);
+    IniFile->WriteInteger(section,"Left",ServicesForm->Left);
+    IniFile->WriteInteger(section,"Height",ServicesForm->Height);
+    IniFile->WriteInteger(section,"Width",ServicesForm->Width);
+    IniFile->WriteInteger(section,"Page"
+	    ,PageNum((TPageControl*)ServicesForm->HostDockSite));
+    IniFile->WriteBool(section,"Floating",ServicesForm->Floating);
+
+    section = "SBBSCTRL::FtpForm";
+    IniFile->WriteInteger(section,"Top",FtpForm->Top);
+    IniFile->WriteInteger(section,"Left",FtpForm->Left);
+    IniFile->WriteInteger(section,"Height",FtpForm->Height);
+    IniFile->WriteInteger(section,"Width",FtpForm->Width);
+    IniFile->WriteInteger(section,"Page"
+    	,PageNum((TPageControl*)FtpForm->HostDockSite));
+    IniFile->WriteBool(section,"Floating",FtpForm->Floating);
+
+    section = "SBBSCTRL::MailForm";
+    IniFile->WriteInteger(section,"Top",MailForm->Top);
+    IniFile->WriteInteger(section,"Left",MailForm->Left);
+    IniFile->WriteInteger(section,"Height",MailForm->Height);
+    IniFile->WriteInteger(section,"Width",MailForm->Width);
+    IniFile->WriteInteger(section,"Page"
+    	,PageNum((TPageControl*)MailForm->HostDockSite));
+    IniFile->WriteBool(section,"Floating",MailForm->Floating);
+
+    section = "SBBSCTRL::SpyTerminal";
+	IniFile->WriteInteger(section, "Width"
+                            ,SpyTerminalWidth);
+	IniFile->WriteInteger(section, "Height"
+                            ,SpyTerminalHeight);
+   	IniFile->WriteString(section,  "FontName"
+                            ,SpyTerminalFont->Name);
+	IniFile->WriteInteger(section, "FontSize"
+                            ,SpyTerminalFont->Size);
+	IniFile->WriteBool(section,    "KeyboardActive"
+                            ,SpyTerminalKeyboardActive);
+
+#if 0
+    WriteColor(Registry,"TelnetLog",TelnetForm->Log->Color);
+    WriteFont("TelnetLog",TelnetForm->Log->Font);
+    WriteColor(Registry,"EventsLog",EventsForm->Log->Color);
+    WriteFont("EventsLog",EventsForm->Log->Font);
+    WriteColor(Registry,"ServicesLog",ServicesForm->Log->Color);
+    WriteFont("ServicesLog",ServicesForm->Log->Font);
+    WriteColor(Registry,"MailLog",MailForm->Log->Color);
+    WriteFont("MailLog",MailForm->Log->Font);
+    WriteColor(Registry,"FtpLog",FtpForm->Log->Color);
+    WriteFont("FtpLog",FtpForm->Log->Font);
+    WriteColor(Registry,"NodeList",NodeForm->ListBox->Color);
+    WriteFont("NodeList",NodeForm->ListBox->Font);
+    WriteColor(Registry,"ClientList",ClientForm->ListView->Color);
+    WriteFont("ClientList",ClientForm->ListView->Font);
+#endif
+
+	/***********************************************************************/
+    section = "Global";
+    IniFile->WriteString(section,"Hostname",Hostname);
+    IniFile->WriteString(section,"CtrlDirectory",CtrlDirectory);
+
+    /***********************************************************************/
+	section = "BBS";
+    IniFile->WriteInteger(section,"AutoStart",SysAutoStart);
+    IniFile->WriteInteger(section,"TelnetInterface",bbs_startup.telnet_interface);
+    IniFile->WriteInteger(section,"RLoginInterface",bbs_startup.rlogin_interface);
+
+	IniFile->WriteInteger(section,"TelnetPort",bbs_startup.telnet_port);
+	IniFile->WriteInteger(section,"RLoginPort",bbs_startup.rlogin_port);
+    IniFile->WriteInteger(section,"FirstNode",bbs_startup.first_node);
+    IniFile->WriteInteger(section,"LastNode",bbs_startup.last_node);
+
+    IniFile->WriteInteger(section,"ExternalYield",bbs_startup.xtrn_polls_before_yield);
+    IniFile->WriteString(section,"AnswerSound",bbs_startup.answer_sound);
+    IniFile->WriteString(section,"HangupSound",bbs_startup.hangup_sound);
+
+    sprintf(str,"0x%x",bbs_startup.options);
+    IniFile->WriteString(section,"Options",str);
+
+    /***********************************************************************/
+    section = "Mail";
+    IniFile->WriteInteger(section,"AutoStart",MailAutoStart);
+    IniFile->WriteInteger(section,"LogFile",MailLogFile);
+    IniFile->WriteInteger(section,"MaxClients",mail_startup.max_clients);
+    IniFile->WriteInteger(section,"MaxInactivity",mail_startup.max_inactivity);
+    IniFile->WriteInteger(section,"Interface",mail_startup.interface_addr);
+    IniFile->WriteInteger(section,"MaxDeliveryAttempts"
+        ,mail_startup.max_delivery_attempts);
+    IniFile->WriteInteger(section,"RescanFrequency"
+        ,mail_startup.rescan_frequency);
+    IniFile->WriteInteger(section,"LinesPerYield"
+        ,mail_startup.lines_per_yield);
+    IniFile->WriteInteger(section,"MaxRecipients"
+        ,mail_startup.max_recipients);
+
+    IniFile->WriteInteger(section,"SMTPPort",mail_startup.smtp_port);
+    IniFile->WriteInteger(section,"POP3Port",mail_startup.pop3_port);
+
+    IniFile->WriteString(section,"DefaultUser",mail_startup.default_user);
+	IniFile->WriteString(section,"DNSBlacklistHeader"
+    	,mail_startup.dnsbl_hdr);
+	IniFile->WriteString(section,"DNSBlacklistSubject"
+    	,mail_startup.dnsbl_tag);
+
+    IniFile->WriteString(section,"RelayServer",mail_startup.relay_server);
+    IniFile->WriteInteger(section,"RelayPort",mail_startup.relay_port);
+    IniFile->WriteString(section,"DNSServer",mail_startup.dns_server);
+
+    IniFile->WriteString(section,"POP3Sound",mail_startup.pop3_sound);
+    IniFile->WriteString(section,"InboundSound",mail_startup.inbound_sound);
+    IniFile->WriteString(section,"OutboundSound",mail_startup.outbound_sound);
+
+	sprintf(str,"0x%x",mail_startup.options);
+    IniFile->WriteString(section,"Options",str);
+
+    /***********************************************************************/
+	section = "FTP";
+    IniFile->WriteInteger(section,"AutoStart",FtpAutoStart);
+    IniFile->WriteInteger(section,"LogFile",FtpLogFile);
+	IniFile->WriteInteger(section,"Port",ftp_startup.port);
+    IniFile->WriteInteger(section,"MaxClients",ftp_startup.max_clients);
+    IniFile->WriteInteger(section,"MaxInactivity",ftp_startup.max_inactivity);
+    IniFile->WriteInteger(section,"QwkTimeout",ftp_startup.qwk_timeout);
+    IniFile->WriteInteger(section,"Interface",ftp_startup.interface_addr);
+    IniFile->WriteString(section,"AnswerSound",ftp_startup.answer_sound);
+    IniFile->WriteString(section,"HangupSound",ftp_startup.hangup_sound);
+    IniFile->WriteString(section,"HackAttemptSound",ftp_startup.hack_sound);
+
+    IniFile->WriteString(section,"IndexFileName",ftp_startup.index_file_name);
+    IniFile->WriteString(section,"HtmlIndexFile",ftp_startup.html_index_file);
+    IniFile->WriteString(section,"HtmlIndexScript",ftp_startup.html_index_script);
+
+    sprintf(str,"0x%x",ftp_startup.options);
+    IniFile->WriteString(section,"Options",str);
+
+    /***********************************************************************/
+    section = "Services";
+    IniFile->WriteInteger(section,"AutoStart",ServicesAutoStart);
+    IniFile->WriteInteger(section,"Interface",services_startup.interface_addr);
+
+    IniFile->WriteString(section,"AnswerSound",services_startup.answer_sound);
+    IniFile->WriteString(section,"HangupSound",services_startup.hangup_sound);
+
+    sprintf(str,"0x%x",services_startup.options);
+    IniFile->WriteString(section,"Options",str);
+
+    IniFile->UpdateFile();
+
+    delete IniFile;
+
 }
 //---------------------------------------------------------------------------
 
diff --git a/src/sbbs3/ctrl/MainFormUnit.dfm b/src/sbbs3/ctrl/MainFormUnit.dfm
index dff8230025fb92542b3dc3ec83987783c5f4a23d..1f0a1826177f104eff2ffd6388dfb7bee0dcc787 100644
--- a/src/sbbs3/ctrl/MainFormUnit.dfm
+++ b/src/sbbs3/ctrl/MainFormUnit.dfm
@@ -2073,11 +2073,19 @@ object MainForm: TMainForm
         ImageIndex = 45
         OnClick = FileOpenMenuItemClick
       end
-      object SaveSettingsMenuOption: TMenuItem
+      object SaveSettingsMenuItem: TMenuItem
         Caption = 'Save Settings'
         ImageIndex = 41
         OnClick = SaveSettings
       end
+      object ImportSettingsMenuItem: TMenuItem
+        Caption = 'Import Settings'
+        OnClick = ImportSettings
+      end
+      object ExportSettingsMenuItem: TMenuItem
+        Caption = 'Export Settings'
+        OnClick = ExportSettings
+      end
       object N4: TMenuItem
         Caption = '-'
       end
@@ -2421,6 +2429,11 @@ object MainForm: TMainForm
           Hint = 'DNS_BLACKLIST.CFG'
           OnClick = CtrlMenuItemEditClick
         end
+        object DNSBLExemptions: TMenuItem
+          Caption = 'DNS-blacklist Exempt IPs'
+          Hint = 'DNSBL_EXEMPT.CFG'
+          OnClick = CtrlMenuItemEditClick
+        end
       end
     end
     object FtpMenuItem: TMenuItem
diff --git a/src/sbbs3/ctrl/MainFormUnit.h b/src/sbbs3/ctrl/MainFormUnit.h
index 46dc1e3064808419c66b586f08bab08ec068ade6..4ccba30cc60ebae29b0cd55433c6d2bb82694485 100644
--- a/src/sbbs3/ctrl/MainFormUnit.h
+++ b/src/sbbs3/ctrl/MainFormUnit.h
@@ -180,7 +180,7 @@ __published:	// IDE-managed Components
     TMenuItem *BBSEditHostFilter;
     TMenuItem *BBSEditHostFilterMsg;
     TMenuItem *AllowedRelayList;
-    TMenuItem *SaveSettingsMenuOption;
+	TMenuItem *SaveSettingsMenuItem;
     TMenuItem *N6;
     TMenuItem *TelnetEditMenuItem;
     TMenuItem *TelnetEditRLoginList;
@@ -254,6 +254,9 @@ __published:	// IDE-managed Components
 	TMenuItem *Recycle3;
 	TAction *TelnetRecycle;
 	TMenuItem *DnsBlacklists;
+	TMenuItem *ExportSettingsMenuItem;
+	TMenuItem *ImportSettingsMenuItem;
+	TMenuItem *DNSBLExemptions;
     void __fastcall FileExitMenuItemClick(TObject *Sender);
 	void __fastcall ViewToolbarMenuItemClick(TObject *Sender);
 	void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
@@ -300,6 +303,8 @@ __published:	// IDE-managed Components
     void __fastcall UserEditExecute(TObject *Sender);
     void __fastcall FileOpenMenuItemClick(TObject *Sender);
     void __fastcall SaveSettings(TObject *Sender);
+    void __fastcall ImportSettings(TObject *Sender);
+    void __fastcall ExportSettings(TObject *Sender);
     void __fastcall BBSLoginMenuItemClick(TObject *Sender);
     void __fastcall ViewLogClick(TObject *Sender);
     void __fastcall UserListExecute(TObject *Sender);