 .../Imon USB Receivers/Configuration.Designer.cs   |  273 +++++++++++---------
 .../Imon USB Receivers/Configuration.cs            |    7 +-
 .../Imon USB Receivers/Configuration.resx          |    6 +-
 .../Imon USB Receivers/Imon USB Receivers.cs       |  172 +++++++-----
 .../Imon USB Receivers/PluginBaseInterfaces.cs     |   40 +--
 .../Abstract Remote Maps/iMon USB/Imon PAD.xml     |   42 +--
 6 files changed, 315 insertions(+), 225 deletions(-)

diff --git a/IR Server Suite/IR Server Plugins/Imon USB Receivers/Configuration.Designer.cs b/IR Server Suite/IR Server Plugins/Imon USB Receivers/Configuration.Designer.cs
index 37a65a5..aa1fc74 100644
--- a/IR Server Suite/IR Server Plugins/Imon USB Receivers/Configuration.Designer.cs	
+++ b/IR Server Suite/IR Server Plugins/Imon USB Receivers/Configuration.Designer.cs	
@@ -51,28 +51,30 @@ namespace IRServer.Plugin
             this.comboBoxRemoteMode = new System.Windows.Forms.ComboBox();
             this.comboBoxPadMode = new System.Windows.Forms.ComboBox();
             this.labelRemoteMode = new System.Windows.Forms.Label();
+            this.checkBoxKillImonM = new System.Windows.Forms.CheckBox();
             this.tabControl = new System.Windows.Forms.TabControl();
             this.tabPageRemote = new System.Windows.Forms.TabPage();
+            this.groupBoxHardwareConfig = new System.Windows.Forms.GroupBox();
             this.labelPadMode = new System.Windows.Forms.Label();
+            this.checkBoxUsePadSwitch = new System.Windows.Forms.CheckBox();
             this.tabPageKeyboard = new System.Windows.Forms.TabPage();
+            this.groupBoxKeyPadSensitivity = new System.Windows.Forms.GroupBox();
+            this.labelKeyPadHarder = new System.Windows.Forms.Label();
+            this.labelKeyPadSofter = new System.Windows.Forms.Label();
+            this.trackBarKeyPadSensitivity = new System.Windows.Forms.TrackBar();
             this.groupBoxKeypressTiming = new System.Windows.Forms.GroupBox();
             this.labelKeyRepeatDelay = new System.Windows.Forms.Label();
             this.labelKeyHeldDelay = new System.Windows.Forms.Label();
             this.tabPageMouse = new System.Windows.Forms.TabPage();
-            this.checkBoxUsePadSwitch = new System.Windows.Forms.CheckBox();
-            this.trackBarKeyPadSensitivity = new System.Windows.Forms.TrackBar();
-            this.labelKeyPadHarder = new System.Windows.Forms.Label();
-            this.labelKeyPadSofter = new System.Windows.Forms.Label();
-            this.groupBoxKeyPadSensitivity = new System.Windows.Forms.GroupBox();
-            this.label1 = new System.Windows.Forms.Label();
-            this.label2 = new System.Windows.Forms.Label();
-            this.trackBar1 = new System.Windows.Forms.TrackBar();
             this.groupBoxMouseSensitivity = new System.Windows.Forms.GroupBox();
             this.labelMouseFaster = new System.Windows.Forms.Label();
             this.labelMouseSlower = new System.Windows.Forms.Label();
-            this.trackBarMouseSensitivity = new System.Windows.Forms.TrackBar();
             this.labelMouseSensitivity = new System.Windows.Forms.Label();
-            this.groupBoxHardwareConfig = new System.Windows.Forms.GroupBox();
+            this.trackBarMouseSensitivity = new System.Windows.Forms.TrackBar();
+            this.tabPageAdvanced = new System.Windows.Forms.TabPage();
+            this.label1 = new System.Windows.Forms.Label();
+            this.label2 = new System.Windows.Forms.Label();
+            this.trackBar1 = new System.Windows.Forms.TrackBar();
             ((System.ComponentModel.ISupportInitialize)(this.numericUpDownButtonRepeatDelay)).BeginInit();
             ((System.ComponentModel.ISupportInitialize)(this.numericUpDownButtonHeldDelay)).BeginInit();
             this.groupBoxRemoteTiming.SuspendLayout();
@@ -80,15 +82,16 @@ namespace IRServer.Plugin
             ((System.ComponentModel.ISupportInitialize)(this.numericUpDownKeyRepeatDelay)).BeginInit();
             this.tabControl.SuspendLayout();
             this.tabPageRemote.SuspendLayout();
+            this.groupBoxHardwareConfig.SuspendLayout();
             this.tabPageKeyboard.SuspendLayout();
+            this.groupBoxKeyPadSensitivity.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.trackBarKeyPadSensitivity)).BeginInit();
             this.groupBoxKeypressTiming.SuspendLayout();
             this.tabPageMouse.SuspendLayout();
-            ((System.ComponentModel.ISupportInitialize)(this.trackBarKeyPadSensitivity)).BeginInit();
-            this.groupBoxKeyPadSensitivity.SuspendLayout();
-            ((System.ComponentModel.ISupportInitialize)(this.trackBar1)).BeginInit();
             this.groupBoxMouseSensitivity.SuspendLayout();
             ((System.ComponentModel.ISupportInitialize)(this.trackBarMouseSensitivity)).BeginInit();
-            this.groupBoxHardwareConfig.SuspendLayout();
+            this.tabPageAdvanced.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.trackBar1)).BeginInit();
             this.SuspendLayout();
             // 
             // labelButtonRepeatDelay
@@ -128,7 +131,7 @@ namespace IRServer.Plugin
             this.numericUpDownButtonRepeatDelay.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
             this.numericUpDownButtonRepeatDelay.ThousandsSeparator = true;
             this.toolTips.SetToolTip(this.numericUpDownButtonRepeatDelay, "When the button is held this is the time between the first press and the first re" +
-                    "peat");
+        "peat");
             this.numericUpDownButtonRepeatDelay.Value = new decimal(new int[] {
             10000,
             0,
@@ -364,16 +367,31 @@ namespace IRServer.Plugin
             this.labelRemoteMode.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
             this.toolTips.SetToolTip(this.labelRemoteMode, "IMPORTANT: Set the hardware mode here");
             // 
+            // checkBoxKillImonM
+            // 
+            this.checkBoxKillImonM.AutoSize = true;
+            this.checkBoxKillImonM.Checked = true;
+            this.checkBoxKillImonM.CheckState = System.Windows.Forms.CheckState.Checked;
+            this.checkBoxKillImonM.Location = new System.Drawing.Point(16, 18);
+            this.checkBoxKillImonM.Name = "checkBoxKillImonM";
+            this.checkBoxKillImonM.Size = new System.Drawing.Size(113, 17);
+            this.checkBoxKillImonM.TabIndex = 0;
+            this.checkBoxKillImonM.Text = "Kill Imon Manager ";
+            this.toolTips.SetToolTip(this.checkBoxKillImonM, "Kill Imon Manager software when IRSS Start");
+            this.checkBoxKillImonM.UseVisualStyleBackColor = true;
+            // 
             // tabControl
             // 
-            this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                        | System.Windows.Forms.AnchorStyles.Left)
-                        | System.Windows.Forms.AnchorStyles.Right)));
+            this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
             this.tabControl.Controls.Add(this.tabPageRemote);
             this.tabControl.Controls.Add(this.tabPageKeyboard);
             this.tabControl.Controls.Add(this.tabPageMouse);
+            this.tabControl.Controls.Add(this.tabPageAdvanced);
             this.tabControl.Location = new System.Drawing.Point(8, 8);
             this.tabControl.Name = "tabControl";
+            this.tabControl.RightToLeft = System.Windows.Forms.RightToLeft.No;
             this.tabControl.SelectedIndex = 0;
             this.tabControl.Size = new System.Drawing.Size(256, 259);
             this.tabControl.TabIndex = 0;
@@ -393,6 +411,19 @@ namespace IRServer.Plugin
             this.tabPageRemote.Text = "Remote";
             this.tabPageRemote.UseVisualStyleBackColor = true;
             // 
+            // groupBoxHardwareConfig
+            // 
+            this.groupBoxHardwareConfig.Controls.Add(this.labelRemoteMode);
+            this.groupBoxHardwareConfig.Controls.Add(this.comboBoxRemoteMode);
+            this.groupBoxHardwareConfig.Controls.Add(this.comboBoxPadMode);
+            this.groupBoxHardwareConfig.Controls.Add(this.labelPadMode);
+            this.groupBoxHardwareConfig.Location = new System.Drawing.Point(6, 52);
+            this.groupBoxHardwareConfig.Name = "groupBoxHardwareConfig";
+            this.groupBoxHardwareConfig.Size = new System.Drawing.Size(236, 73);
+            this.groupBoxHardwareConfig.TabIndex = 9;
+            this.groupBoxHardwareConfig.TabStop = false;
+            this.groupBoxHardwareConfig.Text = "Hardware configuration";
+            // 
             // labelPadMode
             // 
             this.labelPadMode.Location = new System.Drawing.Point(6, 45);
@@ -402,6 +433,16 @@ namespace IRServer.Plugin
             this.labelPadMode.Text = "Remote Pad mode:";
             this.labelPadMode.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
             // 
+            // checkBoxUsePadSwitch
+            // 
+            this.checkBoxUsePadSwitch.AutoSize = true;
+            this.checkBoxUsePadSwitch.Location = new System.Drawing.Point(6, 29);
+            this.checkBoxUsePadSwitch.Name = "checkBoxUsePadSwitch";
+            this.checkBoxUsePadSwitch.Size = new System.Drawing.Size(236, 17);
+            this.checkBoxUsePadSwitch.TabIndex = 8;
+            this.checkBoxUsePadSwitch.Text = "Enable mouse/keyboard switch (iMON PAD)";
+            this.checkBoxUsePadSwitch.UseVisualStyleBackColor = true;
+            // 
             // tabPageKeyboard
             // 
             this.tabPageKeyboard.Controls.Add(this.groupBoxKeyPadSensitivity);
@@ -417,6 +458,47 @@ namespace IRServer.Plugin
             this.tabPageKeyboard.Text = "Keyboard";
             this.tabPageKeyboard.UseVisualStyleBackColor = true;
             // 
+            // groupBoxKeyPadSensitivity
+            // 
+            this.groupBoxKeyPadSensitivity.Controls.Add(this.labelKeyPadHarder);
+            this.groupBoxKeyPadSensitivity.Controls.Add(this.labelKeyPadSofter);
+            this.groupBoxKeyPadSensitivity.Controls.Add(this.trackBarKeyPadSensitivity);
+            this.groupBoxKeyPadSensitivity.Location = new System.Drawing.Point(6, 52);
+            this.groupBoxKeyPadSensitivity.Name = "groupBoxKeyPadSensitivity";
+            this.groupBoxKeyPadSensitivity.Size = new System.Drawing.Size(236, 73);
+            this.groupBoxKeyPadSensitivity.TabIndex = 11;
+            this.groupBoxKeyPadSensitivity.TabStop = false;
+            this.groupBoxKeyPadSensitivity.Text = "KeyPad sensitivity (Pad in keyboard mode)";
+            // 
+            // labelKeyPadHarder
+            // 
+            this.labelKeyPadHarder.AutoSize = true;
+            this.labelKeyPadHarder.Location = new System.Drawing.Point(193, 51);
+            this.labelKeyPadHarder.Name = "labelKeyPadHarder";
+            this.labelKeyPadHarder.Size = new System.Drawing.Size(37, 13);
+            this.labelKeyPadHarder.TabIndex = 10;
+            this.labelKeyPadHarder.Text = "harder";
+            // 
+            // labelKeyPadSofter
+            // 
+            this.labelKeyPadSofter.AutoSize = true;
+            this.labelKeyPadSofter.Location = new System.Drawing.Point(6, 51);
+            this.labelKeyPadSofter.Name = "labelKeyPadSofter";
+            this.labelKeyPadSofter.Size = new System.Drawing.Size(33, 13);
+            this.labelKeyPadSofter.TabIndex = 9;
+            this.labelKeyPadSofter.Text = "softer";
+            // 
+            // trackBarKeyPadSensitivity
+            // 
+            this.trackBarKeyPadSensitivity.BackColor = System.Drawing.Color.White;
+            this.trackBarKeyPadSensitivity.LargeChange = 4;
+            this.trackBarKeyPadSensitivity.Location = new System.Drawing.Point(6, 19);
+            this.trackBarKeyPadSensitivity.Maximum = 14;
+            this.trackBarKeyPadSensitivity.Name = "trackBarKeyPadSensitivity";
+            this.trackBarKeyPadSensitivity.Size = new System.Drawing.Size(224, 45);
+            this.trackBarKeyPadSensitivity.TabIndex = 5;
+            this.trackBarKeyPadSensitivity.Value = 7;
+            // 
             // groupBoxKeypressTiming
             // 
             this.groupBoxKeypressTiming.Controls.Add(this.labelKeyRepeatDelay);
@@ -461,86 +543,6 @@ namespace IRServer.Plugin
             this.tabPageMouse.Text = "Mouse";
             this.tabPageMouse.UseVisualStyleBackColor = true;
             // 
-            // checkBoxUsePadSwitch
-            // 
-            this.checkBoxUsePadSwitch.AutoSize = true;
-            this.checkBoxUsePadSwitch.Location = new System.Drawing.Point(6, 29);
-            this.checkBoxUsePadSwitch.Name = "checkBoxUsePadSwitch";
-            this.checkBoxUsePadSwitch.Size = new System.Drawing.Size(236, 17);
-            this.checkBoxUsePadSwitch.TabIndex = 8;
-            this.checkBoxUsePadSwitch.Text = "Enable mouse/keyboard switch (iMON PAD)";
-            this.checkBoxUsePadSwitch.UseVisualStyleBackColor = true;
-            // 
-            // trackBarKeyPadSensitivity
-            // 
-            this.trackBarKeyPadSensitivity.BackColor = System.Drawing.Color.White;
-            this.trackBarKeyPadSensitivity.LargeChange = 4;
-            this.trackBarKeyPadSensitivity.Location = new System.Drawing.Point(6, 19);
-            this.trackBarKeyPadSensitivity.Maximum = 14;
-            this.trackBarKeyPadSensitivity.Name = "trackBarKeyPadSensitivity";
-            this.trackBarKeyPadSensitivity.Size = new System.Drawing.Size(224, 45);
-            this.trackBarKeyPadSensitivity.TabIndex = 5;
-            this.trackBarKeyPadSensitivity.Value = 7;
-            // 
-            // labelKeyPadHarder
-            // 
-            this.labelKeyPadHarder.AutoSize = true;
-            this.labelKeyPadHarder.Location = new System.Drawing.Point(193, 51);
-            this.labelKeyPadHarder.Name = "labelKeyPadHarder";
-            this.labelKeyPadHarder.Size = new System.Drawing.Size(37, 13);
-            this.labelKeyPadHarder.TabIndex = 10;
-            this.labelKeyPadHarder.Text = "harder";
-            // 
-            // labelKeyPadSofter
-            // 
-            this.labelKeyPadSofter.AutoSize = true;
-            this.labelKeyPadSofter.Location = new System.Drawing.Point(6, 51);
-            this.labelKeyPadSofter.Name = "labelKeyPadSofter";
-            this.labelKeyPadSofter.Size = new System.Drawing.Size(33, 13);
-            this.labelKeyPadSofter.TabIndex = 9;
-            this.labelKeyPadSofter.Text = "softer";
-            // 
-            // groupBoxKeyPadSensitivity
-            // 
-            this.groupBoxKeyPadSensitivity.Controls.Add(this.labelKeyPadHarder);
-            this.groupBoxKeyPadSensitivity.Controls.Add(this.labelKeyPadSofter);
-            this.groupBoxKeyPadSensitivity.Controls.Add(this.trackBarKeyPadSensitivity);
-            this.groupBoxKeyPadSensitivity.Location = new System.Drawing.Point(6, 52);
-            this.groupBoxKeyPadSensitivity.Name = "groupBoxKeyPadSensitivity";
-            this.groupBoxKeyPadSensitivity.Size = new System.Drawing.Size(236, 73);
-            this.groupBoxKeyPadSensitivity.TabIndex = 11;
-            this.groupBoxKeyPadSensitivity.TabStop = false;
-            this.groupBoxKeyPadSensitivity.Text = "KeyPad sensitivity (Pad in keyboard mode)";
-            // 
-            // label1
-            // 
-            this.label1.AutoSize = true;
-            this.label1.Location = new System.Drawing.Point(193, 51);
-            this.label1.Name = "label1";
-            this.label1.Size = new System.Drawing.Size(37, 13);
-            this.label1.TabIndex = 10;
-            this.label1.Text = "harder";
-            // 
-            // label2
-            // 
-            this.label2.AutoSize = true;
-            this.label2.Location = new System.Drawing.Point(6, 51);
-            this.label2.Name = "label2";
-            this.label2.Size = new System.Drawing.Size(33, 13);
-            this.label2.TabIndex = 9;
-            this.label2.Text = "softer";
-            // 
-            // trackBar1
-            // 
-            this.trackBar1.BackColor = System.Drawing.Color.White;
-            this.trackBar1.LargeChange = 4;
-            this.trackBar1.Location = new System.Drawing.Point(6, 19);
-            this.trackBar1.Maximum = 15;
-            this.trackBar1.Name = "trackBar1";
-            this.trackBar1.Size = new System.Drawing.Size(224, 45);
-            this.trackBar1.TabIndex = 5;
-            this.trackBar1.Value = 8;
-            // 
             // groupBoxMouseSensitivity
             // 
             this.groupBoxMouseSensitivity.Controls.Add(this.labelMouseFaster);
@@ -572,6 +574,14 @@ namespace IRServer.Plugin
             this.labelMouseSlower.TabIndex = 9;
             this.labelMouseSlower.Text = "slower";
             // 
+            // labelMouseSensitivity
+            // 
+            this.labelMouseSensitivity.Location = new System.Drawing.Point(6, 51);
+            this.labelMouseSensitivity.Name = "labelMouseSensitivity";
+            this.labelMouseSensitivity.Size = new System.Drawing.Size(224, 20);
+            this.labelMouseSensitivity.TabIndex = 11;
+            this.labelMouseSensitivity.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+            // 
             // trackBarMouseSensitivity
             // 
             this.trackBarMouseSensitivity.BackColor = System.Drawing.Color.White;
@@ -585,26 +595,45 @@ namespace IRServer.Plugin
             this.trackBarMouseSensitivity.Value = 10;
             this.trackBarMouseSensitivity.Scroll += new System.EventHandler(this.trackBarMouseSensitivity_Scroll);
             // 
-            // labelMouseSensitivity
+            // tabPageAdvanced
             // 
-            this.labelMouseSensitivity.Location = new System.Drawing.Point(6, 51);
-            this.labelMouseSensitivity.Name = "labelMouseSensitivity";
-            this.labelMouseSensitivity.Size = new System.Drawing.Size(224, 20);
-            this.labelMouseSensitivity.TabIndex = 11;
-            this.labelMouseSensitivity.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+            this.tabPageAdvanced.Controls.Add(this.checkBoxKillImonM);
+            this.tabPageAdvanced.Location = new System.Drawing.Point(4, 22);
+            this.tabPageAdvanced.Name = "tabPageAdvanced";
+            this.tabPageAdvanced.Padding = new System.Windows.Forms.Padding(3);
+            this.tabPageAdvanced.Size = new System.Drawing.Size(248, 233);
+            this.tabPageAdvanced.TabIndex = 4;
+            this.tabPageAdvanced.Text = "Advanced";
+            this.tabPageAdvanced.UseVisualStyleBackColor = true;
             // 
-            // groupBoxHardwareConfig
+            // label1
             // 
-            this.groupBoxHardwareConfig.Controls.Add(this.labelRemoteMode);
-            this.groupBoxHardwareConfig.Controls.Add(this.comboBoxRemoteMode);
-            this.groupBoxHardwareConfig.Controls.Add(this.comboBoxPadMode);
-            this.groupBoxHardwareConfig.Controls.Add(this.labelPadMode);
-            this.groupBoxHardwareConfig.Location = new System.Drawing.Point(6, 52);
-            this.groupBoxHardwareConfig.Name = "groupBoxHardwareConfig";
-            this.groupBoxHardwareConfig.Size = new System.Drawing.Size(236, 73);
-            this.groupBoxHardwareConfig.TabIndex = 9;
-            this.groupBoxHardwareConfig.TabStop = false;
-            this.groupBoxHardwareConfig.Text = "Hardware configuration";
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(193, 51);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(37, 13);
+            this.label1.TabIndex = 10;
+            this.label1.Text = "harder";
+            // 
+            // label2
+            // 
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(6, 51);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(33, 13);
+            this.label2.TabIndex = 9;
+            this.label2.Text = "softer";
+            // 
+            // trackBar1
+            // 
+            this.trackBar1.BackColor = System.Drawing.Color.White;
+            this.trackBar1.LargeChange = 4;
+            this.trackBar1.Location = new System.Drawing.Point(6, 19);
+            this.trackBar1.Maximum = 15;
+            this.trackBar1.Name = "trackBar1";
+            this.trackBar1.Size = new System.Drawing.Size(224, 45);
+            this.trackBar1.TabIndex = 5;
+            this.trackBar1.Value = 8;
             // 
             // Configuration
             // 
@@ -631,19 +660,21 @@ namespace IRServer.Plugin
             this.tabControl.ResumeLayout(false);
             this.tabPageRemote.ResumeLayout(false);
             this.tabPageRemote.PerformLayout();
+            this.groupBoxHardwareConfig.ResumeLayout(false);
             this.tabPageKeyboard.ResumeLayout(false);
             this.tabPageKeyboard.PerformLayout();
+            this.groupBoxKeyPadSensitivity.ResumeLayout(false);
+            this.groupBoxKeyPadSensitivity.PerformLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.trackBarKeyPadSensitivity)).EndInit();
             this.groupBoxKeypressTiming.ResumeLayout(false);
             this.tabPageMouse.ResumeLayout(false);
             this.tabPageMouse.PerformLayout();
-            ((System.ComponentModel.ISupportInitialize)(this.trackBarKeyPadSensitivity)).EndInit();
-            this.groupBoxKeyPadSensitivity.ResumeLayout(false);
-            this.groupBoxKeyPadSensitivity.PerformLayout();
-            ((System.ComponentModel.ISupportInitialize)(this.trackBar1)).EndInit();
             this.groupBoxMouseSensitivity.ResumeLayout(false);
             this.groupBoxMouseSensitivity.PerformLayout();
             ((System.ComponentModel.ISupportInitialize)(this.trackBarMouseSensitivity)).EndInit();
-            this.groupBoxHardwareConfig.ResumeLayout(false);
+            this.tabPageAdvanced.ResumeLayout(false);
+            this.tabPageAdvanced.PerformLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.trackBar1)).EndInit();
             this.ResumeLayout(false);
 
         }
@@ -692,6 +723,8 @@ namespace IRServer.Plugin
         private System.Windows.Forms.TrackBar trackBar1;
         private System.Windows.Forms.Label labelMouseSensitivity;
         private System.Windows.Forms.GroupBox groupBoxHardwareConfig;
+        private System.Windows.Forms.TabPage tabPageAdvanced;
+        private System.Windows.Forms.CheckBox checkBoxKillImonM;
 
     }
 
diff --git a/IR Server Suite/IR Server Plugins/Imon USB Receivers/Configuration.cs b/IR Server Suite/IR Server Plugins/Imon USB Receivers/Configuration.cs
index 2fd9e30..dc86f42 100644
--- a/IR Server Suite/IR Server Plugins/Imon USB Receivers/Configuration.cs	
+++ b/IR Server Suite/IR Server Plugins/Imon USB Receivers/Configuration.cs	
@@ -149,6 +149,12 @@ namespace IRServer.Plugin
             set { checkBoxHandleMouseLocal.Checked = value; }
         }
 
+        public bool KillImonM
+        {
+            get { return checkBoxKillImonM.Checked; }
+            set { checkBoxKillImonM.Checked = value; }
+        }
+        
         private void buttonOK_Click(object sender, EventArgs e)
         {
             DialogResult = DialogResult.OK;
@@ -160,6 +166,5 @@ namespace IRServer.Plugin
             DialogResult = DialogResult.Cancel;
             Close();
         }
-
     }
 }
\ No newline at end of file
diff --git a/IR Server Suite/IR Server Plugins/Imon USB Receivers/Configuration.resx b/IR Server Suite/IR Server Plugins/Imon USB Receivers/Configuration.resx
index 905765b..fe6bddb 100644
--- a/IR Server Suite/IR Server Plugins/Imon USB Receivers/Configuration.resx	
+++ b/IR Server Suite/IR Server Plugins/Imon USB Receivers/Configuration.resx	
@@ -112,12 +112,12 @@
     <value>2.0</value>
   </resheader>
   <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
   <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <metadata name="toolTips.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+  <metadata name="toolTips.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>17, 17</value>
   </metadata>
 </root>
\ No newline at end of file
diff --git a/IR Server Suite/IR Server Plugins/Imon USB Receivers/Imon USB Receivers.cs b/IR Server Suite/IR Server Plugins/Imon USB Receivers/Imon USB Receivers.cs
index 5cc95fc..cdc6bd9 100644
--- a/IR Server Suite/IR Server Plugins/Imon USB Receivers/Imon USB Receivers.cs	
+++ b/IR Server Suite/IR Server Plugins/Imon USB Receivers/Imon USB Receivers.cs	
@@ -359,7 +359,10 @@ namespace IRServer.Plugin
             "Vid_15c2&Pid_0038",
             "Vid_15c2&Pid_0036",
             "Vid_15c2&Pid_0035",
-            "Vid_15c2&Pid_0039"
+            "Vid_15c2&Pid_0039",
+			"Vid_15c2&Pid_0041",
+            "Vid_15c2&Pid_0045",
+
         };
 
         private RawInput.RAWINPUTDEVICE[] _deviceTree;
@@ -395,6 +398,7 @@ namespace IRServer.Plugin
         private bool _enableMouseInput;
         private bool _handleMouseLocally = true;
         private double _mouseSensitivity = 1.0d;
+        private bool _killImonM;
 
         #endregion Configuration
 
@@ -527,44 +531,44 @@ namespace IRServer.Plugin
                 dataBytes = GetData();
                 if (dataBytes.Length == DosDeviceBufferSize)
                 {
-                  try
-                  {
-                    if (dataBytes[7] != 0xF0)
+                    try
                     {
-                      string temp = "";
-                      foreach (byte x in dataBytes)
-                        temp += String.Format("{0:X2}", x);
-                      if (col == 3)
-                      {
-                        col = 0;
-                        Debug.Write(temp + "\n");
-                      }
-                      else
-                      {
-                        col++;
-                        Debug.Write(temp + "  ");
-                      }
-                    }
+                        if (dataBytes[7] != 0xF0)
+                        {
+                            string temp = "";
+                            foreach (byte x in dataBytes)
+                                temp += String.Format("{0:X2}", x);
+                            if (col == 3)
+                            {
+                                col = 0;
+                                Debug.Write(temp + "\n");
+                            }
+                            else
+                            {
+                                col++;
+                                Debug.Write(temp + "  ");
+                            }
+                        }
 
-                    // Rubbish data:
-                    // FF, FF, FF, FF, FF, FF, 9F, FF, 
-                    // 00, 00, 00, 00, 00, 00, 00, F0, 
-                    if ((dataBytes[0] != 0xFF || dataBytes[1] != 0xFF || dataBytes[2] != 0xFF || dataBytes[3] != 0xFF ||
-                         dataBytes[4] != 0xFF || dataBytes[5] != 0xFF) &&
-                        (dataBytes[0] != 0x00 || dataBytes[1] != 0x00 || dataBytes[2] != 0x00 || dataBytes[3] != 0x00 ||
-                         dataBytes[4] != 0x00 || dataBytes[5] != 0x00))
+                        // Rubbish data:
+                        // FF, FF, FF, FF, FF, FF, 9F, FF, 
+                        // 00, 00, 00, 00, 00, 00, 00, F0, 
+                        if ((dataBytes[0] != 0xFF || dataBytes[1] != 0xFF || dataBytes[2] != 0xFF || dataBytes[3] != 0xFF ||
+                             dataBytes[4] != 0xFF || dataBytes[5] != 0xFF) &&
+                            (dataBytes[0] != 0x00 || dataBytes[1] != 0x00 || dataBytes[2] != 0x00 || dataBytes[3] != 0x00 ||
+                             dataBytes[4] != 0x00 || dataBytes[5] != 0x00))
+                        {
+                            ProcessInput(dataBytes);
+                        }
+                        Thread.Sleep(5);
+                    }
+                    catch
                     {
-                      ProcessInput(dataBytes);
+                        DebugWriteLine("Error processing input command!");
                     }
-                    Thread.Sleep(5);
-                  }
-                  catch
-                  {
-                    DebugWriteLine("Error processing input command!");
-                  }
                 }
             }
-            
+
             if (deviceBufferPtr != IntPtr.Zero)
                 Marshal.FreeHGlobal(deviceBufferPtr);
         }
@@ -756,7 +760,7 @@ namespace IRServer.Plugin
             int lastError = Marshal.GetLastWin32Error();
 
             if (_deviceHandle.IsInvalid)
-            {   
+            {
                 DebugWriteLine("Start_HID(): Failed to get open device");
                 // throw new Win32Exception(lastError, "Failed to get open device");
             }
@@ -989,7 +993,7 @@ namespace IRServer.Plugin
                 {
                     DebugWriteLine("Configured Hardware Mode: {0}\n", _remoteMode);
                 }
-    
+
                 _processReceiveThread = true;
                 _receiveThread = new Thread(ReceiveThread);
                 _receiveThread.Name = "iMon Receive Thread";
@@ -1158,6 +1162,9 @@ namespace IRServer.Plugin
                 _handleMouseLocally = bool.Parse(doc.DocumentElement.Attributes["HandleMouseLocally"].Value);
                 _mouseSensitivity = double.Parse(doc.DocumentElement.Attributes["MouseSensitivity"].Value);
                 _keyPadSensitivity = int.Parse(doc.DocumentElement.Attributes["KeyPadSensitivity"].Value);
+
+                _killImonM = bool.Parse(doc.DocumentElement.Attributes["KillImonM"].Value);
+
             }
             catch (Exception ex)
             {
@@ -1179,6 +1186,30 @@ namespace IRServer.Plugin
                 _enableMouseInput = true;
                 _handleMouseLocally = true;
                 _mouseSensitivity = 1.0d;
+
+                _killImonM = true;
+            }
+        }
+
+        /// <summary>
+        /// Load Setting For Kill Imon Manager from Config file.
+        /// </summary>
+        private void LoadKillImonM_Setting()
+        {
+            DebugWriteLine("LoadKillImonM_Setting(): LoadSettings specially for Kill Imon Manager()");
+            try
+            {
+                XmlDocument doc = new XmlDocument();
+                doc.Load(ConfigurationFile);
+
+                _killImonM = bool.Parse(doc.DocumentElement.Attributes["KillImonM"].Value);
+            }
+            catch (Exception ex)
+            {
+                // Possibility to add a link for load catch setting from LoadSetting()  
+                // with LoadSetting() directly
+                DebugWriteLine(ex.ToString());
+                _killImonM = true;
             }
         }
 
@@ -1217,6 +1248,8 @@ namespace IRServer.Plugin
                 writer.WriteAttributeString("MouseSensitivity", _mouseSensitivity.ToString());
                 writer.WriteAttributeString("KeyPadSensitivity", _keyPadSensitivity.ToString());
 
+                writer.WriteAttributeString("KillImonM", _killImonM.ToString());
+
 
                 writer.WriteEndElement(); // </settings>
                 writer.WriteEndDocument();
@@ -1302,10 +1335,10 @@ namespace IRServer.Plugin
                                 // on very rare systems RemoteDeviceName is reported wrong, no idea why. Lets change it!
                                 if (RemoteDeviceName.StartsWith(@"\??\"))
                                 {
-                                  DebugWriteLine("FindDevices_HID(): Changing to right RemoteDeviceName...");
-                                  DebugWriteLine("FindDevices_HID():    reported RemoteDeviceName: \"{0}\"", RemoteDeviceName);
-                                  RemoteDeviceName = @"\\?\" + RemoteDeviceName.Substring(4);
-                                  DebugWriteLine("FindDevices_HID():   corrected RemoteDeviceName: \"{0}\"", RemoteDeviceName);
+                                    DebugWriteLine("FindDevices_HID(): Changing to right RemoteDeviceName...");
+                                    DebugWriteLine("FindDevices_HID():    reported RemoteDeviceName: \"{0}\"", RemoteDeviceName);
+                                    RemoteDeviceName = @"\\?\" + RemoteDeviceName.Substring(4);
+                                    DebugWriteLine("FindDevices_HID():   corrected RemoteDeviceName: \"{0}\"", RemoteDeviceName);
                                 }
                             }
                             // check for keyboard device - MI_00&Col02#
@@ -2783,40 +2816,53 @@ namespace IRServer.Plugin
 
         private void KilliMonManager()
         {
-            DebugWriteLine("KilliMonManager()");
-            string iMonPath = FindiMonPath();
-            string iMonEXE = iMonPath + @"\iMON.exe";
-            if (iMonPath != string.Empty)
-            {
-                DebugWriteLine("KilliMonManager(): Found iMon Manager - Version {0}",
-                               FileVersionInfo.GetVersionInfo(iMonEXE).FileVersion);
-                Console.WriteLine("KilliMonManager(): Found iMon Manager - Version {0}",
-                                  FileVersionInfo.GetVersionInfo(iMonEXE).FileVersion);
-            }
-            bool hasExited = false;
-            Process[] VFDproc = Process.GetProcessesByName("iMON");
-            if (VFDproc.Length > 0)
+                    
+            // Load Checkbox setting for Kill Imon Manager before Start Driver
+            LoadKillImonM_Setting();
+
+            if (_killImonM)              
             {
-                DebugWriteLine("KilliMonManager(): Killing iMon Manager process");
-                VFDproc[0].Kill();
-                hasExited = false;
-                while (!hasExited)
+                DebugWriteLine("KilliMonManager(): Set for Kill Imon Manager");
+                DebugWriteLine("KilliMonManager()");
+                string iMonPath = FindiMonPath();
+                string iMonEXE = iMonPath + @"\iMON.exe";
+                if (iMonPath != string.Empty)
+                {
+                    DebugWriteLine("KilliMonManager(): Found iMon Manager - Version {0}",
+                                   FileVersionInfo.GetVersionInfo(iMonEXE).FileVersion);
+                    Console.WriteLine("KilliMonManager(): Found iMon Manager - Version {0}",
+                                      FileVersionInfo.GetVersionInfo(iMonEXE).FileVersion);
+                }
+                bool hasExited = false;
+                Process[] VFDproc = Process.GetProcessesByName("iMON");
+                if (VFDproc.Length > 0)
                 {
-                    Thread.Sleep(100);
-                    VFDproc[0].Dispose();
-                    VFDproc = Process.GetProcessesByName("iMON");
-                    if (VFDproc.Length == 0) hasExited = true;
+                    DebugWriteLine("KilliMonManager(): Killing iMon Manager process");
+                    VFDproc[0].Kill();
+                    hasExited = false;
+                    while (!hasExited)
+                    {
+                        Thread.Sleep(100);
+                        VFDproc[0].Dispose();
+                        VFDproc = Process.GetProcessesByName("iMON");
+                        if (VFDproc.Length == 0) hasExited = true;
+                    }
                 }
+                else
+                {
+                 DebugWriteLine("KilliMonManager(): iMon Manager not running");
+                }
+                 DebugWriteLine("KilliMonManager(): completed");
             }
             else
             {
-                DebugWriteLine("KilliMonManager(): iMon Manager not running");
+                DebugWriteLine("KilliMonManager(): Set for Not Kill Imon Manager !!! WARNING NOT RECOMMENDED !!!");
             }
-            DebugWriteLine("KilliMonManager(): completed");
-        }
 
+        }
         #endregion
 
 
+        
     }
 }
\ No newline at end of file
diff --git a/IR Server Suite/IR Server Plugins/Imon USB Receivers/PluginBaseInterfaces.cs b/IR Server Suite/IR Server Plugins/Imon USB Receivers/PluginBaseInterfaces.cs
index da3cbb6..8b0e816 100644
--- a/IR Server Suite/IR Server Plugins/Imon USB Receivers/PluginBaseInterfaces.cs	
+++ b/IR Server Suite/IR Server Plugins/Imon USB Receivers/PluginBaseInterfaces.cs	
@@ -91,24 +91,26 @@ namespace IRServer.Plugin
             DebugWriteLine("Start()");
             DebugWriteLine("Start(): DeviceDriverMode = {0}", Enum.GetName(typeof(DeviceType), DevType));
             // ensure that iMon manager will not interfere with us
-            KilliMonManager();
-
-            if (DevType == DeviceType.DOS)
-            {
-                DebugWriteLine("Start(): Starting DOS device");
-                Start_DOS();
-            }
-            else if (DevType == DeviceType.HID)
-            {
-                DebugWriteLine("Start(): Starting HID device");
-                Start_HID();
-            }
-            else
-            {
-                DebugWriteLine("Start(): No iMon devices found!");
-                throw new ApplicationException("No iMon devices found!");
+           
+             KilliMonManager();
+            
+                if (DevType == DeviceType.DOS)
+                {
+                    DebugWriteLine("Start(): Starting DOS device");
+                    Start_DOS();
+                }
+                else if (DevType == DeviceType.HID)
+                {
+                    DebugWriteLine("Start(): Starting HID device");
+                    Start_HID();
+                }
+                else
+                {
+                    DebugWriteLine("Start(): No iMon devices found!");
+                    throw new ApplicationException("No iMon devices found!");
+                }
+            
             }
-        }
 
         /// <summary>
         /// Suspend the IR Server plugin for HID devices when computer enters standby.
@@ -183,6 +185,8 @@ namespace IRServer.Plugin
             config.EnableMouse = _enableMouseInput;
             config.HandleMouseLocal = _handleMouseLocally;
             config.MouseSensitivity = _mouseSensitivity;
+
+            config.KillImonM = _killImonM;
             
             if (config.ShowDialog(owner) == DialogResult.OK)
             {
@@ -208,6 +212,8 @@ namespace IRServer.Plugin
                 _enableMouseInput = config.EnableMouse;
                 _handleMouseLocally = config.HandleMouseLocal;
                 _mouseSensitivity = config.MouseSensitivity;
+
+                _killImonM = config.KillImonM;
                 
                 SaveSettings();
                 if (_DriverMode == DeviceType.DOS)


