diff --git a/EduNetworkBuilder/NB.cs b/EduNetworkBuilder/NB.cs
index b5c56c0..a40ec59 100644
--- a/EduNetworkBuilder/NB.cs
+++ b/EduNetworkBuilder/NB.cs
@@ -11,6 +11,7 @@ using System.Xml;
 using System.Drawing;
 using System.Media;
 using System.Reflection;
+using System.Text.RegularExpressions;
 
 
 namespace EduNetworkBuilder
@@ -39,7 +40,7 @@ namespace EduNetworkBuilder
     public enum NBSoundType { none, success }
     public enum RTFWindowContents { help, about, release_notes }
     public enum NetTestType { NeedsLocalIPTo, NeedsDefaultGW, NeedsLinkToDevice, NeedsRouteToNet, 
-        SuccessfullyPings, SuccessfullyArps, SuccessfullyDHCPs, HelpRequest, FailedPing,
+        SuccessfullyPings, SuccessfullyArps, SuccessfullyDHCPs, HelpRequest, ReadContextHelp, FailedPing,
         LockAll, LockIP, LockRoute, LockNic, LockDHCP, LockGateway
     }
     public enum NetTestVerbosity { none, basic, hints, full }
@@ -293,6 +294,12 @@ namespace EduNetworkBuilder
             if (myWin.GameRandomGen == null) return null;
             return myWin.myNetwork;
         }
+        public static BuilderWindow GetBuilderWin()
+        {
+            BuilderWindow myWin = (BuilderWindow)Application.OpenForms["BuilderWindow"];
+            if (myWin == null) return null;
+            return myWin;
+        }
 
         /// <summary>
         /// Return a translated string in the current chosen language
@@ -306,13 +313,23 @@ namespace EduNetworkBuilder
             {
                 ResourceManager RM = GetResource();
                 CultureInfo CI = GetCulture();
-                string answer;
+                string answer="";
                 answer = RM.GetString(key, CI);
+                if (answer == null) return "";
                 return answer;
             }
             return myWin.Translate(key);
         }
 
+        public static string GetHelpTopicKey(HelpTopics What)
+        {
+            return "H_" + What.ToString() + "_Key";
+        }
+        public static string GetHelpTopicTitle(HelpTopics What)
+        {
+            return "H_" + What.ToString() + "_Title";
+        }
+
         public static DebugPausePoint GetDebugPauseSetting()
         {
             BuilderWindow myWin = (BuilderWindow)Application.OpenForms["BuilderWindow"];
@@ -483,9 +500,30 @@ namespace EduNetworkBuilder
 
         public static void ReadContextHelp(HelpTopics What)
         {
+            RTFWindow tForm = null;
             //make a new window if needed
+            foreach(Form myfrm in Application.OpenForms)
+            {
+                if(myfrm.Name == "Context")
+                {
+                    //We have a context window
+                    tForm = (RTFWindow)myfrm;
+                    break;
+                }
+            }
+            if(tForm == null)
+            { 
+                //We do not have one yet.  Make a new one
+                tForm = new RTFWindow(RTFWindowContents.help);
+                tForm.Name = "Context";
+            }
             //load help
+            tForm.Show();
             //Jump to the correct location
+            if(tForm != null)
+            {
+                tForm.JumpToSelection(What);
+            }
         }
 
         public static string GenerateMACAddress()
diff --git a/EduNetworkBuilder/NetTest.cs b/EduNetworkBuilder/NetTest.cs
index 27cc49e..c036ac6 100644
--- a/EduNetworkBuilder/NetTest.cs
+++ b/EduNetworkBuilder/NetTest.cs
@@ -5,6 +5,7 @@ using System.Text;
 using System.Threading.Tasks;
 using System.Drawing;
 using System.Xml;
+using System.Windows.Forms;
 
 namespace EduNetworkBuilder
 {
@@ -21,6 +22,7 @@ namespace EduNetworkBuilder
             sHost = srcHost;
             dHost = dstHost;
             TheTest = tTest;
+            SetInitialDoneState();
         }
 
         public NetTest(NetTest FromWhat)
@@ -28,6 +30,7 @@ namespace EduNetworkBuilder
             sHost = FromWhat.sHost;
             dHost = FromWhat.dHost;
             TheTest = FromWhat.TheTest;
+            SetInitialDoneState();
         }
         
         public NetTest(XmlNode theNode)
@@ -53,6 +56,22 @@ namespace EduNetworkBuilder
                     }
                 }
             }
+            SetInitialDoneState();
+        }
+
+        public void SetInitialDoneState()
+        {
+            switch (TheTest)
+            {
+                case NetTestType.LockAll:
+                case NetTestType.LockDHCP:
+                case NetTestType.LockGateway:
+                case NetTestType.LockIP:
+                case NetTestType.LockNic:
+                case NetTestType.LockRoute:
+                    TaskWasDone = true;
+                    break;
+            }
         }
 
         public void Save(XmlWriter writer)
@@ -96,7 +115,9 @@ namespace EduNetworkBuilder
             switch(amount)
             {
                 case NetTestVerbosity.basic:
-                    toreturn = "Has a problem";
+                    if(TheTest != NetTestType.ReadContextHelp)
+                        toreturn = "Has a problem";
+                    toreturn = NB.Translate("_ReadContext");
                     break;
                 case NetTestVerbosity.hints:
                     switch (TheTest)
@@ -149,6 +170,10 @@ namespace EduNetworkBuilder
                         case NetTestType.LockGateway:
                             toreturn = "Has Locked Gateway";
                             break;
+                        case NetTestType.ReadContextHelp:
+                            toreturn = NB.Translate("_ReadContext");
+                            break;
+
                     }
                     break;
                 case NetTestVerbosity.full:
@@ -202,6 +227,9 @@ namespace EduNetworkBuilder
                         case NetTestType.LockGateway:
                             toreturn = "Has Locked Gateway:";
                             break;
+                        case NetTestType.ReadContextHelp:
+                            toreturn = NB.Translate("_ReadContext");
+                            break;
                     }
                     break;
                 case NetTestVerbosity.none:
@@ -214,6 +242,10 @@ namespace EduNetworkBuilder
         public string GetDescription(NetTestVerbosity amount)
         {
             string toreturn = "";
+            if(TheTest == NetTestType.ReadContextHelp)
+            {
+                return TestDescription(amount) + " " + sHost;
+            }
             switch(amount)
             {
                 case NetTestVerbosity.basic:
@@ -248,6 +280,17 @@ namespace EduNetworkBuilder
             bool WasDone = TaskWasDone;
             if(!TestComplete())
             {
+                if(TheTest == NetTestType.ReadContextHelp && ChangeColor)
+                {
+                    BuilderWindow myWin = NB.GetBuilderWin();
+                    if(myWin != null)
+                    {
+                        Control ctl = myWin.GetControlNamed(sHost);
+                        if (ctl == null) return false;
+                        ctl.BackColor = WrongColor;
+                    } 
+                    return false;
+                }
                 Network theNet = NB.GetNetwork();
                 NetworkDevice Source = theNet.GetDeviceFromName(sHost);
                 if(Source!= null)
@@ -345,6 +388,7 @@ namespace EduNetworkBuilder
                 case NetTestType.SuccessfullyDHCPs:
                 case NetTestType.SuccessfullyPings:
                 case NetTestType.HelpRequest:
+                case NetTestType.ReadContextHelp:
                 case NetTestType.FailedPing:
                     return TaskWasDone; //This variable will tell us if these tests have been done.
                 case NetTestType.LockAll:
diff --git a/EduNetworkBuilder/NetTestEditor.cs b/EduNetworkBuilder/NetTestEditor.cs
index 727d9c3..40f5085 100644
--- a/EduNetworkBuilder/NetTestEditor.cs
+++ b/EduNetworkBuilder/NetTestEditor.cs
@@ -51,6 +51,8 @@ namespace EduNetworkBuilder
         private void btnOK_Click(object sender, EventArgs e)
         {
             OrigTest.UpdateValuesFromAnother(ToEdit);
+            OrigTest.TaskWasDone = false;  //We edited it.  Set it to false
+            OrigTest.SetInitialDoneState(); //Set some of them to true (locked. etc)
             Close();
         }
 
@@ -94,12 +96,21 @@ namespace EduNetworkBuilder
             }
             else if (ToEdit.TheTest == NetTestType.HelpRequest)
             {
-                foreach (string subnet in Enum.GetNames(typeof(NetTestVerbosity)))
+                foreach (string HelpLevel in Enum.GetNames(typeof(NetTestVerbosity)))
                 {
-                    cbDest.Items.Add(subnet);
+                    cbDest.Items.Add(HelpLevel);
                 }
                 cbDest.Items.Add("?Button");
             }
+            else if (ToEdit.TheTest == NetTestType.ReadContextHelp)
+            {
+                cbSource.Items.Clear();
+                foreach (string ContextHelp in Enum.GetNames(typeof(HelpTopics)))
+                {
+                    cbSource.Items.Add(ContextHelp);
+                }
+                cbDest.Items.Add("Read");
+            }
             else if (ToEdit.TheTest == NetTestType.LockAll || ToEdit.TheTest == NetTestType.LockGateway)
             {
                 cbDest.Items.Add("All");
@@ -199,6 +210,7 @@ namespace EduNetworkBuilder
             if (processing) return true; //If we are processing, we are all OK.
             Network theNet = NB.GetNetwork();
             NetTestType ntt = NB.ParseEnum<NetTestType>(cbTest.SelectedItem.ToString());
+            if (ntt == NetTestType.ReadContextHelp) return true;
             if (cbSource.SelectedItem.ToString() == cbDest.SelectedItem.ToString() && ntt != NetTestType.HelpRequest)
                 return false; //Source cannot equal dest
             if (theNet.GetDeviceFromName(cbSource.SelectedItem.ToString()) == null)
diff --git a/EduNetworkBuilder/Network.cs b/EduNetworkBuilder/Network.cs
index de5af0b..b40c2ed 100644
--- a/EduNetworkBuilder/Network.cs
+++ b/EduNetworkBuilder/Network.cs
@@ -711,7 +711,7 @@ namespace EduNetworkBuilder
                 sourceIPstring = ReverseDNSLookup(null, sourceIP); //this will either be an ip address or the host name
                 destIP = new IPAddress(dHost);
                 destIPstring = ReverseDNSLookup(null, destIP); //this will either be an ip address or the host name             
-                if ((nt.TheTest == NetTestType.HelpRequest || nt.TheTest == NetTestType.FailedPing) && 
+                if ((nt.TheTest == NetTestType.HelpRequest || nt.TheTest == NetTestType.FailedPing || nt.TheTest == NetTestType.ReadContextHelp) && 
                     (sHost == nt.sHost || sourceIPstring == nt.sHost) && 
                     (dHost == nt.dHost || destIPstring == nt.dHost))
                 {
diff --git a/EduNetworkBuilder/NetworkBuilder.Designer.cs b/EduNetworkBuilder/NetworkBuilder.Designer.cs
index ec27de7..6ae960f 100644
--- a/EduNetworkBuilder/NetworkBuilder.Designer.cs
+++ b/EduNetworkBuilder/NetworkBuilder.Designer.cs
@@ -41,6 +41,7 @@
             this.pasteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.undoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.changeLanguageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.allToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.dHCPRequestToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.clearArpTableToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@@ -76,7 +77,6 @@
             this.rbHelp1 = new System.Windows.Forms.RadioButton();
             this.HelpPanel = new System.Windows.Forms.Panel();
             this.myProgressBar = new System.Windows.Forms.ProgressBar();
-            this.changeLanguageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.msMainMenuStrip.SuspendLayout();
             ((System.ComponentModel.ISupportInitialize)(this.pbNetworkView)).BeginInit();
             this.HelpPanel.SuspendLayout();
@@ -94,7 +94,7 @@
             this.msMainMenuStrip.Location = new System.Drawing.Point(0, 0);
             this.msMainMenuStrip.Name = "msMainMenuStrip";
             this.msMainMenuStrip.Padding = new System.Windows.Forms.Padding(4, 2, 0, 2);
-            this.msMainMenuStrip.Size = new System.Drawing.Size(463, 24);
+            this.msMainMenuStrip.Size = new System.Drawing.Size(463, 28);
             this.msMainMenuStrip.TabIndex = 0;
             this.msMainMenuStrip.Text = "msMainMenuStrip";
             // 
@@ -107,41 +107,41 @@
             this.saveToolStripMenuItem,
             this.exitToolStripMenuItem});
             this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
-            this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
+            this.fileToolStripMenuItem.Size = new System.Drawing.Size(44, 24);
             this.fileToolStripMenuItem.Text = "File";
             // 
             // newToolStripMenuItem
             // 
             this.newToolStripMenuItem.Name = "newToolStripMenuItem";
-            this.newToolStripMenuItem.Size = new System.Drawing.Size(110, 22);
+            this.newToolStripMenuItem.Size = new System.Drawing.Size(125, 24);
             this.newToolStripMenuItem.Text = "New";
             this.newToolStripMenuItem.Click += new System.EventHandler(this.newToolStripMenuItem_Click);
             // 
             // loadToolStripMenuItem
             // 
             this.loadToolStripMenuItem.Name = "loadToolStripMenuItem";
-            this.loadToolStripMenuItem.Size = new System.Drawing.Size(110, 22);
+            this.loadToolStripMenuItem.Size = new System.Drawing.Size(125, 24);
             this.loadToolStripMenuItem.Text = "Load";
             this.loadToolStripMenuItem.Click += new System.EventHandler(this.loadToolStripMenuItem_Click);
             // 
             // reloadToolStripMenuItem
             // 
             this.reloadToolStripMenuItem.Name = "reloadToolStripMenuItem";
-            this.reloadToolStripMenuItem.Size = new System.Drawing.Size(110, 22);
+            this.reloadToolStripMenuItem.Size = new System.Drawing.Size(125, 24);
             this.reloadToolStripMenuItem.Text = "Reload";
             this.reloadToolStripMenuItem.Click += new System.EventHandler(this.reloadToolStripMenuItem_Click);
             // 
             // saveToolStripMenuItem
             // 
             this.saveToolStripMenuItem.Name = "saveToolStripMenuItem";
-            this.saveToolStripMenuItem.Size = new System.Drawing.Size(110, 22);
+            this.saveToolStripMenuItem.Size = new System.Drawing.Size(125, 24);
             this.saveToolStripMenuItem.Text = "Save";
             this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click);
             // 
             // exitToolStripMenuItem
             // 
             this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
-            this.exitToolStripMenuItem.Size = new System.Drawing.Size(110, 22);
+            this.exitToolStripMenuItem.Size = new System.Drawing.Size(125, 24);
             this.exitToolStripMenuItem.Text = "Exit";
             this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);
             // 
@@ -155,40 +155,47 @@
             this.optionsToolStripMenuItem,
             this.changeLanguageToolStripMenuItem});
             this.editToolStripMenuItem.Name = "editToolStripMenuItem";
-            this.editToolStripMenuItem.Size = new System.Drawing.Size(39, 20);
+            this.editToolStripMenuItem.Size = new System.Drawing.Size(47, 24);
             this.editToolStripMenuItem.Text = "Edit";
             // 
             // cutToolStripMenuItem
             // 
             this.cutToolStripMenuItem.Name = "cutToolStripMenuItem";
-            this.cutToolStripMenuItem.Size = new System.Drawing.Size(170, 22);
+            this.cutToolStripMenuItem.Size = new System.Drawing.Size(197, 24);
             this.cutToolStripMenuItem.Text = "Cut";
             // 
             // copyToolStripMenuItem
             // 
             this.copyToolStripMenuItem.Name = "copyToolStripMenuItem";
-            this.copyToolStripMenuItem.Size = new System.Drawing.Size(170, 22);
+            this.copyToolStripMenuItem.Size = new System.Drawing.Size(197, 24);
             this.copyToolStripMenuItem.Text = "Copy";
             // 
             // pasteToolStripMenuItem
             // 
             this.pasteToolStripMenuItem.Name = "pasteToolStripMenuItem";
-            this.pasteToolStripMenuItem.Size = new System.Drawing.Size(170, 22);
+            this.pasteToolStripMenuItem.Size = new System.Drawing.Size(197, 24);
             this.pasteToolStripMenuItem.Text = "Paste";
             // 
             // undoToolStripMenuItem
             // 
             this.undoToolStripMenuItem.Name = "undoToolStripMenuItem";
-            this.undoToolStripMenuItem.Size = new System.Drawing.Size(170, 22);
+            this.undoToolStripMenuItem.Size = new System.Drawing.Size(197, 24);
             this.undoToolStripMenuItem.Text = "Undo";
             // 
             // optionsToolStripMenuItem
             // 
             this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem";
-            this.optionsToolStripMenuItem.Size = new System.Drawing.Size(170, 22);
+            this.optionsToolStripMenuItem.Size = new System.Drawing.Size(197, 24);
             this.optionsToolStripMenuItem.Text = "Options";
             this.optionsToolStripMenuItem.Click += new System.EventHandler(this.optionsToolStripMenuItem_Click);
             // 
+            // changeLanguageToolStripMenuItem
+            // 
+            this.changeLanguageToolStripMenuItem.Name = "changeLanguageToolStripMenuItem";
+            this.changeLanguageToolStripMenuItem.Size = new System.Drawing.Size(197, 24);
+            this.changeLanguageToolStripMenuItem.Text = "Change Language";
+            this.changeLanguageToolStripMenuItem.Click += new System.EventHandler(this.changeLanguageToolStripMenuItem_Click);
+            // 
             // allToolStripMenuItem
             // 
             this.allToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
@@ -197,34 +204,34 @@
             this.clearIPsToolStripMenuItem,
             this.pingToolStripMenuItem});
             this.allToolStripMenuItem.Name = "allToolStripMenuItem";
-            this.allToolStripMenuItem.Size = new System.Drawing.Size(33, 20);
+            this.allToolStripMenuItem.Size = new System.Drawing.Size(39, 24);
             this.allToolStripMenuItem.Text = "All";
             // 
             // dHCPRequestToolStripMenuItem
             // 
             this.dHCPRequestToolStripMenuItem.Name = "dHCPRequestToolStripMenuItem";
-            this.dHCPRequestToolStripMenuItem.Size = new System.Drawing.Size(155, 22);
+            this.dHCPRequestToolStripMenuItem.Size = new System.Drawing.Size(181, 24);
             this.dHCPRequestToolStripMenuItem.Text = "DHCP Request";
             this.dHCPRequestToolStripMenuItem.Click += new System.EventHandler(this.dHCPRequestToolStripMenuItem_Click);
             // 
             // clearArpTableToolStripMenuItem
             // 
             this.clearArpTableToolStripMenuItem.Name = "clearArpTableToolStripMenuItem";
-            this.clearArpTableToolStripMenuItem.Size = new System.Drawing.Size(155, 22);
+            this.clearArpTableToolStripMenuItem.Size = new System.Drawing.Size(181, 24);
             this.clearArpTableToolStripMenuItem.Text = "Clear Arp Table";
             this.clearArpTableToolStripMenuItem.Click += new System.EventHandler(this.clearArpTableToolStripMenuItem_Click);
             // 
             // clearIPsToolStripMenuItem
             // 
             this.clearIPsToolStripMenuItem.Name = "clearIPsToolStripMenuItem";
-            this.clearIPsToolStripMenuItem.Size = new System.Drawing.Size(155, 22);
+            this.clearIPsToolStripMenuItem.Size = new System.Drawing.Size(181, 24);
             this.clearIPsToolStripMenuItem.Text = "Clear IPs";
             this.clearIPsToolStripMenuItem.Click += new System.EventHandler(this.clearIPsToolStripMenuItem_Click);
             // 
             // pingToolStripMenuItem
             // 
             this.pingToolStripMenuItem.Name = "pingToolStripMenuItem";
-            this.pingToolStripMenuItem.Size = new System.Drawing.Size(155, 22);
+            this.pingToolStripMenuItem.Size = new System.Drawing.Size(181, 24);
             this.pingToolStripMenuItem.Text = "Ping";
             this.pingToolStripMenuItem.Click += new System.EventHandler(this.pingToolStripMenuItem_Click);
             // 
@@ -236,34 +243,34 @@
             this.releaseNotesToolStripMenuItem,
             this.checkForUpdatesToolStripMenuItem});
             this.helpToolStripMenuItem.Name = "helpToolStripMenuItem";
-            this.helpToolStripMenuItem.Size = new System.Drawing.Size(44, 20);
+            this.helpToolStripMenuItem.Size = new System.Drawing.Size(53, 24);
             this.helpToolStripMenuItem.Text = "Help";
             // 
             // helpToolStripMenuItem1
             // 
             this.helpToolStripMenuItem1.Name = "helpToolStripMenuItem1";
-            this.helpToolStripMenuItem1.Size = new System.Drawing.Size(173, 22);
+            this.helpToolStripMenuItem1.Size = new System.Drawing.Size(201, 24);
             this.helpToolStripMenuItem1.Text = "Help";
             this.helpToolStripMenuItem1.Click += new System.EventHandler(this.helpToolStripMenuItem1_Click);
             // 
             // aboutToolStripMenuItem
             // 
             this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem";
-            this.aboutToolStripMenuItem.Size = new System.Drawing.Size(173, 22);
+            this.aboutToolStripMenuItem.Size = new System.Drawing.Size(201, 24);
             this.aboutToolStripMenuItem.Text = "About";
             this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click);
             // 
             // releaseNotesToolStripMenuItem
             // 
             this.releaseNotesToolStripMenuItem.Name = "releaseNotesToolStripMenuItem";
-            this.releaseNotesToolStripMenuItem.Size = new System.Drawing.Size(173, 22);
+            this.releaseNotesToolStripMenuItem.Size = new System.Drawing.Size(201, 24);
             this.releaseNotesToolStripMenuItem.Text = "Release Notes";
             this.releaseNotesToolStripMenuItem.Click += new System.EventHandler(this.releaseNotesToolStripMenuItem_Click);
             // 
             // checkForUpdatesToolStripMenuItem
             // 
             this.checkForUpdatesToolStripMenuItem.Name = "checkForUpdatesToolStripMenuItem";
-            this.checkForUpdatesToolStripMenuItem.Size = new System.Drawing.Size(173, 22);
+            this.checkForUpdatesToolStripMenuItem.Size = new System.Drawing.Size(201, 24);
             this.checkForUpdatesToolStripMenuItem.Text = "Check For Updates";
             // 
             // samplesToolStripMenuItem
@@ -273,13 +280,13 @@
             this.solvedToolStripMenuItem,
             this.toSolveToolStripMenuItem});
             this.samplesToolStripMenuItem.Name = "samplesToolStripMenuItem";
-            this.samplesToolStripMenuItem.Size = new System.Drawing.Size(63, 20);
+            this.samplesToolStripMenuItem.Size = new System.Drawing.Size(77, 24);
             this.samplesToolStripMenuItem.Text = "Samples";
             // 
             // puzzlesToolStripMenuItem
             // 
             this.puzzlesToolStripMenuItem.Name = "puzzlesToolStripMenuItem";
-            this.puzzlesToolStripMenuItem.Size = new System.Drawing.Size(119, 22);
+            this.puzzlesToolStripMenuItem.Size = new System.Drawing.Size(135, 24);
             this.puzzlesToolStripMenuItem.Text = "Puzzles";
             this.puzzlesToolStripMenuItem.Click += new System.EventHandler(this.puzzlesToolStripMenuItem_Click);
             // 
@@ -292,41 +299,41 @@
             this.threeNetworksToolStripMenuItem,
             this.firewallsToolStripMenuItem});
             this.solvedToolStripMenuItem.Name = "solvedToolStripMenuItem";
-            this.solvedToolStripMenuItem.Size = new System.Drawing.Size(119, 22);
+            this.solvedToolStripMenuItem.Size = new System.Drawing.Size(135, 24);
             this.solvedToolStripMenuItem.Text = "Solved";
             // 
             // dHCPToolStripMenuItem
             // 
             this.dHCPToolStripMenuItem.Name = "dHCPToolStripMenuItem";
-            this.dHCPToolStripMenuItem.Size = new System.Drawing.Size(157, 22);
+            this.dHCPToolStripMenuItem.Size = new System.Drawing.Size(181, 24);
             this.dHCPToolStripMenuItem.Text = "DHCP";
             this.dHCPToolStripMenuItem.Click += new System.EventHandler(this.dHCPToolStripMenuItem_Click);
             // 
             // oneNetworkToolStripMenuItem
             // 
             this.oneNetworkToolStripMenuItem.Name = "oneNetworkToolStripMenuItem";
-            this.oneNetworkToolStripMenuItem.Size = new System.Drawing.Size(157, 22);
+            this.oneNetworkToolStripMenuItem.Size = new System.Drawing.Size(181, 24);
             this.oneNetworkToolStripMenuItem.Text = "One Network";
             this.oneNetworkToolStripMenuItem.Click += new System.EventHandler(this.oneNetworkToolStripMenuItem_Click);
             // 
             // twoNetworksToolStripMenuItem
             // 
             this.twoNetworksToolStripMenuItem.Name = "twoNetworksToolStripMenuItem";
-            this.twoNetworksToolStripMenuItem.Size = new System.Drawing.Size(157, 22);
+            this.twoNetworksToolStripMenuItem.Size = new System.Drawing.Size(181, 24);
             this.twoNetworksToolStripMenuItem.Text = "Two Networks";
             this.twoNetworksToolStripMenuItem.Click += new System.EventHandler(this.twoNetworksToolStripMenuItem_Click);
             // 
             // threeNetworksToolStripMenuItem
             // 
             this.threeNetworksToolStripMenuItem.Name = "threeNetworksToolStripMenuItem";
-            this.threeNetworksToolStripMenuItem.Size = new System.Drawing.Size(157, 22);
+            this.threeNetworksToolStripMenuItem.Size = new System.Drawing.Size(181, 24);
             this.threeNetworksToolStripMenuItem.Text = "Three Networks";
             this.threeNetworksToolStripMenuItem.Click += new System.EventHandler(this.threeNetworksToolStripMenuItem_Click);
             // 
             // firewallsToolStripMenuItem
             // 
             this.firewallsToolStripMenuItem.Name = "firewallsToolStripMenuItem";
-            this.firewallsToolStripMenuItem.Size = new System.Drawing.Size(157, 22);
+            this.firewallsToolStripMenuItem.Size = new System.Drawing.Size(181, 24);
             this.firewallsToolStripMenuItem.Text = "Firewalls";
             this.firewallsToolStripMenuItem.Click += new System.EventHandler(this.firewallsToolStripMenuItem_Click);
             // 
@@ -339,41 +346,41 @@
             this.SolvedThreeNetworksToolStripMenuItem,
             this.firewallsToolStripMenuItem1});
             this.toSolveToolStripMenuItem.Name = "toSolveToolStripMenuItem";
-            this.toSolveToolStripMenuItem.Size = new System.Drawing.Size(119, 22);
+            this.toSolveToolStripMenuItem.Size = new System.Drawing.Size(135, 24);
             this.toSolveToolStripMenuItem.Text = "To Solve";
             // 
             // solvedDHCPToolStripMenuItem
             // 
             this.solvedDHCPToolStripMenuItem.Name = "solvedDHCPToolStripMenuItem";
-            this.solvedDHCPToolStripMenuItem.Size = new System.Drawing.Size(157, 22);
+            this.solvedDHCPToolStripMenuItem.Size = new System.Drawing.Size(181, 24);
             this.solvedDHCPToolStripMenuItem.Text = "DHCP";
             this.solvedDHCPToolStripMenuItem.Click += new System.EventHandler(this.solvedDHCPToolStripMenuItem_Click);
             // 
             // solvedOneNetworkToolStripMenuItem
             // 
             this.solvedOneNetworkToolStripMenuItem.Name = "solvedOneNetworkToolStripMenuItem";
-            this.solvedOneNetworkToolStripMenuItem.Size = new System.Drawing.Size(157, 22);
+            this.solvedOneNetworkToolStripMenuItem.Size = new System.Drawing.Size(181, 24);
             this.solvedOneNetworkToolStripMenuItem.Text = "One Network";
             this.solvedOneNetworkToolStripMenuItem.Click += new System.EventHandler(this.solvedOneNetworkToolStripMenuItem_Click);
             // 
             // solvedTwoNetworksToolStripMenuItem
             // 
             this.solvedTwoNetworksToolStripMenuItem.Name = "solvedTwoNetworksToolStripMenuItem";
-            this.solvedTwoNetworksToolStripMenuItem.Size = new System.Drawing.Size(157, 22);
+            this.solvedTwoNetworksToolStripMenuItem.Size = new System.Drawing.Size(181, 24);
             this.solvedTwoNetworksToolStripMenuItem.Text = "Two Networks";
             this.solvedTwoNetworksToolStripMenuItem.Click += new System.EventHandler(this.solvedTwoNetworksToolStripMenuItem_Click);
             // 
             // SolvedThreeNetworksToolStripMenuItem
             // 
             this.SolvedThreeNetworksToolStripMenuItem.Name = "SolvedThreeNetworksToolStripMenuItem";
-            this.SolvedThreeNetworksToolStripMenuItem.Size = new System.Drawing.Size(157, 22);
+            this.SolvedThreeNetworksToolStripMenuItem.Size = new System.Drawing.Size(181, 24);
             this.SolvedThreeNetworksToolStripMenuItem.Text = "Three Networks";
             this.SolvedThreeNetworksToolStripMenuItem.Click += new System.EventHandler(this.SolvedThreeNetworksToolStripMenuItem_Click);
             // 
             // firewallsToolStripMenuItem1
             // 
             this.firewallsToolStripMenuItem1.Name = "firewallsToolStripMenuItem1";
-            this.firewallsToolStripMenuItem1.Size = new System.Drawing.Size(157, 22);
+            this.firewallsToolStripMenuItem1.Size = new System.Drawing.Size(181, 24);
             this.firewallsToolStripMenuItem1.Text = "Firewalls";
             this.firewallsToolStripMenuItem1.Click += new System.EventHandler(this.firewallsToolStripMenuItem1_Click);
             // 
@@ -382,7 +389,7 @@
             this.panelChoices.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
             | System.Windows.Forms.AnchorStyles.Left)));
             this.panelChoices.Location = new System.Drawing.Point(10, 25);
-            this.panelChoices.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
+            this.panelChoices.Margin = new System.Windows.Forms.Padding(2);
             this.panelChoices.Name = "panelChoices";
             this.panelChoices.Size = new System.Drawing.Size(59, 300);
             this.panelChoices.TabIndex = 2;
@@ -393,7 +400,7 @@
             | System.Windows.Forms.AnchorStyles.Right)));
             this.lbMessages.FormattingEnabled = true;
             this.lbMessages.Location = new System.Drawing.Point(74, 331);
-            this.lbMessages.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
+            this.lbMessages.Margin = new System.Windows.Forms.Padding(2);
             this.lbMessages.Name = "lbMessages";
             this.lbMessages.Size = new System.Drawing.Size(366, 43);
             this.lbMessages.TabIndex = 3;
@@ -418,7 +425,7 @@
             | System.Windows.Forms.AnchorStyles.Right)));
             this.pbNetworkView.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
             this.pbNetworkView.Location = new System.Drawing.Point(74, 25);
-            this.pbNetworkView.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
+            this.pbNetworkView.Margin = new System.Windows.Forms.Padding(2);
             this.pbNetworkView.Name = "pbNetworkView";
             this.pbNetworkView.Size = new System.Drawing.Size(366, 300);
             this.pbNetworkView.TabIndex = 1;
@@ -433,7 +440,7 @@
             // 
             this.btnHelp.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
             this.btnHelp.Location = new System.Drawing.Point(2, 2);
-            this.btnHelp.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
+            this.btnHelp.Margin = new System.Windows.Forms.Padding(2);
             this.btnHelp.Name = "btnHelp";
             this.btnHelp.Size = new System.Drawing.Size(21, 20);
             this.btnHelp.TabIndex = 5;
@@ -445,10 +452,10 @@
             // 
             this.rbHelp4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
             this.rbHelp4.AutoSize = true;
-            this.rbHelp4.Location = new System.Drawing.Point(8, 28);
-            this.rbHelp4.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
+            this.rbHelp4.Location = new System.Drawing.Point(5, 28);
+            this.rbHelp4.Margin = new System.Windows.Forms.Padding(2);
             this.rbHelp4.Name = "rbHelp4";
-            this.rbHelp4.Size = new System.Drawing.Size(14, 13);
+            this.rbHelp4.Size = new System.Drawing.Size(17, 16);
             this.rbHelp4.TabIndex = 6;
             this.rbHelp4.UseVisualStyleBackColor = true;
             this.rbHelp4.CheckedChanged += new System.EventHandler(this.rbHelp4_CheckedChanged);
@@ -457,10 +464,10 @@
             // 
             this.rbHelp3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
             this.rbHelp3.AutoSize = true;
-            this.rbHelp3.Location = new System.Drawing.Point(8, 44);
-            this.rbHelp3.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
+            this.rbHelp3.Location = new System.Drawing.Point(5, 44);
+            this.rbHelp3.Margin = new System.Windows.Forms.Padding(2);
             this.rbHelp3.Name = "rbHelp3";
-            this.rbHelp3.Size = new System.Drawing.Size(14, 13);
+            this.rbHelp3.Size = new System.Drawing.Size(17, 16);
             this.rbHelp3.TabIndex = 7;
             this.rbHelp3.UseVisualStyleBackColor = true;
             this.rbHelp3.CheckedChanged += new System.EventHandler(this.rbHelp3_CheckedChanged);
@@ -469,10 +476,10 @@
             // 
             this.rbHelp2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
             this.rbHelp2.AutoSize = true;
-            this.rbHelp2.Location = new System.Drawing.Point(8, 62);
-            this.rbHelp2.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
+            this.rbHelp2.Location = new System.Drawing.Point(5, 62);
+            this.rbHelp2.Margin = new System.Windows.Forms.Padding(2);
             this.rbHelp2.Name = "rbHelp2";
-            this.rbHelp2.Size = new System.Drawing.Size(14, 13);
+            this.rbHelp2.Size = new System.Drawing.Size(17, 16);
             this.rbHelp2.TabIndex = 8;
             this.rbHelp2.UseVisualStyleBackColor = true;
             this.rbHelp2.CheckedChanged += new System.EventHandler(this.rbHelp2_CheckedChanged);
@@ -482,10 +489,10 @@
             this.rbHelp1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
             this.rbHelp1.AutoSize = true;
             this.rbHelp1.Checked = true;
-            this.rbHelp1.Location = new System.Drawing.Point(8, 80);
-            this.rbHelp1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
+            this.rbHelp1.Location = new System.Drawing.Point(5, 80);
+            this.rbHelp1.Margin = new System.Windows.Forms.Padding(2);
             this.rbHelp1.Name = "rbHelp1";
-            this.rbHelp1.Size = new System.Drawing.Size(14, 13);
+            this.rbHelp1.Size = new System.Drawing.Size(17, 16);
             this.rbHelp1.TabIndex = 9;
             this.rbHelp1.TabStop = true;
             this.rbHelp1.UseVisualStyleBackColor = true;
@@ -500,28 +507,21 @@
             this.HelpPanel.Controls.Add(this.rbHelp3);
             this.HelpPanel.Controls.Add(this.rbHelp2);
             this.HelpPanel.Location = new System.Drawing.Point(438, 25);
-            this.HelpPanel.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
+            this.HelpPanel.Margin = new System.Windows.Forms.Padding(2);
             this.HelpPanel.Name = "HelpPanel";
-            this.HelpPanel.Size = new System.Drawing.Size(25, 98);
+            this.HelpPanel.Size = new System.Drawing.Size(25, 300);
             this.HelpPanel.TabIndex = 10;
             // 
             // myProgressBar
             // 
             this.myProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
             this.myProgressBar.Location = new System.Drawing.Point(10, 330);
-            this.myProgressBar.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
+            this.myProgressBar.Margin = new System.Windows.Forms.Padding(2);
             this.myProgressBar.Name = "myProgressBar";
             this.myProgressBar.Size = new System.Drawing.Size(59, 19);
             this.myProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Continuous;
             this.myProgressBar.TabIndex = 11;
             // 
-            // changeLanguageToolStripMenuItem
-            // 
-            this.changeLanguageToolStripMenuItem.Name = "changeLanguageToolStripMenuItem";
-            this.changeLanguageToolStripMenuItem.Size = new System.Drawing.Size(170, 22);
-            this.changeLanguageToolStripMenuItem.Text = "Change Language";
-            this.changeLanguageToolStripMenuItem.Click += new System.EventHandler(this.changeLanguageToolStripMenuItem_Click);
-            // 
             // BuilderWindow
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -536,7 +536,7 @@
             this.Controls.Add(this.HelpPanel);
             this.Icon = global::EduNetworkBuilder.Properties.Resources.NBIco;
             this.MainMenuStrip = this.msMainMenuStrip;
-            this.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
+            this.Margin = new System.Windows.Forms.Padding(2);
             this.Name = "BuilderWindow";
             this.Text = "Network Builder";
             this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.BuilderWindow_FormClosing);
diff --git a/EduNetworkBuilder/NetworkBuilder.cs b/EduNetworkBuilder/NetworkBuilder.cs
index fb3b051..25ae630 100644
--- a/EduNetworkBuilder/NetworkBuilder.cs
+++ b/EduNetworkBuilder/NetworkBuilder.cs
@@ -35,6 +35,7 @@ namespace EduNetworkBuilder
         private ResourceManager LanguageResources = null;
         private CultureInfo LanguageCulture = null;
         public string ChosenLanguage = "en";  //The language to try to load  
+        private List<Control> HelpTopicButtons = new List<Control>();
 
         public BuilderWindow()
         {
@@ -151,6 +152,7 @@ namespace EduNetworkBuilder
             CultureInfo CI = GetCulture();
             string answer;
             answer = RM.GetString(Key, CI);
+            if (answer == null) return "";
             return answer;
         }
 
@@ -164,6 +166,77 @@ namespace EduNetworkBuilder
             //MessageBox.Show(e.KeyCode.ToString());
         }
 
+        /// <summary>
+        /// Return the control with the given name.  Used primarily to color help buttons
+        /// </summary>
+        /// <param name="Name">The name of the control to search for</param>
+        /// <returns>The control, or null if no control is found</returns>
+        public Control GetControlNamed(string Name)
+        {
+            Control[] tList =  Controls.Find(Name, true);
+            if (tList.Count() > 0) return tList[0]; //return the first one
+            return null; //return nothing
+        }
+
+        private void UpdateHelpTopicButtons()
+        {
+            Button tButton;
+            this.SuspendLayout();
+            foreach(Control tCont in HelpTopicButtons)
+            {
+                tCont.Click -= btnRead_Click;
+                Controls.Remove(tCont); //remove them all
+                HelpPanel.Controls.Remove(tCont); //Remove from the panel
+                tCont.Dispose();
+            }
+            HelpTopicButtons.Clear(); //They are all gone.
+
+            //Make a bunch of new buttons.
+            int count=0;
+            int offset = btnHelp.Height + 3;
+            foreach (HelpTopics HT in myNetwork.SuggestedReadings)
+            {
+                tButton = new Button();
+                tButton.Location = new Point(btnHelp.Location.X, rbHelp1.Location.Y + rbHelp1.Height + 5 + (offset * count));
+                tButton.Text = (count + 1).ToString();
+                tButton.Width = btnHelp.Width;
+                tButton.Height = btnHelp.Height;
+                tButton.Click += btnRead_Click;
+                tButton.Name = HT.ToString();
+                HelpPanel.Controls.Add(tButton);
+                myTooltip.SetToolTip(tButton, NB.Translate("_ReadContext") + " " + NB.Translate(NB.GetHelpTopicTitle(HT)));
+                HelpTopicButtons.Add(tButton);
+                count++;
+            }
+            foreach(NetTest nt in myNetwork.NetTests)
+            {
+                if(nt.TheTest == NetTestType.ReadContextHelp)
+                {
+                    nt.ColorItemsIfNeeded(true);
+                }
+            }
+            this.ResumeLayout();
+        }
+
+        /// <summary>
+        /// Called by the context_read clicks
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void btnRead_Click(object sender, EventArgs e)
+        {
+            Button me = (Button)sender;
+            HelpTopics HT = NB.TryParseEnum<HelpTopics>(me.Name, HelpTopics.None);
+            if(HT != HelpTopics.None)
+            {
+                myNetwork.NoteActionDone(NetTestType.ReadContextHelp, me.Name, "Read");
+                NB.ReadContextHelp(HT);
+            }
+            UpdateHelpTopicButtons();
+            UpdateForm();
+            UpdateMenu();
+        }
+
         private void myTooltip_Popup(Object sender, PopupEventArgs e)
         {
             //In case we have a puzzle we are trying to solve
@@ -309,6 +382,7 @@ namespace EduNetworkBuilder
                     rbHelp1.Checked = true;
                     break;
             }
+            UpdateHelpTopicButtons();
             processing = false;            
         }
 
diff --git a/EduNetworkBuilder/OptionsWindow.cs b/EduNetworkBuilder/OptionsWindow.cs
index 6d2d2df..ba3ac4c 100644
--- a/EduNetworkBuilder/OptionsWindow.cs
+++ b/EduNetworkBuilder/OptionsWindow.cs
@@ -225,6 +225,11 @@ namespace EduNetworkBuilder
         private void lbTags_Read_Click(object sender, EventArgs e)
         {
             //We need to add this.
+            HelpTopics HT = HelpTopics.None;
+            if (lbTags.SelectedIndex >= lbTags.Items.Count) return;
+            if (lbTags.SelectedIndex < 0) return;
+            HT = NB.TryParseEnum(lbTags.SelectedItem.ToString(), HelpTopics.None);
+            NB.ReadContextHelp(HT);
         }
 
         private void lbTags_Delete_Click(object sender, EventArgs e)
diff --git a/EduNetworkBuilder/RTFWindow.cs b/EduNetworkBuilder/RTFWindow.cs
index c87372d..2db2f31 100644
--- a/EduNetworkBuilder/RTFWindow.cs
+++ b/EduNetworkBuilder/RTFWindow.cs
@@ -61,6 +61,22 @@ namespace EduNetworkBuilder
             LanguagifyComponents();
             string currentDir = Directory.GetCurrentDirectory();
             string myRTF;
+            Form myWin = null;
+            myWin = Application.OpenForms["RTFWindow"];
+            if (myWin == null)
+            {
+                myWin = Application.OpenForms["BuilderWindow"];
+            }
+            if (myWin != null)
+            {
+                StartPosition = FormStartPosition.Manual;
+                Point newlocation = new Point(myWin.Location.X + myWin.Width + 5, myWin.Location.Y);
+                if (newlocation.X > (Screen.PrimaryScreen.Bounds.Width + 5))
+                {
+                    newlocation = new Point(Screen.PrimaryScreen.Bounds.Width - 5, newlocation.Y);
+                }
+                Location = newlocation;
+            }
             if (WhatToShow == RTFWindowContents.help)
             {                
                 myRTF = Properties.Resources.Help;
@@ -78,6 +94,20 @@ namespace EduNetworkBuilder
             }
         }
 
+        public void JumpToSelection(string WhatToFind)
+        {
+            int indexToText = rtbContent.Find(WhatToFind);
+            if (indexToText > 0)
+            {
+                rtbContent.SelectionStart = indexToText;
+                rtbContent.ScrollToCaret();
+            }
+        }
+        public void JumpToSelection(HelpTopics WhatToFind)
+        {
+            string toFind = NB.Translate(NB.GetHelpTopicKey(WhatToFind));
+            JumpToSelection(toFind);
+        }
         private void LanguagifyComponents()
         {
             Text = NB.Translate("RTFW_rtbContent");
diff --git a/EduNetworkBuilder/Resources/languages/edustrings.resx b/EduNetworkBuilder/Resources/languages/edustrings.resx
index 4790067..e5594e8 100644
--- a/EduNetworkBuilder/Resources/languages/edustrings.resx
+++ b/EduNetworkBuilder/Resources/languages/edustrings.resx
@@ -693,4 +693,8 @@
     <value>When To Subnet</value>
     <comment>Text used in the program on buttons and the like</comment>
   </data>
+  <data name="_ReadContext" xml:space="preserve">
+    <value>Read Context Help for:</value>
+    <comment>Generic statement used many places</comment>
+  </data>
 </root>
\ No newline at end of file