Index: src/sas/sasgui/guiframe/aboutbox.py
===================================================================
--- src/sas/sasgui/guiframe/aboutbox.py	(revision 959eb0181ad06828a748f04512f953aad5b31659)
+++ src/sas/sasgui/guiframe/aboutbox.py	(revision 959eb0181ad06828a748f04512f953aad5b31659)
@@ -31,10 +31,10 @@
       (os.path.isfile("%s/%s.pyc" % (path, 'local_config'))):
         fObj, path, descr = imp.find_module('local_config', [path])
-        config = imp.load_module('local_config', fObj, path, descr)  
+        config = imp.load_module('local_config', fObj, path, descr)
     else:
         # Try simply importing local_config
         import local_config as config
 except:
-    # Didn't find local config, load the default 
+    # Didn't find local config, load the default
     import config
 
@@ -42,9 +42,9 @@
     """
     Launches browser and opens specified url
-    
+
     In some cases may require BROWSER environment variable to be set up.
-    
+
     :param url: URL to open
-    
+
     """
     import webbrowser
@@ -55,10 +55,10 @@
     """
     "About" Dialog
-    
+
     Shows product name, current version, authors, and link to the product page.
     Current version is taken from version.py
-    
-    """
-    
+
+    """
+
     def __init__(self, *args, **kwds):
 
@@ -66,11 +66,11 @@
         kwds["style"] = wx.DEFAULT_DIALOG_STYLE
         wx.Dialog.__init__(self, *args, **kwds)
-        
+
         file_dir = os.path.dirname(__file__)
-        
+
         # Mac doesn't display images with transparent background so well,
         # keep it for Windows
         image = file_dir + "/images/angles_flat.png"
-        
+
         if os.path.isfile(config._corner_image):
             image = config._corner_image
@@ -80,5 +80,5 @@
         else:
             self.bitmap_logo = wx.StaticBitmap(self, -1, wx.Bitmap(image))
-        
+
         self.label_title = wx.StaticText(self, -1, config.__appname__)
         self.label_version = wx.StaticText(self, -1, "")
@@ -112,5 +112,5 @@
         #self.bitmap_button_danse = wx.BitmapButton(self, -1, wx.NullBitmap)
         self.bitmap_button_msu = wx.BitmapButton(self, -1, wx.NullBitmap)
-        
+
         self.bitmap_button_isis = wx.BitmapButton(self, -1, wx.NullBitmap)
         self.bitmap_button_ess = wx.BitmapButton(self, -1, wx.NullBitmap)
@@ -119,5 +119,5 @@
         self.bitmap_button_tudelft = wx.BitmapButton(self, -1, wx.NullBitmap)
         self.bitmap_button_dls = wx.BitmapButton(self, -1, wx.NullBitmap)
-        
+
         self.static_line_3 = wx.StaticLine(self, -1)
         self.button_OK = wx.Button(self, wx.ID_OK, "OK")
@@ -125,5 +125,5 @@
         self.__set_properties()
         self.__do_layout()
-        
+
         self.Bind(wx.EVT_BUTTON, self.onNistLogo, self.bitmap_button_nist)
         self.Bind(wx.EVT_BUTTON, self.onUmdLogo, self.bitmap_button_umd)
@@ -145,5 +145,5 @@
         random.shuffle(config._authors)
         strLabel = ", ".join(config._authors)
-        
+
         # display version and svn revison numbers
         verwords = config.__version__.split('.')
@@ -157,16 +157,16 @@
         self.label_version.SetLabel(config.__version__)#(version)
         self.label_svnrevision.SetLabel(build_num)
-        
+
         # set bitmaps for logo buttons
         image = file_dir + "/images/nist_logo.png"
         if os.path.isfile(config._nist_logo):
             image = config._nist_logo
-        logo = wx.Bitmap(image)        
+        logo = wx.Bitmap(image)
         self.bitmap_button_nist.SetBitmapLabel(logo)
-        
+
         image = file_dir + "/images/umd_logo.png"
         if os.path.isfile(config._umd_logo):
             image = config._umd_logo
-        logo = wx.Bitmap(image)        
+        logo = wx.Bitmap(image)
         self.bitmap_button_umd.SetBitmapLabel(logo)
 
@@ -174,5 +174,5 @@
         if os.path.isfile(config._ornl_logo):
             image = config._ornl_logo
-        logo = wx.Bitmap(image)        
+        logo = wx.Bitmap(image)
         self.bitmap_button_ornl.SetBitmapLabel(logo)
 
@@ -181,11 +181,11 @@
         if os.path.isfile(config._sns_logo):
             image = config._sns_logo
-        logo = wx.Bitmap(image)        
+        logo = wx.Bitmap(image)
         self.bitmap_button_sns.SetBitmapLabel(logo)
-        
+
         image = file_dir + "/images/nsf_logo.png"
         if os.path.isfile(config._nsf_logo):
             image = config._nsf_logo
-        logo = wx.Bitmap(image)        
+        logo = wx.Bitmap(image)
         self.bitmap_button_nsf.SetBitmapLabel(logo)
 
@@ -196,14 +196,14 @@
         self.bitmap_button_danse.SetBitmapLabel(logo)
         """
-        image = file_dir + "/images/utlogo.gif"
+        image = file_dir + "/images/utlogo.png"
         if os.path.isfile(config._inst_logo):
             image = config._inst_logo
         logo = wx.Bitmap(image)
         self.bitmap_button_msu.SetBitmapLabel(logo)
-        
+
         image = file_dir + "/images/isis_logo.png"
         if os.path.isfile(config._isis_logo):
             image = config._isis_logo
-        logo = wx.Bitmap(image)        
+        logo = wx.Bitmap(image)
         self.bitmap_button_isis.SetBitmapLabel(logo)
 
@@ -213,5 +213,5 @@
         logo = wx.Bitmap(image)
         self.bitmap_button_ess.SetBitmapLabel(logo)
-        
+
         image = file_dir + "/images/ill_logo.png"
         if os.path.isfile(config._ill_logo):
@@ -219,5 +219,5 @@
         logo = wx.Bitmap(image)
         self.bitmap_button_ill.SetBitmapLabel(logo)
-        
+
         image = file_dir + "/images/ansto_logo.png"
         if os.path.isfile(config._ansto_logo):
@@ -225,5 +225,5 @@
         logo = wx.Bitmap(image)
         self.bitmap_button_ansto.SetBitmapLabel(logo)
-        
+
         image = file_dir + "/images/tudelft_logo.png"
         if os.path.isfile(config._tudelft_logo):
@@ -231,5 +231,5 @@
         logo = wx.Bitmap(image)
         self.bitmap_button_tudelft.SetBitmapLabel(logo)
-        
+
         image = file_dir + "/images/dls_logo.png"
         if os.path.isfile(config._dls_logo):
@@ -237,5 +237,5 @@
         logo = wx.Bitmap(image)
         self.bitmap_button_dls.SetBitmapLabel(logo)
-                
+
         # resize dialog window to fit version number nicely
         if wx.VERSION >= (2, 7, 2, 0):
@@ -244,5 +244,5 @@
             size = [self.GetBestFittingSize()[0], self.GetSize()[1]]
         self.Fit()
-        
+
     def __set_properties(self):
         """
@@ -310,36 +310,36 @@
         sizer_main.Add(self.static_line_2, 0, wx.EXPAND, 0)
 
-        sizer_logos.Add(self.bitmap_button_msu, 0, 
+        sizer_logos.Add(self.bitmap_button_msu, 0,
                         wx.LEFT|wx.ADJUST_MINSIZE, 2)
         #sizer_logos.Add(self.bitmap_button_danse, 0,
         #                wx.LEFT|wx.ADJUST_MINSIZE, 2)
-        #sizer_logos.Add(self.bitmap_button_nsf, 0, 
+        #sizer_logos.Add(self.bitmap_button_nsf, 0,
         #                wx.LEFT|wx.ADJUST_MINSIZE, 2)
-        sizer_logos.Add(self.bitmap_button_umd, 0, 
-                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
-        sizer_logos.Add(self.bitmap_button_nist, 0, 
-                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
-        #sizer_logos.Add(self.bitmap_button_sns, 0, 
+        sizer_logos.Add(self.bitmap_button_umd, 0,
+                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
+        sizer_logos.Add(self.bitmap_button_nist, 0,
+                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
+        #sizer_logos.Add(self.bitmap_button_sns, 0,
         #                wx.LEFT|wx.ADJUST_MINSIZE, 2)
-        sizer_logos.Add(self.bitmap_button_ornl, 0, 
-                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
-        sizer_logos.Add(self.bitmap_button_isis, 0, 
-                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
-        sizer_logos.Add(self.bitmap_button_ess, 0, 
-                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
-        sizer_logos.Add(self.bitmap_button_ill, 0, 
-                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
-        sizer_logos.Add(self.bitmap_button_ansto, 0, 
-                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
-        sizer_logos.Add(self.bitmap_button_tudelft, 0, 
-                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
-        sizer_logos.Add(self.bitmap_button_dls, 0, 
-                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
-                
+        sizer_logos.Add(self.bitmap_button_ornl, 0,
+                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
+        sizer_logos.Add(self.bitmap_button_isis, 0,
+                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
+        sizer_logos.Add(self.bitmap_button_ess, 0,
+                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
+        sizer_logos.Add(self.bitmap_button_ill, 0,
+                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
+        sizer_logos.Add(self.bitmap_button_ansto, 0,
+                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
+        sizer_logos.Add(self.bitmap_button_tudelft, 0,
+                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
+        sizer_logos.Add(self.bitmap_button_dls, 0,
+                        wx.LEFT|wx.ADJUST_MINSIZE, 2)
+
         sizer_logos.Add((10, 50), 0, wx.ADJUST_MINSIZE, 0)
         sizer_main.Add(sizer_logos, 0, wx.EXPAND, 0)
         sizer_main.Add(self.static_line_3, 0, wx.EXPAND, 0)
         sizer_button.Add((20, 40), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
-        sizer_button.Add(self.button_OK, 0, 
+        sizer_button.Add(self.button_OK, 0,
                          wx.RIGHT|wx.ADJUST_MINSIZE|wx.CENTER, 10)
         sizer_main.Add(sizer_button, 0, wx.EXPAND, 0)
@@ -350,5 +350,5 @@
         # end wxGlade
 
-    def onNistLogo(self, event): 
+    def onNistLogo(self, event):
         """
         """
@@ -356,6 +356,6 @@
         launchBrowser(config._nist_url)
         event.Skip()
-        
-    def onUmdLogo(self, event): 
+
+    def onUmdLogo(self, event):
         """
         """
@@ -363,6 +363,6 @@
         launchBrowser(config._umd_url)
         event.Skip()
-        
-    def onOrnlLogo(self, event): 
+
+    def onOrnlLogo(self, event):
         """
         """
@@ -370,6 +370,6 @@
         launchBrowser(config._ornl_url)
         event.Skip()
-        
-    def onSnsLogo(self, event): 
+
+    def onSnsLogo(self, event):
         """
         """
@@ -377,6 +377,6 @@
         launchBrowser(config._sns_url)
         event.Skip()
-                
-    def onNsfLogo(self, event): 
+
+    def onNsfLogo(self, event):
         """
         """
@@ -394,10 +394,10 @@
     def onUTLogo(self, event):
         """
-        """ 
+        """
         # wxGlade: DialogAbout.<event_handler>
         launchBrowser(config._inst_url)
         event.Skip()
 
-    def onIsisLogo(self, event): 
+    def onIsisLogo(self, event):
         """
         """
@@ -415,5 +415,5 @@
     def onIllLogo(self, event):
         """
-        """ 
+        """
         # wxGlade: DialogAbout.<event_handler>
         launchBrowser(config._ill_url)
@@ -422,5 +422,5 @@
     def onAnstoLogo(self, event):
         """
-        """ 
+        """
         # wxGlade: DialogAbout.<event_handler>
         launchBrowser(config._ansto_url)
@@ -429,5 +429,5 @@
     def onTudelftLogo(self, event):
         """
-        """ 
+        """
         # wxGlade: DialogAbout.<event_handler>
         launchBrowser(config._tudelft_url)
@@ -436,5 +436,5 @@
     def onDlsLogo(self, event):
         """
-        """ 
+        """
         # wxGlade: DialogAbout.<event_handler>
         launchBrowser(config._dls_url)
@@ -462,4 +462,4 @@
     app = MyApp(0)
     app.MainLoop()
-    
-##### end of testing code #####################################################    
+
+##### end of testing code #####################################################
Index: src/sas/sasgui/guiframe/config.py
===================================================================
--- src/sas/sasgui/guiframe/config.py	(revision a1b8fee73528559155793dd74cda07d0c32e9d72)
+++ src/sas/sasgui/guiframe/config.py	(revision a1b8fee73528559155793dd74cda07d0c32e9d72)
@@ -77,5 +77,5 @@
 _nsf_logo = os.path.join(icon_path, "nsf_logo.png")
 _danse_logo = os.path.join(icon_path, "danse_logo.png")
-_inst_logo = os.path.join(icon_path, "utlogo.gif")
+_inst_logo = os.path.join(icon_path, "utlogo.png")
 _nist_url = "http://www.nist.gov/"
 _umd_url = "http://www.umd.edu/"
Index: src/sas/sasgui/guiframe/documentation_window.py
===================================================================
--- src/sas/sasgui/guiframe/documentation_window.py	(revision 959eb0181ad06828a748f04512f953aad5b31659)
+++ src/sas/sasgui/guiframe/documentation_window.py	(revision 35ddae56eb0449a0d89239d0152f73017ed8fc1e)
@@ -16,21 +16,42 @@
 import os
 import logging
-import wx
 import webbrowser
 import urllib
 import sys
 
+import wx
+try:
+    import wx.html2 as html
+    WX_SUPPORTS_HTML2 = True
+except ImportError:
+    WX_SUPPORTS_HTML2 = False
+
+from .gui_manager import get_app_dir
+
 logger = logging.getLogger(__name__)
 
 SPHINX_DOC_ENV = "SASVIEW_DOC_PATH"
-WX_SUPPORTS_HTML2 = True
-try:
-    import wx.html2 as html
-except:
-    WX_SUPPORTS_HTML2 = False
 
+THREAD_STARTED = False
+def start_documentation_server(doc_root, port):
+    import thread
+    global THREAD_STARTED
+    if not THREAD_STARTED:
+        thread.start_new_thread(_documentation_server, (doc_root, port))
+        THREAD_STARTED = True
 
-from gui_manager import get_app_dir
+def _documentation_server(doc_root, port):
+    from SimpleHTTPServer import SimpleHTTPRequestHandler
+    from SocketServer import TCPServer
 
+    os.chdir(doc_root)
+    httpd = TCPServer(("127.0.0.1", port), SimpleHTTPRequestHandler, bind_and_activate=False)
+    httpd.allow_reuse_address = True
+    try:
+        httpd.server_bind()
+        httpd.server_activate()
+        httpd.serve_forever()
+    finally:
+        httpd.server_close()
 
 class DocumentationWindow(wx.Frame):
@@ -70,13 +91,22 @@
         #Note added June 21, 2015     PDB
         file_path = os.path.join(docs_path, path)
-        url = "file:///" + urllib.quote(file_path, r'/\:')+ url_instruction
-
-        if not os.path.exists(file_path):
+        if path.startswith('http'):
+            url = path
+        elif not os.path.exists(file_path):
+            url = "index.html"
             logger.error("Could not find Sphinx documentation at %s \
             -- has it been built?", file_path)
-        elif WX_SUPPORTS_HTML2:
+        elif False:
+            start_documentation_server(docs_path, port=7999)
+            url = "http://127.0.0.1:7999/" + path.replace('\\', '/') + url_instruction
+        else:
+            url = "file:///" + urllib.quote(file_path, r'/\:')+ url_instruction
+
+        logger.info("showing url " + url)
+        if WX_SUPPORTS_HTML2:
             # Complete HTML/CSS support!
             self.view = html.WebView.New(self)
             self.view.LoadURL(url)
+            self.Bind(html.EVT_WEBVIEW_ERROR, self.OnError, self.view)
             self.Show()
         else:
@@ -88,10 +118,14 @@
             webbrowser.open_new_tab(url)
 
+    def OnError(self, evt):
+        logger.error("%d: %s", evt.GetInt(), evt.GetString())
+
 def main():
     """
     main loop function if running alone for testing.
     """
+    url = "index.html" if len(sys.argv) <= 1 else sys.argv[1]
     app = wx.App()
-    DocumentationWindow(None, -1, "index.html", "", "Documentation",)
+    DocumentationWindow(None, -1, url, "", "Documentation",)
     app.MainLoop()
 
Index: src/sas/sasgui/guiframe/media/graph_help.rst
===================================================================
--- src/sas/sasgui/guiframe/media/graph_help.rst	(revision f9b0c81e56a680c4cdbca2d3251ba73fc4b903cd)
+++ src/sas/sasgui/guiframe/media/graph_help.rst	(revision 5ed76f8390eac56ff5d3779fd9c454d0c8fe1dc0)
@@ -9,6 +9,6 @@
 
 SasView generates three different types of graph window: one that displays *1D data*
-(ie, I(Q) vs Q), one that displays *1D residuals* (ie, the difference between the
-experimental data and the theory at the same Q values), and *2D color maps*.
+(i.e., $I(Q)$ vs $Q$), one that displays *1D residuals* (ie, the difference between the
+experimental data and the theory at the same $Q$ values), and *2D color maps*.
 
 Graph window options
@@ -42,5 +42,5 @@
 plot window.
 
-.. note:: 
+.. note::
     *If a residuals graph (when fitting data) is hidden, it will not show up
     after computation.*
@@ -138,5 +138,5 @@
 style and size. *Remove Text* will remove the last annotation added. To change
 the legend. *Window Title* allows a custom title to be entered instead of Graph
-x. 
+x.
 
 Changing scales
@@ -226,5 +226,5 @@
 ^^^^^^^^^^^^^^^^^^^
 
-Linear fit performs a simple ( y(x)=ax+b ) linear fit within the plot window.
+Linear fit performs a simple $y(x)=ax+b$ linear fit within the plot window.
 
 In the *Dataset Menu* (see Invoking_the_dataset_menu_), select *Linear Fit*. A
@@ -234,5 +234,5 @@
 
 This option is most useful for performing simple Guinier, XS Guinier, and
-Porod type analyses, for example, to estimate Rg, a rod diameter, or incoherent
+Porod type analyses, for example, to estimate $R_g$, a rod diameter, or incoherent
 background level, respectively.
 
@@ -319,5 +319,5 @@
 ^^^^^^^^^^^^^^^^^^^^^^^^^
 
-This operation will perform an average in constant Q-rings around the (x,y)
+This operation will perform an average in constant $Q$ rings around the (x,y)
 pixel location of the beam center.
 
@@ -331,16 +331,16 @@
 ^^^^^^^^^^^^^^^^^^^^^^^
 
-This operation averages in constant Q-arcs.
-
-The width of the sector is specified in degrees (+/- |delta|\|phi|\) each side
-of the central angle (|phi|\).
-
-Annular average [|phi| View]
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-This operation performs an average between two Q-values centered on (0,0),
+This operation averages in constant $Q$ arcs.
+
+The width of the sector is specified in degrees ($\pm\delta|\phi|$) each side
+of the central angle $\phi$.
+
+Annular average [:math:`\phi`]
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+This operation performs an average between two $Q$ values centered on (0,0),
 and averaged over a specified number of pixels.
 
-The data is returned as a function of angle (|phi|\) in degrees with zero
+The data is returned as a function of angle $\phi$ in degrees with zero
 degrees at the 3 O'clock position.
 
@@ -356,9 +356,9 @@
 ^^^^^^^^^^^^^^^^^^^
 
-This operation computes an average I(Qx) for the region of interest.
+This operation computes an average $I(Q_x)$ for the region of interest.
 
 When editing the slicer parameters, the user can control the length and the
 width the rectangular slicer. The averaged output is calculated from constant
-bins with rectangular shape. The resultant Q values are nominal values, that
+bins with rectangular shape. The resultant $Q$ values are nominal values, that
 is, the central value of each bin on the x-axis.
 
@@ -366,9 +366,9 @@
 ^^^^^^^^^^^^^^^^^^^
 
-This operation computes an average I(Qy) for the region of interest.
+This operation computes an average $I(Q_y)$ for the region of interest.
 
 When editing the slicer parameters, the user can control the length and the
 width the rectangular slicer. The averaged output is calculated from constant
-bins with rectangular shape. The resultant Q values are nominal values, that
+bins with rectangular shape. The resultant $Q$ values are nominal values, that
 is, the central value of each bin on the x-axis.
 
