diff --git a/src/sbbs3/ctrl/MainFormUnit.cpp b/src/sbbs3/ctrl/MainFormUnit.cpp
index 1d3401112db9be12f6969bbe7e28e3a98aae4c2f..0bbb3509d1baf6987ff686750627ec7c0849571a 100644
--- a/src/sbbs3/ctrl/MainFormUnit.cpp
+++ b/src/sbbs3/ctrl/MainFormUnit.cpp
@@ -480,7 +480,9 @@ __fastcall TMainForm::TMainForm(TComponent* Owner)
     bbs_startup.first_node=1;
     bbs_startup.last_node=4;
     bbs_startup.telnet_port=IPPORT_TELNET;
-    bbs_startup.interface_addr=INADDR_ANY;
+    bbs_startup.telnet_interface=INADDR_ANY;
+    bbs_startup.rlogin_port=513;
+    bbs_startup.rlogin_interface=INADDR_ANY;
 	bbs_startup.lputs=bbs_lputs;
     bbs_startup.status=bbs_status;
     bbs_startup.clients=bbs_clients;
@@ -672,9 +674,11 @@ void __fastcall TMainForm::SaveSettings(void)
     Registry->WriteInteger("MailLogFile",MailLogFile);
     Registry->WriteInteger("FtpLogFile",FtpLogFile);
 
-    Registry->WriteInteger("TelnetInterface",bbs_startup.interface_addr);
+    Registry->WriteInteger("TelnetInterface",bbs_startup.telnet_interface);
+    Registry->WriteInteger("RLoginInterface",bbs_startup.rlogin_interface);
 
 	Registry->WriteInteger("TelnetPort",bbs_startup.telnet_port);
+	Registry->WriteInteger("RLoginPort",bbs_startup.rlogin_port);
     Registry->WriteInteger("FirstNode",bbs_startup.first_node);
     Registry->WriteInteger("LastNode",bbs_startup.last_node);
 
@@ -1225,10 +1229,14 @@ void __fastcall TMainForm::StartupTimerTick(TObject *Sender)
     	FtpLogFile=true;
 
     if(Registry->ValueExists("TelnetInterface"))
-    	bbs_startup.interface_addr=Registry->ReadInteger("TelnetInterface");
+    	bbs_startup.telnet_interface=Registry->ReadInteger("TelnetInterface");
+    if(Registry->ValueExists("RLoginInterface"))
+    	bbs_startup.rlogin_interface=Registry->ReadInteger("RLoginInterface");
 
 	if(Registry->ValueExists("TelnetPort"))
     	bbs_startup.telnet_port=Registry->ReadInteger("TelnetPort");
+	if(Registry->ValueExists("RLoginPort"))
+    	bbs_startup.rlogin_port=Registry->ReadInteger("RLoginPort");
 
     if(Registry->ValueExists("FirstNode"))
     	bbs_startup.first_node=Registry->ReadInteger("FirstNode");
diff --git a/src/sbbs3/ctrl/TelnetCfgDlgUnit.cpp b/src/sbbs3/ctrl/TelnetCfgDlgUnit.cpp
index db865d33980e41123c062ba223c85d0b770fb3e1..988a2e89dc0ac527de2858a4306774b01643bfdf 100644
--- a/src/sbbs3/ctrl/TelnetCfgDlgUnit.cpp
+++ b/src/sbbs3/ctrl/TelnetCfgDlgUnit.cpp
@@ -38,6 +38,7 @@
 #pragma hdrstop
 
 #include "MainFormUnit.h"
+#include "TextFileEditUnit.h"
 #include "TelnetCfgDlgUnit.h"
 #include <stdio.h>			// sprintf()
 #include <mmsystem.h>		// sndPlaySound()
@@ -54,18 +55,31 @@ void __fastcall TTelnetCfgDlg::FormShow(TObject *Sender)
 {
     char str[128];
 
-    if(MainForm->bbs_startup.interface_addr==0)
-        NetworkInterfaceEdit->Text="<ANY>";
+    if(MainForm->bbs_startup.telnet_interface==0)
+        TelnetInterfaceEdit->Text="<ANY>";
     else {
         sprintf(str,"%d.%d.%d.%d"
-            ,(MainForm->bbs_startup.interface_addr>>24)&0xff
-            ,(MainForm->bbs_startup.interface_addr>>16)&0xff
-            ,(MainForm->bbs_startup.interface_addr>>8)&0xff
-            ,MainForm->bbs_startup.interface_addr&0xff
+            ,(MainForm->bbs_startup.telnet_interface>>24)&0xff
+            ,(MainForm->bbs_startup.telnet_interface>>16)&0xff
+            ,(MainForm->bbs_startup.telnet_interface>>8)&0xff
+            ,MainForm->bbs_startup.telnet_interface&0xff
         );
-        NetworkInterfaceEdit->Text=AnsiString(str);
+        TelnetInterfaceEdit->Text=AnsiString(str);
+    }
+    if(MainForm->bbs_startup.rlogin_interface==0)
+        RLoginInterfaceEdit->Text="<ANY>";
+    else {
+        sprintf(str,"%d.%d.%d.%d"
+            ,(MainForm->bbs_startup.rlogin_interface>>24)&0xff
+            ,(MainForm->bbs_startup.rlogin_interface>>16)&0xff
+            ,(MainForm->bbs_startup.rlogin_interface>>8)&0xff
+            ,MainForm->bbs_startup.rlogin_interface&0xff
+        );
+        RLoginInterfaceEdit->Text=AnsiString(str);
     }
 	TelnetPortEdit->Text=AnsiString((int)MainForm->bbs_startup.telnet_port);
+	RLoginPortEdit->Text=AnsiString((int)MainForm->bbs_startup.rlogin_port);
+
 	FirstNodeEdit->Text=AnsiString((int)MainForm->bbs_startup.first_node);
 	LastNodeEdit->Text=AnsiString((int)MainForm->bbs_startup.last_node);
     AutoStartCheckBox->Checked=MainForm->SysAutoStart;
@@ -77,7 +91,12 @@ void __fastcall TTelnetCfgDlg::FormShow(TObject *Sender)
     AutoLogonCheckBox->Checked=MainForm->bbs_startup.options&BBS_OPT_AUTO_LOGON;
     HostnameCheckBox->Checked
         =!(MainForm->bbs_startup.options&BBS_OPT_NO_HOST_LOOKUP);
+    RLoginEnabledCheckBox->Checked
+        =MainForm->bbs_startup.options&BBS_OPT_ALLOW_RLOGIN;
+    RLogin2ndNameCheckBox->Checked
+        =MainForm->bbs_startup.options&BBS_OPT_USE_2ND_RLOGIN;
 
+    RLoginEnabledCheckBoxClick(Sender);
     PageControl->ActivePage=GeneralTabSheet;
 }
 //---------------------------------------------------------------------------
@@ -88,7 +107,26 @@ void __fastcall TTelnetCfgDlg::OKBtnClick(TObject *Sender)
     DWORD   addr;
 
     sprintf(str,"%.*s",sizeof(str)-1
-        ,NetworkInterfaceEdit->Text.c_str());
+        ,TelnetInterfaceEdit->Text.c_str());
+    p=str;
+    while(*p && *p<=' ') p++;
+    if(*p && isdigit(*p)) {
+        addr=atoi(p)<<24;
+        while(*p && *p!='.') p++;
+        if(*p=='.') p++;
+        addr|=atoi(p)<<16;
+        while(*p && *p!='.') p++;
+        if(*p=='.') p++;
+        addr|=atoi(p)<<8;
+        while(*p && *p!='.') p++;
+        if(*p=='.') p++;
+        addr|=atoi(p);
+        MainForm->bbs_startup.telnet_interface=addr;
+    } else
+        MainForm->bbs_startup.telnet_interface=0;
+
+    sprintf(str,"%.*s",sizeof(str)-1
+        ,RLoginInterfaceEdit->Text.c_str());
     p=str;
     while(*p && *p<=' ') p++;
     if(*p && isdigit(*p)) {
@@ -102,10 +140,13 @@ void __fastcall TTelnetCfgDlg::OKBtnClick(TObject *Sender)
         while(*p && *p!='.') p++;
         if(*p=='.') p++;
         addr|=atoi(p);
-        MainForm->bbs_startup.interface_addr=addr;
+        MainForm->bbs_startup.rlogin_interface=addr;
     } else
-        MainForm->bbs_startup.interface_addr=0;
+        MainForm->bbs_startup.rlogin_interface=0;
+
     MainForm->bbs_startup.telnet_port=TelnetPortEdit->Text.ToIntDef(23);
+    MainForm->bbs_startup.rlogin_port=RLoginPortEdit->Text.ToIntDef(513);
+
     MainForm->bbs_startup.first_node=FirstNodeEdit->Text.ToIntDef(1);
     MainForm->bbs_startup.last_node=LastNodeEdit->Text.ToIntDef(1);
     MainForm->SysAutoStart=AutoStartCheckBox->Checked;
@@ -135,6 +176,14 @@ void __fastcall TTelnetCfgDlg::OKBtnClick(TObject *Sender)
     	MainForm->bbs_startup.options|=BBS_OPT_NO_HOST_LOOKUP;
     else
 	    MainForm->bbs_startup.options&=~BBS_OPT_NO_HOST_LOOKUP;
+	if(RLoginEnabledCheckBox->Checked==true)
+    	MainForm->bbs_startup.options|=BBS_OPT_ALLOW_RLOGIN;
+    else
+	    MainForm->bbs_startup.options&=~BBS_OPT_ALLOW_RLOGIN;
+	if(RLoginEnabledCheckBox->Checked==true)
+    	MainForm->bbs_startup.options|=BBS_OPT_USE_2ND_RLOGIN;
+    else
+	    MainForm->bbs_startup.options&=~BBS_OPT_USE_2ND_RLOGIN;
 
     MainForm->SaveSettings();
 }
@@ -160,3 +209,26 @@ void __fastcall TTelnetCfgDlg::HangupSoundButtonClick(TObject *Sender)
 }
 //---------------------------------------------------------------------------
 
+void __fastcall TTelnetCfgDlg::RLoginEnabledCheckBoxClick(TObject *Sender)
+{
+    RLoginPortEdit->Enabled = RLoginEnabledCheckBox->Checked;
+    RLoginInterfaceEdit->Enabled = RLoginEnabledCheckBox->Checked;
+    RLoginIPallowButton->Enabled = RLoginEnabledCheckBox->Checked;
+    RLogin2ndNameCheckBox->Enabled = RLoginEnabledCheckBox->Checked;
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TTelnetCfgDlg::RLoginIPallowButtonClick(TObject *Sender)
+{
+	char filename[MAX_PATH];
+
+    sprintf(filename,"%sRLOGIN.CAN"
+    	,MainForm->cfg.text_dir);
+	Application->CreateForm(__classid(TTextFileEditForm), &TextFileEditForm);
+	TextFileEditForm->Filename=AnsiString(filename);
+    TextFileEditForm->Caption="Allowed IP addresses for RLogin";
+	TextFileEditForm->ShowModal();
+    delete TextFileEditForm;
+}
+//---------------------------------------------------------------------------
+
diff --git a/src/sbbs3/ctrl/TelnetCfgDlgUnit.dfm b/src/sbbs3/ctrl/TelnetCfgDlgUnit.dfm
index 102ec7863a2697f8e8f43c1907356935b72d42cc..b4cd891ed4b39672374fe6d12dee637dcd77a3fb 100644
--- a/src/sbbs3/ctrl/TelnetCfgDlgUnit.dfm
+++ b/src/sbbs3/ctrl/TelnetCfgDlgUnit.dfm
@@ -1,6 +1,6 @@
 object TelnetCfgDlg: TTelnetCfgDlg
-  Left = 484
-  Top = 622
+  Left = 766
+  Top = 707
   BorderStyle = bsDialog
   Caption = 'Telnet Server Configuration'
   ClientHeight = 234
@@ -17,29 +17,13 @@ object TelnetCfgDlg: TTelnetCfgDlg
     Top = 3
     Width = 278
     Height = 186
-    ActivePage = GeneralTabSheet
+    ActivePage = RLoginTabSheet
     TabOrder = 0
     object GeneralTabSheet: TTabSheet
       Caption = 'General'
-      object InterfaceLabel: TLabel
-        Left = 7
-        Top = 29
-        Width = 78
-        Height = 20
-        AutoSize = False
-        Caption = 'Interface (IP)'
-      end
-      object TelnetPortLabel: TLabel
-        Left = 7
-        Top = 55
-        Width = 78
-        Height = 20
-        AutoSize = False
-        Caption = 'Listening Port'
-      end
       object FirstNodeLabel: TLabel
         Left = 7
-        Top = 81
+        Top = 10
         Width = 78
         Height = 20
         AutoSize = False
@@ -47,15 +31,15 @@ object TelnetCfgDlg: TTelnetCfgDlg
       end
       object LastNodeLabel: TLabel
         Left = 7
-        Top = 107
-        Width = 78
+        Top = 36
+        Width = 74
         Height = 20
         AutoSize = False
         Caption = 'Last Node'
       end
       object AutoStartCheckBox: TCheckBox
-        Left = 7
-        Top = 5
+        Left = 148
+        Top = 10
         Width = 117
         Height = 19
         Hint = 'Automatically start Telnet server'
@@ -64,9 +48,82 @@ object TelnetCfgDlg: TTelnetCfgDlg
         ShowHint = True
         TabOrder = 0
       end
-      object NetworkInterfaceEdit: TEdit
+      object FirstNodeEdit: TEdit
+        Left = 85
+        Top = 10
+        Width = 39
+        Height = 21
+        Hint = 'First node number available for Telnet logins'
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 1
+      end
+      object XtrnMinCheckBox: TCheckBox
+        Left = 148
+        Top = 62
+        Width = 117
+        Height = 20
+        Hint = 'External programs run in a minimized window'
+        Caption = 'Minimize Externals'
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 2
+      end
+      object LastNodeEdit: TEdit
+        Left = 85
+        Top = 36
+        Width = 39
+        Height = 21
+        Hint = 'Last node number available for Telnet logins'
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 3
+      end
+      object HostnameCheckBox: TCheckBox
+        Left = 148
+        Top = 36
+        Width = 117
+        Height = 19
+        Hint = 'Automatically lookup client'#39's hostnames via DNS'
+        Caption = 'Hostname Lookup'
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 4
+      end
+    end
+    object TelnetTabSheet: TTabSheet
+      Caption = 'Telnet'
+      ImageIndex = 1
+      object InterfaceLabel: TLabel
+        Left = 7
+        Top = 36
+        Width = 78
+        Height = 21
+        AutoSize = False
+        Caption = 'Interface (IP)'
+      end
+      object TelnetPortLabel: TLabel
+        Left = 7
+        Top = 10
+        Width = 78
+        Height = 21
+        AutoSize = False
+        Caption = 'Listening Port'
+      end
+      object CmdLogCheckBox: TCheckBox
+        Left = 7
+        Top = 88
+        Width = 169
+        Height = 21
+        Hint = 'Log (debug) all received Telnet commands'
+        Caption = 'Log Received Commands'
+        ParentShowHint = False
+        ShowHint = True
+        TabOrder = 0
+      end
+      object TelnetInterfaceEdit: TEdit
         Left = 85
-        Top = 29
+        Top = 36
         Width = 156
         Height = 21
         Hint = 
@@ -78,7 +135,7 @@ object TelnetCfgDlg: TTelnetCfgDlg
       end
       object TelnetPortEdit: TEdit
         Left = 85
-        Top = 55
+        Top = 10
         Width = 39
         Height = 21
         Hint = 'TCP port for incoming connections (default=23)'
@@ -87,83 +144,98 @@ object TelnetCfgDlg: TTelnetCfgDlg
         TabOrder = 2
       end
       object KeepAliveCheckBox: TCheckBox
-        Left = 148
-        Top = 55
+        Left = 7
+        Top = 62
         Width = 117
-        Height = 20
+        Height = 21
         Hint = 'Instruct WinSock to keep your dial-up connection active'
         Caption = 'Send Keep-Alives'
         ParentShowHint = False
         ShowHint = True
         TabOrder = 3
       end
-      object FirstNodeEdit: TEdit
-        Left = 85
-        Top = 81
-        Width = 39
-        Height = 21
-        Hint = 'First node number available for Telnet logins'
+      object AutoLogonCheckBox: TCheckBox
+        Left = 7
+        Top = 114
+        Width = 117
+        Height = 19
+        Hint = 'Allow V-exempt users to auto-logon based on their IP address'
+        Caption = 'AutoLogon via IP'
         ParentShowHint = False
         ShowHint = True
         TabOrder = 4
       end
-      object XtrnMinCheckBox: TCheckBox
-        Left = 148
-        Top = 80
-        Width = 117
-        Height = 20
-        Hint = 'External programs run in a minimized window'
-        Caption = 'Minimize Externals'
-        ParentShowHint = False
-        ShowHint = True
-        TabOrder = 5
+    end
+    object RLoginTabSheet: TTabSheet
+      Caption = 'RLogin'
+      ImageIndex = 3
+      object Label1: TLabel
+        Left = 7
+        Top = 10
+        Width = 78
+        Height = 21
+        AutoSize = False
+        Caption = 'Listening Port'
       end
-      object LastNodeEdit: TEdit
+      object Label2: TLabel
+        Left = 7
+        Top = 36
+        Width = 78
+        Height = 21
+        AutoSize = False
+        Caption = 'Interface (IP)'
+      end
+      object RLoginPortEdit: TEdit
         Left = 85
-        Top = 107
+        Top = 10
         Width = 39
         Height = 21
-        Hint = 'Last node number available for Telnet logins'
+        Hint = 'TCP port for incoming connections (default=513)'
         ParentShowHint = False
         ShowHint = True
-        TabOrder = 6
+        TabOrder = 0
       end
-      object AutoLogonCheckBox: TCheckBox
-        Left = 148
-        Top = 106
-        Width = 117
-        Height = 19
-        Hint = 'Allow V-exempt users to auto-logon based on their IP address'
-        Caption = 'AutoLogon via IP'
+      object RLoginInterfaceEdit: TEdit
+        Left = 85
+        Top = 36
+        Width = 156
+        Height = 21
+        Hint = 
+          'Enter your Network adapter'#39's static IP address here or blank for' +
+          ' <ANY>'
         ParentShowHint = False
         ShowHint = True
-        TabOrder = 7
+        TabOrder = 1
       end
-      object HostnameCheckBox: TCheckBox
-        Left = 148
-        Top = 5
-        Width = 117
-        Height = 19
-        Hint = 'Automatically lookup client'#39's hostnames via DNS'
-        Caption = 'Hostname Lookup'
-        ParentShowHint = False
-        ShowHint = True
-        TabOrder = 8
+      object RLoginEnabledCheckBox: TCheckBox
+        Left = 184
+        Top = 10
+        Width = 73
+        Height = 17
+        Caption = 'Enabled'
+        TabOrder = 2
+        OnClick = RLoginEnabledCheckBoxClick
       end
-    end
-    object LogTabSheet: TTabSheet
-      Caption = 'Log'
-      ImageIndex = 1
-      object CmdLogCheckBox: TCheckBox
+      object RLoginIPallowButton: TButton
+        Left = 158
+        Top = 62
+        Width = 83
+        Height = 21
+        Hint = 'RLOGIN.CAN'
+        Caption = 'Allowed IPs'
+        TabOrder = 3
+        OnClick = RLoginIPallowButtonClick
+      end
+      object RLogin2ndNameCheckBox: TCheckBox
         Left = 7
-        Top = 5
-        Width = 169
-        Height = 19
-        Hint = 'Log (debug) all received Telnet commands'
-        Caption = 'Received Commands'
+        Top = 62
+        Width = 138
+        Height = 21
+        Hint = 'Instruct WinSock to keep your dial-up connection active'
+        Caption = 'Use 2nd Login Name'
         ParentShowHint = False
         ShowHint = True
-        TabOrder = 0
+        TabOrder = 4
       end
     end
     object SoundTabSheet: TTabSheet
diff --git a/src/sbbs3/ctrl/TelnetCfgDlgUnit.h b/src/sbbs3/ctrl/TelnetCfgDlgUnit.h
index 38db8d1748dfe5fa6a57d2ec1f946fe42c5581c3..f111cab4105f61359c87d72479d5ed5881691214 100644
--- a/src/sbbs3/ctrl/TelnetCfgDlgUnit.h
+++ b/src/sbbs3/ctrl/TelnetCfgDlgUnit.h
@@ -56,7 +56,7 @@ __published:
 	TOpenDialog *OpenDialog;
     TPageControl *PageControl;
     TTabSheet *GeneralTabSheet;
-    TTabSheet *LogTabSheet;
+    TTabSheet *TelnetTabSheet;
     TTabSheet *SoundTabSheet;
     TLabel *AnswerSoundLabel;
     TEdit *AnswerSoundEdit;
@@ -66,25 +66,35 @@ __published:
     TButton *HangupSoundButton;
     TCheckBox *CmdLogCheckBox;
     TCheckBox *AutoStartCheckBox;
-    TLabel *InterfaceLabel;
-    TEdit *NetworkInterfaceEdit;
-    TLabel *TelnetPortLabel;
-    TEdit *TelnetPortEdit;
-    TCheckBox *KeepAliveCheckBox;
     TLabel *FirstNodeLabel;
     TEdit *FirstNodeEdit;
     TCheckBox *XtrnMinCheckBox;
     TLabel *LastNodeLabel;
     TEdit *LastNodeEdit;
-    TCheckBox *AutoLogonCheckBox;
     TCheckBox *HostnameCheckBox;
     TButton *OKBtn;
     TButton *CancelBtn;
     TButton *ApplyBtn;
+    TLabel *InterfaceLabel;
+    TEdit *TelnetInterfaceEdit;
+    TLabel *TelnetPortLabel;
+    TEdit *TelnetPortEdit;
+    TCheckBox *KeepAliveCheckBox;
+    TCheckBox *AutoLogonCheckBox;
+    TTabSheet *RLoginTabSheet;
+    TLabel *Label1;
+    TEdit *RLoginPortEdit;
+    TLabel *Label2;
+    TEdit *RLoginInterfaceEdit;
+    TCheckBox *RLoginEnabledCheckBox;
+    TButton *RLoginIPallowButton;
+    TCheckBox *RLogin2ndNameCheckBox;
 	void __fastcall FormShow(TObject *Sender);
 	void __fastcall OKBtnClick(TObject *Sender);
 	void __fastcall AnswerSoundButtonClick(TObject *Sender);
 	void __fastcall HangupSoundButtonClick(TObject *Sender);
+    void __fastcall RLoginEnabledCheckBoxClick(TObject *Sender);
+    void __fastcall RLoginIPallowButtonClick(TObject *Sender);
 private:
 public:
 	virtual __fastcall TTelnetCfgDlg(TComponent* AOwner);