Index: build_tools/conda/bumps/meta.yaml
===================================================================
--- build_tools/conda/bumps/meta.yaml	(revision b75079b1f3e2b82ae67998e5bc86b1f0a3f93147)
+++ build_tools/conda/bumps/meta.yaml	(revision 243fbc08b5507d76300536ef5949cadf6da173c0)
@@ -1,9 +1,9 @@
 package:
   name: bumps
-  version: !!str 0.7.5.4
+  version: !!str 0.7.5.9
 
 source:
-  fn: bumps-0.7.5.4.tar.gz
-  url: https://pypi.python.org/packages/source/b/bumps/bumps-0.7.5.4.tar.gz
+  fn: bumps-0.7.5.9.tar.gz
+  url: https://pypi.python.org/packages/source/b/bumps/bumps-0.7.5.9.tar.gz
   md5: a47c035fbb18afa5ca53067506a5ff1c
 #  patches:
Index: build_tools/jenkins_linux_build.sh
===================================================================
--- build_tools/jenkins_linux_build.sh	(revision 9d5427ffb9d26e295c95861a09db5c7572c4d692)
+++ build_tools/jenkins_linux_build.sh	(revision 243fbc08b5507d76300536ef5949cadf6da173c0)
@@ -15,5 +15,5 @@
 rm -rf build
 
-"$EASY_INSTALL" -d "$WORKSPACE/utils" bumps==0.7.5.6
+"$EASY_INSTALL" -d "$WORKSPACE/utils" bumps==0.7.5.9
 "$EASY_INSTALL" -d "$WORKSPACE/utils" periodictable==1.3.0
 
Index: build_tools/jenkins_linux_build_ver02.sh
===================================================================
--- build_tools/jenkins_linux_build_ver02.sh	(revision 22c1f1c4c3d370b610d2b0d80ad846f505e67a9a)
+++ build_tools/jenkins_linux_build_ver02.sh	(revision 243fbc08b5507d76300536ef5949cadf6da173c0)
@@ -27,5 +27,5 @@
 
 
-"$EASY_INSTALL" -d "$WORKSPACE/sasview/utils" bumps==0.7.5.6
+"$EASY_INSTALL" -d "$WORKSPACE/sasview/utils" bumps==0.7.5.9
 "$EASY_INSTALL" -d "$WORKSPACE/sasview/utils" periodictable==1.3.0
 
Index: build_tools/jenkins_osx_build.sh
===================================================================
--- build_tools/jenkins_osx_build.sh	(revision 5881b17fbe4e39169f47ab9b471e946b64d5a697)
+++ build_tools/jenkins_osx_build.sh	(revision 5881b17fbe4e39169f47ab9b471e946b64d5a697)
@@ -55,14 +55,13 @@
 cd sasview
 $PYTHON setup.py clean
-$PYTHON setup.py build
-#$PYTHON setup.py docs
+$PYTHON setup.py build docs bdist_egg
 
 
-# SASVIEW BUILD_egg with new docs
+# INSTALL SASVIEW
 cd $WORKSPACE
 cd sasview
-$PYTHON setup.py docs bdist_egg
 cd dist
 $EASY_INSTALL -d $WORKSPACE/sasview/sasview-install sasview*.egg
+
 
 # TEST
@@ -72,13 +71,12 @@
 #$PYTHON utest_sasview.py
 
-## PYLINT
-#cd $WORKSPACE
-#cd sasview
-#$PYLINT --rcfile "build_tools/pylint.rc" -f parseable sasview-install/sasview*.egg/sas sasview | tee  test/sasview.txt
-
+# PYLINT
+cd $WORKSPACE
+cd sasview
+$PYLINT --rcfile "build_tools/pylint.rc" -f parseable sasview-install/sasview*.egg/sas sasview | tee  test/sasview.txt
 
 # BUILD APP
-#cd $WORKSPACE
-#cd sasview/sasview
-#$PYTHON setup_mac.py py2app
+cd $WORKSPACE
+cd sasview/sasview
+$PYTHON setup_mac.py py2app
 
Index: build_tools/jenkins_rhel6_build.sh
===================================================================
--- build_tools/jenkins_rhel6_build.sh	(revision 9d5427ffb9d26e295c95861a09db5c7572c4d692)
+++ build_tools/jenkins_rhel6_build.sh	(revision 243fbc08b5507d76300536ef5949cadf6da173c0)
@@ -28,5 +28,5 @@
 "$EASY_INSTALL" -d "$WORKSPACE/utils" lxml
 "$EASY_INSTALL" -d "$WORKSPACE/utils" pyparsing==1.5.5
-"$EASY_INSTALL" -d "$WORKSPACE/utils" bumps==0.7.5.6
+"$EASY_INSTALL" -d "$WORKSPACE/utils" bumps==0.7.5.9
 "$EASY_INSTALL" -d "$WORKSPACE/utils" periodictable==1.3.0
 python deps.py
Index: build_tools/jenkins_win32_build.bat
===================================================================
--- build_tools/jenkins_win32_build.bat	(revision 9d5427ffb9d26e295c95861a09db5c7572c4d692)
+++ build_tools/jenkins_win32_build.bat	(revision 243fbc08b5507d76300536ef5949cadf6da173c0)
@@ -16,5 +16,5 @@
 RD /S /Q build
 
-rem %PYTHON% -m pip install -t ../sasview-install --no-deps bumps=0.7.5.6
+rem %PYTHON% -m pip install -t ../sasview-install --no-deps bumps=0.7.5.9
 rem PYTHON% -m pip install -t ../sasview-install --no-deps periodictable=1.3.0
 rem %PYTHON% -m pip install -t ../sasview-install --no-deps pyparsing=1.5.5
Index: build_tools/jenkins_win32_py27_build.bat
===================================================================
--- build_tools/jenkins_win32_py27_build.bat	(revision 9d5427ffb9d26e295c95861a09db5c7572c4d692)
+++ build_tools/jenkins_win32_py27_build.bat	(revision 243fbc08b5507d76300536ef5949cadf6da173c0)
@@ -16,5 +16,5 @@
 RD /S /Q build
 
-rem %PYTHON% -m pip install -t ../sansview-install --no-deps bumps=0.7.5.6
+rem %PYTHON% -m pip install -t ../sansview-install --no-deps bumps=0.7.5.9
 rem PYTHON% -m pip install -t ../sansview-install --no-deps periodictable=1.3.0
 rem %PYTHON% -m pip install -t ../sansview-install --no-deps pyparsing=1.5.5
Index: build_tools/requirements.txt
===================================================================
--- build_tools/requirements.txt	(revision a985c939fdcccbb9fb5cc1d3d59d85040091c60a)
+++ build_tools/requirements.txt	(revision 243fbc08b5507d76300536ef5949cadf6da173c0)
@@ -9,5 +9,5 @@
 PIL==1.1.7
 periodictable==1.3.0
-bumps==0.7.5.5
+bumps==0.7.5.9
 # numpy==1.6.1
 # scipy==0.10.1
Index: check_packages.py
===================================================================
--- check_packages.py	(revision 8e7044c315d359b4749c4bb5a469bd3ff8ddabcf)
+++ check_packages.py	(revision 243fbc08b5507d76300536ef5949cadf6da173c0)
@@ -19,5 +19,5 @@
     'pylint':{'version':None,'import_name':'pylint','test':None},
     'periodictable':{'version':'1.3.0','import_name':'periodictable','test':'__version__'},
-    'bumps':{'version':'0.7.5.7','import_name':'bumps','test':'__version__'},
+    'bumps':{'version':'0.7.5.9','import_name':'bumps','test':'__version__'},
     'numpy':{'version':'1.6.1','import_name':'numpy','test':'__version__'},
     'scipy':{'version':'0.10.1','import_name':'scipy','test':'__version__'},
Index: sasview/README.txt
===================================================================
--- sasview/README.txt	(revision 792e6be8e13f67657de88e5fb9a9afb91a750c30)
+++ sasview/README.txt	(revision 243fbc08b5507d76300536ef5949cadf6da173c0)
@@ -4,4 +4,41 @@
 1- Features
 ===========
+
+    - New in Version 4.0.0-alpha
+      --------------------
+      This alpha release brings a major overhaul of the model system. The new model
+      package allows rapid integration of custom models and access to polydispersity
+      without requiring a compiler.
+
+      - Model package changes and improvements
+         - Model interface moved to independent sasmodels package.
+         - Most models converted to new interface.
+         - Allows rapid integration of user-written models.
+         - OpenCL GPU utilization for faster fitting.
+         - Improved numerical integration of Bessel functions.
+      - SESANS integration and implementation
+         - Scripting interface added for analysis of SESANS data.
+         - Hankel transformation now accepts finite acceptance angles.
+         - 2D cosine transformation added for TOF SESANS analysis.
+      - Documentation improvements
+         - The documentation tree was restructured for a better end user experience.
+         - The documentation for each model was revamped and verified by at least
+           two people following the conversion of the model.
+         - Theoretical 1D (and 2D if applicable) scattering curves are auto-generated
+           and added to the model documentation for each model.
+      - Separation of GUI and calculations for future GUI enhancements
+      - Bug fixes
+         - Fixes bug #411 No stop button on simultaneous fit page
+         - Fixes bug #410 Error with raspberry model
+         - Fixes bug #364 Possible inconsistency in Poly_GausCoil model
+         - Fixes bug #439 Hayter Penfold MSA code needs checking
+         - Fixes bug #484 lammellerPC is precision limited
+         - Fixes bug #498 $HOME/.matplotlib conflicts
+         - Fixes bug #348 Control order in which fit parameters appear in the gui
+         - Fixes bug #456 Provide DREAM Results Panel with something to identify
+           data and age of results
+         - Fixes bug #556 Build script improvements for developers
+
+
 
    - New in Version 3.1.2
@@ -306,5 +343,5 @@
             - unittest-xml-reporting 1.12.0 (MAC 1.10.0)
             - matplotlib Version Installed: 1.4.3 (MAC 1.1.1)
-            - bumps Version Installed: 0.7.5.6
+            - bumps Version Installed: 0.7.5.9
             - scipy Version Installed: 0.16.0b2 (MAC 0.11.0)
             - periodictable Version Installed: 1.4.1
Index: sasview/__init__.py
===================================================================
--- sasview/__init__.py	(revision 792e6be8e13f67657de88e5fb9a9afb91a750c30)
+++ sasview/__init__.py	(revision fa4ea808f1342dfede47c6cd27036337068959a1)
@@ -1,2 +1,2 @@
-__version__ = "3.1.2"
+__version__ = "4.0.0-alpha"
 __build__ = "1"
Index: sasview/default_categories.json
===================================================================
--- sasview/default_categories.json	(revision 6313823060b4b097b5779dbb15dc1ae88e31ebc4)
+++ sasview/default_categories.json	(revision 42585bf5a1366b2c27e83e0b966687142fa2abd6)
@@ -1,1 +1,1 @@
-{"Shapes": [["barbell", true], ["pearl_necklace", true], ["hollow_cylinder", true], ["CoreMultiShellModel", true], ["fcc_paracrystal", true], ["parallelepiped", true], ["fuzzy_sphere", true], ["core_shell_ellipsoid_xt", true], ["lamellarPC", true], ["bcc_paracrystal", true], ["ellptical_cylinder", true], ["hollow_rectangular_prism_infinitely_thin_walls", true], ["core_shell_parallelepiped", true], ["OnionExpShellModel", true], ["multi_shell", true], ["raspberry", true], ["core_shell_ellipsoid", true], ["capped_cylinder", true], ["cylinder", true], ["SphericalSLDModel", true], ["sc_crystal", true], ["stacked_disks", true], ["LamellarPSHGModel", true], ["core_shell_bicelle", true], ["hollow_rectangular_prism", true], ["LamellarPSModel", true], ["ellipsoid", true], ["sphere", true], ["vesicle", true], ["triaxial_ellipsoid", true], ["lamellar", true], ["pringles", true], ["rectangular_prism", true], ["core_shell_cylinder", true], ["BinaryHSModel", true], ["flexible_cylinder", true], ["lamellarFFHG", true], ["flexible_cylinder_ex", true], ["linear_pearls", true], ["core_shell_sphere", true]], "Structure Factor": [["squarewell", true], ["hayter_msa", true], ["hardsphere", true], ["stickyhardsphere", true]], "Shape-Independent": [["two_power_law", true], ["gel_fit", true], ["dab", true], ["power_law", true], ["porod", true], ["guinier", true], ["rpa", true], ["teubner_strey", true], ["star_polymer", true], ["UnifiedPowerRgModel", true], ["mass_surface_fractal", true], ["adsorbed_layer", true], ["two_lorentzian", true], ["mono_gauss_coil", true], ["mass_fractal", true], ["guinier_porod", true], ["correlation_length", true], ["polymer_excl_volume", true], ["FractalModel", true], ["peak_lorentz", true], ["broad_peak", true], ["fractal_core_shell", true], ["gaussian_peak", true], ["be_polyelectrolyte", true], ["poly_gauss_coil", true], ["surface_fractal", true], ["gauss_lorentz_gel", true], ["lorentz", true]], "Uncategorized": [["ReflectivityModel", true], ["ReflectivityIIModel", true], ["line", true], ["micell_spherical_coil", true]]}
+{"Shapes": [["cylinder", true], ["lamellar_stack_paracrystal", true], ["multilayer_vesicle", true], ["core_shell_cylinder", true], ["lamellar_hg", true], ["fuzzy_sphere", true], ["sphere", true], ["triaxial_ellipsoid", true], ["rectangular_prism", true], ["core_shell_bicelle", true], ["flexible_cylinder", true], ["flexible_cylinder_elliptical", true], ["binary_hard_sphere", true], ["core_multi_shell", true], ["sc_paracrystal", true], ["ellipsoid", true], ["capped_cylinder", true], ["core_shell_ellipsoid", true], ["fcc_paracrystal", true], ["core_shell_parallelepiped", true], ["core_shell_ellipsoid_xt", true], ["elliptical_cylinder", true], ["pringle", true], ["hollow_rectangular_prism_thin_walls", true], ["hollow_rectangular_prism", true], ["vesicle", true], ["polymer_micelle", true], ["parallelepiped", true], ["hollow_cylinder", true], ["linear_pearls", true], ["spherical_sld", true], ["raspberry", true], ["lamellar_hg_stack_caille", true], ["pearl_necklace", true], ["lamellar", true], ["onion", true], ["lamellar_stack_caille", true], ["bcc_paracrystal", true], ["core_shell_sphere", true], ["stacked_disks", true]], "Structure Factor": [["hayter_msa", true], ["squarewell", true], ["stickyhardsphere", true], ["hardsphere", true]], "Shape-Independent": [["guinier_porod", true], ["polymer_excl_volume", true], ["gel_fit", true], ["teubner_strey", true], ["mono_gauss_coil", true], ["mass_surface_fractal", true], ["mass_fractal", true], ["adsorbed_layer", true], ["two_lorentzian", true], ["fractal", true], ["fractal_core_shell", true], ["dab", true], ["poly_gauss_coil", true], ["star_polymer", true], ["broad_peak", true], ["surface_fractal", true], ["two_power_law", true], ["power_law", true], ["rpa", true], ["be_polyelectrolyte", true], ["peak_lorentz", true], ["guinier", true], ["correlation_length", true], ["line", true], ["gaussian_peak", true], ["porod", true], ["gauss_lorentz_gel", true], ["lorentz", true]]}
Index: sasview/setup_exe.py
===================================================================
--- sasview/setup_exe.py	(revision 40fc7982beb9f417139b4a7f6c32f7d4f15d4356)
+++ sasview/setup_exe.py	(revision a7c4ad26032d5299d783fd0fb8ef5585d054c285)
@@ -256,5 +256,6 @@
 data_files += guiframe.data_files()
 
-import sas.models as models
+#import sas.models as models
+import sasmodels.models as models
 data_files += models.data_files()
 
@@ -338,5 +339,5 @@
 packages = [
     'matplotlib', 'scipy', 'encodings', 'comtypes',
-    'win32com', 'xhtml2pdf', 'bumps',
+    'win32com', 'xhtml2pdf', 'bumps','sasmodels', 'sas',
     ]
 packages.extend([
Index: sasview/setup_mac.py
===================================================================
--- sasview/setup_mac.py	(revision 5881b17fbe4e39169f47ab9b471e946b64d5a697)
+++ sasview/setup_mac.py	(revision 5881b17fbe4e39169f47ab9b471e946b64d5a697)
@@ -43,5 +43,4 @@
 import sas.sasgui.perspectives.invariant as invariant
 DATA_FILES += invariant.data_files()
-#import sas.models as models
 import sasmodels.models as models
 DATA_FILES += models.data_files()
Index: setup.py
===================================================================
--- setup.py	(revision 5881b17fbe4e39169f47ab9b471e946b64d5a697)
+++ setup.py	(revision 5881b17fbe4e39169f47ab9b471e946b64d5a697)
@@ -249,6 +249,7 @@
 
 package_dir["sas.sasgui.perspectives.fitting"] = os.path.join("src", "sas", "sasgui", "perspectives", "fitting")
-packages.extend(["sas.sasgui.perspectives.fitting"])
-package_data['sas.sasgui.perspectives.fitting'] = ['media/*']
+package_dir["sas.sasgui.perspectives.fitting.plugin_models"] = os.path.join("src", "sas", "sasgui", "perspectives", "fitting", "plugin_models")
+packages.extend(["sas.sasgui.perspectives.fitting", "sas.sasgui.perspectives.fitting.plugin_models"])
+package_data['sas.sasgui.perspectives.fitting'] = ['media/*', 'plugin_models/*']
 
 packages.extend(["sas.sasgui.perspectives", "sas.sasgui.perspectives.calculator"])
@@ -319,5 +320,5 @@
 
 required = [
-    'bumps>=0.7.5.6', 'periodictable>=1.3.1', 'pyparsing<2.0.0',
+    'bumps>=0.7.5.9', 'periodictable>=1.3.1', 'pyparsing<2.0.0',
 
     # 'lxml>=2.2.2',
Index: src/sas/sascalc/calculator/BaseComponent.py
===================================================================
--- src/sas/sascalc/calculator/BaseComponent.py	(revision 53aa66d137ee23c4e8302902ca7b6258f49596f7)
+++ src/sas/sascalc/calculator/BaseComponent.py	(revision cb4ef58d8aabd8393aae14823d3fa98d1ba0c1a2)
@@ -50,4 +50,8 @@
         self.output_unit = "cm^{-1}"
 
+        self.is_multiplicity_model = False
+        self.is_structure_factor = False
+        self.is_form_factor = False
+
     def __str__(self):
         """
Index: src/sas/sascalc/calculator/sas_gen.py
===================================================================
--- src/sas/sascalc/calculator/sas_gen.py	(revision 9e531f2d45ba748a75200d6849494152c0ad9383)
+++ src/sas/sascalc/calculator/sas_gen.py	(revision cb4ef58d8aabd8393aae14823d3fa98d1ba0c1a2)
@@ -80,11 +80,11 @@
         ## Parameter details [units, min, max]
         self.details = {}
-        self.details['scale'] = ['', None, None]
-        self.details['background'] = ['[1/cm]', None, None]
-        self.details['solvent_SLD'] = ['1/A^(2)', None, None]
-        self.details['total_volume'] = ['A^(3)', None, None]
-        self.details['Up_frac_in'] = ['[u/(u+d)]', None, None]
-        self.details['Up_frac_out'] = ['[u/(u+d)]', None, None]
-        self.details['Up_theta'] = ['[deg]', None, None]
+        self.details['scale'] = ['', 0.0, numpy.inf]
+        self.details['background'] = ['[1/cm]', 0.0, numpy.inf]
+        self.details['solvent_SLD'] = ['1/A^(2)', -numpy.inf, numpy.inf]
+        self.details['total_volume'] = ['A^(3)', 0.0, numpy.inf]
+        self.details['Up_frac_in'] = ['[u/(u+d)]', 0.0, 1.0]
+        self.details['Up_frac_out'] = ['[u/(u+d)]', 0.0, 1.0]
+        self.details['Up_theta'] = ['[deg]', -numpy.inf, numpy.inf]
         # fixed parameters
         self.fixed = []
Index: src/sas/sascalc/fit/MultiplicationModel.py
===================================================================
--- src/sas/sascalc/fit/MultiplicationModel.py	(revision 08959b8e12a0d4507d8caf4d0c2fa16895cc176b)
+++ src/sas/sascalc/fit/MultiplicationModel.py	(revision cb4ef58d8aabd8393aae14823d3fa98d1ba0c1a2)
@@ -1,7 +1,8 @@
+import copy
+
+import numpy
 
 from sas.sascalc.calculator.BaseComponent import BaseComponent
-#import numpy, math
-import copy
-from sas.sascalc.fit.pluginmodel import Model1DPlugin
+
 class MultiplicationModel(BaseComponent):
     r"""
@@ -47,5 +48,5 @@
         ## Parameter details [units, min, max]
         self._set_details()
-        self.details['scale_factor'] = ['',     None, None]
+        self.details['scale_factor'] = ['', 0.0, numpy.inf]
         
         #list of parameter that can be fitted
@@ -75,8 +76,10 @@
                 self.multiplicity_info = p_model.multiplicity_info 
                 self.fun_list = p_model.fun_list
+                self.is_multiplicity_model = True
             except:
                 pass
         else:
-            self.multiplicity_info = []
+            self.is_multiplicity_model = False
+            self.multiplicity_info = [0]
             
     def _clone(self, obj):
Index: src/sas/sasgui/perspectives/calculator/model_editor.py
===================================================================
--- src/sas/sasgui/perspectives/calculator/model_editor.py	(revision aa03e0d7d1ed8adc8ddc677ce127966284ca427c)
+++ src/sas/sasgui/perspectives/calculator/model_editor.py	(revision cb4ef58d8aabd8393aae14823d3fa98d1ba0c1a2)
@@ -1329,5 +1329,10 @@
 SUM_TEMPLATE = """
 # A sample of an experimental model function for Sum/Multiply(Pmodel1,Pmodel2)
+import os
+import sys
 import copy
+
+import nuympy
+
 from sas.sascalc.fit.pluginmodel import Model1DPlugin
 from sasmodels.sasview_model import make_class
@@ -1339,6 +1344,4 @@
 #P2_model:
 #from %s import Model as P2
-import os
-import sys
 
 class Model(Model1DPlugin):
@@ -1385,5 +1388,5 @@
         ## Parameter details [units, min, max]
         self._set_details()
-        self.details['scale_factor'] = ['', None, None]
+        self.details['scale_factor'] = ['', 0.0, numpy.inf]
 
 
Index: src/sas/sasgui/perspectives/fitting/__init__.py
===================================================================
--- src/sas/sasgui/perspectives/fitting/__init__.py	(revision 9e531f2d45ba748a75200d6849494152c0ad9383)
+++ src/sas/sasgui/perspectives/fitting/__init__.py	(revision a7c4ad26032d5299d783fd0fb8ef5585d054c285)
@@ -39,7 +39,7 @@
     data_files = []
     path = os.path.dirname(__file__)
-    # p_path = os.path.join(path, 'plugin_models')
-    # for f in findall(p_path):
-    #     data_files.append(('plugin_models', [f]))
+    p_path = os.path.join(path, 'plugin_models')
+    for f in findall(p_path):
+        data_files.append(('plugin_models', [f]))
     # path = get_data_path(media="media")
     for f in findall(path):
Index: src/sas/sasgui/perspectives/fitting/basepage.py
===================================================================
--- src/sas/sasgui/perspectives/fitting/basepage.py	(revision 08959b8e12a0d4507d8caf4d0c2fa16895cc176b)
+++ src/sas/sasgui/perspectives/fitting/basepage.py	(revision cb4ef58d8aabd8393aae14823d3fa98d1ba0c1a2)
@@ -1896,5 +1896,5 @@
                 for model in self.model_list_box[mod_cat]:
                     if 'sasmodels.sasview_model.' in str(model):
-                        str_m = model._model_info['id']
+                        str_m = model.id
                     else:
                         str_m = str(model).split(".")[0]
@@ -1945,9 +1945,6 @@
         mlist = []
         for models in list:
-            model = models()
-            name = model.__class__.__name__
-            if models.__name__ != "NoStructure":
-                name = model.name
-                mlist.append((name, models))
+            if models.name != "NoStructure":
+                mlist.append((models.name, models))
 
         # Sort the models
@@ -2099,13 +2096,12 @@
         if form_factor != None:
             # set multifactor for Mutifunctional models
-            if form_factor().__class__ in \
-                                        self.model_list_box["Multi-Functions"]:
+            if form_factor.is_multiplicity_model:
                 m_id = self.multifactorbox.GetCurrentSelection()
-                multiplicity = form_factor().multiplicity_info[0]
+                multiplicity = form_factor.multiplicity_info[0]
                 self.multifactorbox.Clear()
                 self._set_multfactor_combobox(multiplicity)
                 self._show_multfactor_combobox()
                 #ToDo:  this info should be called directly from the model
-                text = form_factor().multiplicity_info[1]  # 'No. of Shells: '
+                text = form_factor.multiplicity_info[1]  # 'No. of Shells: '
 
                 self.mutifactor_text.SetLabel(text)
@@ -2117,5 +2113,4 @@
                 if self.multi_factor == None:
                     self.multi_factor = 0
-                form_factor = form_factor(int(self.multi_factor))
                 self.multifactorbox.SetSelection(m_id)
                 # Check len of the text1 and max_multiplicity
@@ -2131,9 +2126,7 @@
                 else:
                     self.sld_axes = ""
-
             else:
                 self._hide_multfactor_combobox()
                 self.show_sld_button.Hide()
-                form_factor = form_factor()
                 self.multi_factor = None
         else:
@@ -2147,14 +2140,15 @@
         if  struct_factor != None:
             from sas.sascalc.fit.MultiplicationModel import MultiplicationModel
-            self.model = MultiplicationModel(form_factor, struct_factor())
+            self.model = MultiplicationModel(form_factor(self.multi_factor),
+                                             struct_factor())
             # multifunctional form factor
             if len(form_factor.non_fittable) > 0:
                 self.temp_multi_functional = True
+        elif form_factor != None:
+            self.model = form_factor(self.multi_factor)
         else:
-            if form_factor != None:
-                self.model = form_factor
-            else:
-                self.model = None
-                return self.model
+            self.model = None
+            return
+
         # check if model has magnetic parameters
         if len(self.model.magnetic_params) > 0:
@@ -2286,5 +2280,5 @@
                 parameter's error of fit,
                 parameter's minimum value,
-                parrameter's maximum value ,
+                parameter's maximum value ,
                 parameter's units]
         """
Index: src/sas/sasgui/perspectives/fitting/fitpage.py
===================================================================
--- src/sas/sasgui/perspectives/fitting/fitpage.py	(revision f27dd1ed757e8dc111d10a240924069ada18311f)
+++ src/sas/sasgui/perspectives/fitting/fitpage.py	(revision cb4ef58d8aabd8393aae14823d3fa98d1ba0c1a2)
@@ -10,4 +10,7 @@
 import math
 import time
+
+from sasmodels.weights import MODELS as POLYDISPERSITY_MODELS
+
 from sas.sasgui.guiframe.events import StatusEvent
 from sas.sasgui.guiframe.events import NewPlotEvent
@@ -621,8 +624,4 @@
         model_disp = wx.StaticText(self, wx.ID_ANY, 'Function')
         CHECK_STATE = self.cb1.GetValue()
-        #import sas.models.dispersion_models
-        #self.polydisp = sas.models.dispersion_models.models
-        import sasmodels.weights
-        self.polydisp =  sasmodels.weights.models
 
         ix = 0
@@ -784,5 +783,5 @@
                 disp_box = wx.ComboBox(self, wx.ID_ANY, size=(65, -1),
                                        style=wx.CB_READONLY, name='%s' % name1)
-                for key, value in self.polydisp.iteritems():
+                for key, value in POLYDISPERSITY_MODELS.iteritems():
                     name_disp = str(key)
                     disp_box.Append(name_disp, value)
@@ -948,5 +947,5 @@
                 disp_box = wx.ComboBox(self, wx.ID_ANY, size=(65, -1),
                                 style=wx.CB_READONLY, name='%s' % name1)
-                for key, value in self.polydisp.iteritems():
+                for key, value in POLYDISPERSITY_MODELS.iteritems():
                     name_disp = str(key)
                     disp_box.Append(name_disp, value)
Index: src/sas/sasgui/perspectives/fitting/fitpanel.py
===================================================================
--- src/sas/sasgui/perspectives/fitting/fitpanel.py	(revision f60251f7d4f0c4ed78649d60f185241ac0fbd337)
+++ src/sas/sasgui/perspectives/fitting/fitpanel.py	(revision 05228b001b88187176fb9a2d1bfd9098273fb854)
@@ -17,5 +17,4 @@
 import models
 _BOX_WIDTH = 80
-
 
 class FitPanel(nb, PanelBase):
@@ -154,7 +153,4 @@
         """
         """
-        from bumps.options import FIT_CONFIG
-        current = FIT_CONFIG.selected_name
-        self.parent.SetTitle(self.window_name + " - Active Fitting Optimizer: " + current)
         pos = self.GetSelection()
         if pos != -1:
Index: src/sas/sasgui/perspectives/fitting/fitting.py
===================================================================
--- src/sas/sasgui/perspectives/fitting/fitting.py	(revision 86b049bf7c2148f7591e6bf4ae7bd26979f740cc)
+++ src/sas/sasgui/perspectives/fitting/fitting.py	(revision 243fbc08b5507d76300536ef5949cadf6da173c0)
@@ -56,5 +56,11 @@
     ON_MAC = True
 
-
+import bumps.options
+from bumps.gui.fit_dialog import show_fit_config
+try:
+    from bumps.gui.fit_dialog import EVT_FITTER_CHANGED
+except ImportError:
+    # CRUFT: bumps 0.7.5.8 and below
+    EVT_FITTER_CHANGED = None  # type: wx.PyCommandEvent
 
 class Plugin(PluginBase):
@@ -501,4 +507,10 @@
         self.parent.Bind(EVT_SLICER_PANEL, self._on_slicer_event)
         self.parent.Bind(EVT_SLICER_PARS_UPDATE, self._onEVT_SLICER_PANEL)
+
+        # CRUFT: EVT_FITTER_CHANGED is not None for bumps 0.7.5.9 and above
+        if EVT_FITTER_CHANGED is not None:
+            self.parent.Bind(EVT_FITTER_CHANGED, self.on_fitter_changed)
+        self._set_fitter_label(bumps.options.FIT_CONFIG)
+
         #self.parent._mgr.Bind(wx.aui.EVT_AUI_PANE_CLOSE,self._onclearslicer)
         #Create reader when fitting panel are created
@@ -763,11 +775,13 @@
         Open the bumps options panel.
         """
-        try:
-            from bumps.gui.fit_dialog import show_fit_config
-            show_fit_config(self.parent, help=self.on_help)
-        except ImportError:
-            # CRUFT: Bumps 0.7.5.6 and earlier do not have the help button
-            from bumps.gui.fit_dialog import OpenFitOptions
-            OpenFitOptions()
+        show_fit_config(self.parent, help=self.on_help)
+
+    def on_fitter_changed(self, event):
+        self._set_fitter_label(event.config)
+
+    def _set_fitter_label(self, config):
+        self.fit_panel.parent.SetTitle(self.fit_panel.window_name
+                                       + " - Active Fitting Optimizer: "
+                                       + config.selected_name)
 
     def on_help(self, algorithm_id):
Index: src/sas/sasgui/perspectives/fitting/models.py
===================================================================
--- src/sas/sasgui/perspectives/fitting/models.py	(revision dcdca68c0f77f5a29020315700f362c344b3f207)
+++ src/sas/sasgui/perspectives/fitting/models.py	(revision cb4ef58d8aabd8393aae14823d3fa98d1ba0c1a2)
@@ -296,13 +296,13 @@
         #Build list automagically from sasmodels package
         for model in load_standard_models():
-            self.model_dictionary[model._model_info['name']] = model
-            if model._model_info['structure_factor'] == True:
+            self.model_dictionary[model.name] = model
+            if model.is_structure_factor:
                 self.struct_list.append(model)
-            if model._model_info['variant_info'] is not None:
+            if model.is_form_factor:
+                self.multiplication_factor.append(model)
+            if model.is_multiplicity_model:
                 self.multi_func_list.append(model)
             else:
-                self.model_name_list.append(model._model_info['name'])
-            if model._model_info['ER'] is not None:
-                self.multiplication_factor.append(model)
+                self.model_name_list.append(model.name)
 
         #Looking for plugins
@@ -387,12 +387,6 @@
         Get the multifunctional models
         """
-        for item in self.plugins:
-            try:
-                # check the multiplicity if any
-                if item.multiplicity_info[0] > 1:
-                    self.multi_func_list.append(item)
-            except:
-                # pass to other items
-                pass
+        items = [item for item in self.plugins if item.is_multiplicity_model]
+        self.multi_func_list = items
 
     def get_model_list(self):
Index: src/sas/sasgui/plottools/PlotPanel.py
===================================================================
--- src/sas/sasgui/plottools/PlotPanel.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
+++ src/sas/sasgui/plottools/PlotPanel.py	(revision 16b769b0ee7796dc2a4819159984096a14089bd4)
@@ -1994,5 +1994,5 @@
         """
         try:
-            self.toolbar.copy_figure()
+            self.toolbar.copy_figure(self.canvas)
         except:
             print "Error in copy Image"
