Index: src/sas/sascalc/dataloader/file_reader_base_class.py
===================================================================
--- src/sas/sascalc/dataloader/file_reader_base_class.py	(revision 814ee32ffe93b88e7d592f88c83b64535b8fd4d3)
+++ src/sas/sascalc/dataloader/file_reader_base_class.py	(revision 814ee32ffe93b88e7d592f88c83b64535b8fd4d3)
@@ -27,10 +27,4 @@
 
 class FileReader(object):
-    # List of Data1D and Data2D objects to be sent back to data_loader
-    output = []
-    # Current plottable_(1D/2D) object being loaded in
-    current_dataset = None
-    # Current DataInfo object being loaded in
-    current_datainfo = None
     # String to describe the type of data this reader can load
     type_name = "ASCII"
@@ -43,8 +37,16 @@
     # Able to import the unit converter
     has_converter = True
-    # Open file handle
-    f_open = None
     # Default value of zero
     _ZERO = 1e-16
+
+    def __init__(self):
+        # List of Data1D and Data2D objects to be sent back to data_loader
+        self.output = []
+        # Current plottable_(1D/2D) object being loaded in
+        self.current_dataset = None
+        # Current DataInfo object being loaded in
+        self.current_datainfo = None
+        # Open file handle
+        self.f_open = None
 
     def read(self, filepath):
Index: src/sas/sascalc/fit/MultiplicationModel.py
===================================================================
--- src/sas/sascalc/fit/MultiplicationModel.py	(revision 574adc767a9e86744546f8edd6a23dc4f81914ad)
+++ src/sas/sascalc/fit/MultiplicationModel.py	(revision 0a9cbc3034036bdedd033f655d9fb37abb45d1f3)
@@ -68,5 +68,5 @@
         try:
             multiplicity = p_model.multiplicity
-        except:
+        except AttributeError:
             multiplicity = 1
         ## functional multiplicity of the model
@@ -76,5 +76,5 @@
         self.non_fittable = p_model.non_fittable
         self.multiplicity_info = []
-        self.fun_list = {}
+        self.fun_list = []
         if self.non_fittable > 1:
             try:
@@ -82,5 +82,5 @@
                 self.fun_list = p_model.fun_list
                 self.is_multiplicity_model = True
-            except:
+            except AttributeError:
                 pass
         else:
Index: c/sas/sasgui/perspectives/calculator/media/gen_sas_help.html
===================================================================
--- src/sas/sasgui/perspectives/calculator/media/gen_sas_help.html	(revision 6aad2e8b144e92be94b299c8ae7f4f418c094f1d)
+++ 	(revision )
@@ -1,147 +1,0 @@
-<body>
-<h4>Generic Scattering Calculator:</h4>
-Polarization and Magnetic Scattering
-<br>
-<br>
-<ul>
-<li><a href="#theory">Theory:</a></li>
-<li><a href="#gui">GUI</a></li>
-<li><a href="#pdb">PDB Data</a></li>
-</ul>
-<br>
-<br>
-<b>1. <a name="theory">Theory</a> </b>
-<br>
-In general, a particle with a volume V can be described by an ensemble containing N 
-3-dimensional rectangular pixels where each pixels are much smaller than V. 
-Assuming that
-all the pixel sizes are same, the elastic scattering intensity 
-by the particle 
-<p>
-<img src="gen_i.png"/>
-</p>
-<br>
-where &#946;<sub>j</sub> and r<sub>j</sub> are the scattering 
-length density and the position 
-of the j'th pixel respectively. And the total volume
-<p>
-<img src="v_j.png"/>
-</p>
-<br>
-for &#946;<sub>j</sub> &#8800; 0 where v<sub>j</sub> is the volume of the j'th pixel 
-(or the j'th natural atomic volume (= atomic mass/natural molar density/Avogadro number) 
- for the atomic structures). The total volume V can be corrected by users. 
-This correction is useful especially for an atomic structure (taken from a pdb file) to get the right 
-normalization. Note that the  &#946;<sub>j</sub> displayed in GUI may be incorrect but will not 
-affect the scattering computation if the correction of the total volume is made.
-<br>
-The scattering length density (SLD) of each pixel where the SLD is uniform, is a combination of the nuclear and magnetic SLDs 
-and depends on the spin states of the neutrons as follows:
-<br>
-<br>
-For magnetic scattering, only the magnetization component, <b>M</b><sub>perp</sub>, 
-perpendicular to the scattering vector <b>Q</b> contributes to the the magnetic 
-scattering length. (Figure below).
-<p>
-<img src="mag_vector.png"/>
-</p>
-<br>
-The magnetic scattering length density is then
-<p>
-<img src="dm_eq.png"/>
-</p>
-<br>
-where &#947; = -1.913 the gyromagnetic ratio,  	&#956;<sub>B</sub> is the Bohr magneton, 
-r<sub>0</sub> is the classical radius of electron, 
-and <b>&#963;</b> is the Pauli spin.
-<br>
-For polarized neutron, the magnetic scattering is depending on the spin states.
-Let's consider that the incident neutrons are polarized parallel (+)/anti-parallel 
-(&#8211;) to the x' axis (See both Figures above).
-The possible out-coming states then are + and - states for both incident states.
-<br>
- - Non-spin-flips:  	(+ +) and  	(- -)
-<br>
- - Spin-flips:  	(+ -) and  	(- +)
-<br>
-<p>
-<img src="gen_mag_pic.png"/>
-</p>
-<br>
-<br>
-Now, let's assume that the angles of the <b>Q</b> vector and the spin-axis (x') from x-axis 
-are &#966; and  &#952;<sub>up</sub>, respectively (See Figure above).
-Then, depending upon the polarization (spin) state of neutrons, the scattering length
-densities , including the nuclear scattering length density (&#946; <sub>N</sub>) are given as, for non-spin-flips,
-<p>
-<img src="sld1.png"/>
-</p>
-<br>
-<br>
-for spin-flips,
-<p>
-<img src="sld2.png"/>
-</p>
-<br>
-<br>
-where
-<p>
-<img src="mxp.png"/>
-</p>
-<p>
-<img src="myp.png"/>
-</p>
-<p>
-<img src="mzp.png"/>
-</p>
-<p>
-<img src="mqx.png"/>
-</p>
-<p>
-<img src="mqy.png"/>
-</p>
-<br>
-<br>
-Here, the M<sub>0x</sub>, M<sub>0y</sub> and M<sub>0z</sub> are the x, y and z 
-components of the magnetization vector given in the xyz lab frame.
-<br>
-<br>
-<b>2. <a name="gui">GUI</a> </b>
-<br>
-<p>
-<img src="gen_gui_help.png"/>
-</p>
-<br>
-<p>
-After the computation, the result will be listed in the 'Theory' box 
-in the data explorer panel on the main window.
-<br>
-The 'Up_frac_in' and 'Up_frac_out' are the ratio, (spin up) /(spin up + spin down) neutrons 
-before the sample and at the analyzer, respectively.
-</p>
-<br>
-*Note I: The values of 'Up_frac_in' and 'Up_frac_out' must be in the range between 0 and 1.
-For example, both values are 0.5 for unpolarized neutrons.
-<br>
-*Note II: This computation is totally based on the pixel (or atomic) data fixed
-in the xyz coordinates. Thus no angular orientational averaging is considered.
-<br>
-*Note III: For the nuclear scattering length density, only the real component is taken account.
-<br>
-<br>
-<b>3. <a name="pdb">PDB Data</a> </b>
-<br>
-This Generic scattering calculator also supports some pdb files without considering polarized/magnetic scattering
- so that the related parameters such as Up_*** will be ignored (see the Picture below). The calculation for fixed orientation uses (the first) Equation above resulting 
-in a 2D output, whileas the scattering calculation averaged over all the orientations uses the Debye equation providing a 1D output:
- <p>
-<img src="gen_debye_eq.png"/>
-</p>
-<br>
-where v<sub>j</sub>&#946;<sub>j</sub> &#8801; b<sub>j</sub> is the scattering length of the j'th atom.
-The resultant outputs will be displayed in the DataExporer for further uses. 
-<br>
- <p>
-<img src="pdb_combo.jpg"/>
-</p>
-</body>
Index: src/sas/sasgui/perspectives/fitting/basepage.py
===================================================================
--- src/sas/sasgui/perspectives/fitting/basepage.py	(revision df4af9b201bb6e7ad7c295993873c92368617701)
+++ src/sas/sasgui/perspectives/fitting/basepage.py	(revision eee94bf769d38056d1475e9f6e901e058d6687a3)
@@ -1643,5 +1643,5 @@
                         if item_page[2].__class__.__name__ == "ComboBox":
                             if item_page_info[2] in self.model.fun_list:
-                                fun_val = self.model.fun_list[item_page_info[2]]
+                                fun_val = self.model.fun_list.index(item_page_info[2])
                                 self.model.setParam(item_page_info[1], fun_val)
                     if item_page[3] is not None:
@@ -1687,5 +1687,5 @@
                 selection = value
                 if value in self.model.fun_list:
-                    selection = self.model.fun_list[value]
+                    selection = self.model.fun_list.index(value)
                 item_page[2].SetValue(selection)
                 self.model.setParam(param_name, selection)
@@ -3365,5 +3365,5 @@
                     if item[2].__class__.__name__ == "ComboBox":
                         if content[name][1] in self.model.fun_list:
-                            fun_val = self.model.fun_list[content[name][1]]
+                            fun_val = self.model.fun_list.index(content[name][1])
                             self.model.setParam(name, fun_val)
                     try:
@@ -3415,5 +3415,5 @@
                         if item[2].__class__.__name__ == "ComboBox":
                             if value[0] in self.model.fun_list:
-                                fun_val = self.model.fun_list[value[0]]
+                                fun_val = self.model.fun_list.index(value[0])
                                 self.model.setParam(name, fun_val)
                                 # save state
Index: src/sas/sasgui/perspectives/fitting/fitpage.py
===================================================================
--- src/sas/sasgui/perspectives/fitting/fitpage.py	(revision df4af9b201bb6e7ad7c295993873c92368617701)
+++ src/sas/sasgui/perspectives/fitting/fitpage.py	(revision bfeb823d6565a781d46f2b3a96dce997cb3fab28)
@@ -1726,16 +1726,6 @@
                 and not self.temp_multi_functional:
             return None
-        # Get the func name list
-        list = self.model.fun_list
-        if len(list) == 0:
-            return None
-        # build function (combo)box
-        ind = 0
-        while(ind < len(list)):
-            for key, val in list.items():
-                if val == ind:
-                    fun_box.Append(key, val)
-                    break
-            ind += 1
+        for index, choice in enumerate(self.model.fun_list):
+            fun_box.Append(choice, index)
 
     def _on_select_accuracy(self, event):
@@ -1765,5 +1755,5 @@
         value = fun_box.GetValue()
         if value in self.model.fun_list:
-            fun_val = self.model.fun_list[value]
+            fun_val = self.model.fun_list.index(value)
 
         self.model.setParam(name, fun_val)
