Index: sasview/sasview.py
===================================================================
--- sasview/sasview.py	(revision 2a8bd7052cb942c4a5ebe1ba1549393142ca199f)
+++ sasview/sasview.py	(revision 985ad940d8f3156c26adff72d2f0c45da491177d)
@@ -13,4 +13,5 @@
 ################################################################################
 import sys
+import os
 
 from sas.sasview.logger_config import SetupLogger
@@ -18,10 +19,8 @@
 logger = SetupLogger(__name__).config_production()
 
-
 # Log the start of the session
 logger.info(" --- SasView session started ---")
 # Log the python version
 logger.info("Python: %s" % sys.version)
-
 
 reload(sys)
@@ -37,4 +36,5 @@
     from multiprocessing import freeze_support
     freeze_support()
+    os.environ['QT_API'] = "pyqt"
     from sas.qtgui.MainWindow.MainWindow import run
     run()
Index: sasview/sasview.spec
===================================================================
--- sasview/sasview.spec	(revision 2a8bd7052cb942c4a5ebe1ba1549393142ca199f)
+++ sasview/sasview.spec	(revision 985ad940d8f3156c26adff72d2f0c45da491177d)
@@ -51,5 +51,10 @@
 datas.append(('welcome_panel.py','.'))
 
+# pyinstaller gets mightily confused by upper/lower case,
+# so some modules need to be copied explicitly to avoid
+# messages like
+# WARNING: Attempted to add Python module twice with different upper/lowercases
 datas.append((os.path.join(PYTHON_LOC,'Lib','SocketServer.py'),'.'))
+datas.append((os.path.join(PYTHON_LOC,'Lib','Queue.py'),'.'))
 
 # TODO
Index: setup.py
===================================================================
--- setup.py	(revision 14bb7a4559442ca97cf523eddca7216d6be1e931)
+++ setup.py	(revision 985ad940d8f3156c26adff72d2f0c45da491177d)
@@ -193,4 +193,8 @@
 packages.append("sas.sasgui")
 
+# qt module
+package_dir["sas.qtgui"] = os.path.join("src", "sas", "qtgui")
+packages.append("sas.qtgui")
+
 # sas module
 package_dir["sas.sascalc"] = os.path.join("src", "sas", "sascalc")
@@ -264,13 +268,12 @@
 packages.extend(["sas.sascalc.file_converter",
                  "sas.sascalc.file_converter.core"])
+
 ext_modules.append(Extension("sas.sascalc.file_converter.core.bsl_loader",
                              sources=[os.path.join(mydir, "bsl_loader.c")],
                              include_dirs=[np.get_include()],
                              ))
-
 # sas.sascalc.corfunc
 package_dir["sas.sascalc.corfunc"] = os.path.join(
     "src", "sas", "sascalc", "corfunc")
-
 packages.extend(["sas.sascalc.corfunc"])
 
@@ -325,4 +328,55 @@
     "src", "sas", "sasgui", "plottools")
 packages.append("sas.sasgui.plottools")
+
+# QTGUI
+## UI
+package_dir["sas.qtgui.UI"] = os.path.join(
+    "src", "sas", "qtgui", "UI")
+packages.append("sas.qtgui.UI")
+
+## Utilities
+package_dir["sas.qtgui.Utilities"] = os.path.join(
+    "src", "sas", "qtgui", "Utilities")
+packages.append("sas.qtgui.Utilities")
+
+package_dir["sas.qtgui.Calculators"] = os.path.join(
+    "src", "sas", "qtgui", "Calculators")
+package_dir["sas.qtgui.Calculators.UI"] = os.path.join(
+    "src", "sas", "qtgui", "Calculators", "UI")
+packages.extend(["sas.qtgui.Calculators", "sas.qtgui.Calculators.UI"])
+
+package_dir["sas.qtgui.MainWindow"] = os.path.join(
+    "src", "sas", "qtgui", "MainWindow")
+package_dir["sas.qtgui.MainWindow.UI"] = os.path.join(
+    "src", "sas", "qtgui", "MainWindow", "UI")
+packages.extend(["sas.qtgui.MainWindow", "sas.qtgui.MainWindow.UI"])
+
+## Perspectives
+package_dir["sas.qtgui.Perspectives"] = os.path.join(
+    "src", "sas", "qtgui", "Perspectives")
+packages.append("sas.qtgui.Perspectives")
+
+package_dir["sas.qtgui.Perspectives.Invariant"] = os.path.join(
+    "src", "sas", "qtgui", "Perspectives", "Invariant")
+package_dir["sas.qtgui.Perspectives.Invariant.UI"] = os.path.join(
+    "src", "sas", "qtgui", "Perspectives", "Invariant", "UI")
+packages.extend(["sas.qtgui.Perspectives.Invariant", "sas.qtgui.Perspectives.Invariant.UI"])
+
+package_dir["sas.qtgui.Perspectives.Fitting"] = os.path.join(
+    "src", "sas", "qtgui", "Perspectives", "Fitting")
+package_dir["sas.qtgui.Perspectives.Fitting.UI"] = os.path.join(
+    "src", "sas", "qtgui", "Perspectives", "Fitting", "UI")
+packages.extend(["sas.qtgui.Perspectives.Fitting", "sas.qtgui.Perspectives.Fitting.UI"])
+
+## Plotting
+package_dir["sas.qtgui.Plotting"] = os.path.join(
+    "src", "sas", "qtgui", "Plotting")
+package_dir["sas.qtgui.Plotting.UI"] = os.path.join(
+    "src", "sas", "qtgui", "Plotting", "UI")
+package_dir["sas.qtgui.Plotting.Slicers"] = os.path.join(
+    "src", "sas", "qtgui", "Plotting", "Slicers")
+packages.extend(["sas.qtgui.Plotting", "sas.qtgui.Plotting.UI", "sas.qtgui.Plotting.Slicers"])
+
+
 
 # # Last of the sas.models
@@ -421,5 +475,5 @@
     entry_points={
         'console_scripts': [
-            "sasview = sas.sasview.sasview:run",
+            "sasview = sas.run",
         ]
     },
Index: src/sas/qtgui/Utilities/GuiUtils.py
===================================================================
--- src/sas/qtgui/Utilities/GuiUtils.py	(revision 6ff2eb3a90e71c5a55c4f5e939e522aa5711b0d8)
+++ src/sas/qtgui/Utilities/GuiUtils.py	(revision 985ad940d8f3156c26adff72d2f0c45da491177d)
@@ -96,5 +96,8 @@
 
 ## TODO: CHANGE FOR SHIPPED PATH IN RELEASE
-HELP_DIRECTORY_LOCATION = "docs/sphinx-docs/build/html"
+if os.path.splitext(sys.argv[0])[1].lower() != ".py":
+     HELP_DIRECTORY_LOCATION = "doc"
+else:
+     HELP_DIRECTORY_LOCATION = "docs/sphinx-docs/build/html"
 IMAGES_DIRECTORY_LOCATION = HELP_DIRECTORY_LOCATION + "/_images"
 
Index: src/sas/qtgui/Utilities/IPythonWidget.py
===================================================================
--- src/sas/qtgui/Utilities/IPythonWidget.py	(revision 83eb5208b8acb86b064162274de583670f72da47)
+++ src/sas/qtgui/Utilities/IPythonWidget.py	(revision 985ad940d8f3156c26adff72d2f0c45da491177d)
@@ -1,2 +1,23 @@
+def new_load_qt(api_options):
+    from PyQt4 import QtCore, QtGui, QtSvg
+    return QtCore, QtGui, QtSvg, 'pyqt'
+
+def qtconsole_new_load_qt(api_options):
+    from PyQt4 import QtCore, QtGui, QtSvg
+
+    # Alias PyQt-specific functions for PySide compatibility.
+    QtCore.Signal = QtCore.pyqtSignal
+    QtCore.Slot = QtCore.pyqtSlot
+    return QtCore, QtGui, QtSvg, 'pyqt'
+
+# Do some monkey patching to satisfy pyinstaller complaining
+# about pyside/pyqt confusion
+from IPython.external import  qt_loaders
+qt_loaders.load_qt = new_load_qt
+
+from qtconsole import qt_loaders as qtconsole_qt_loaders
+qtconsole_qt_loaders.load_qt = qtconsole_new_load_qt
+
+
 from qtconsole.rich_jupyter_widget import RichJupyterWidget
 from qtconsole.inprocess import QtInProcessKernelManager
