Index: fittingview/src/sans/perspectives/fitting/basepage.py
===================================================================
--- fittingview/src/sans/perspectives/fitting/basepage.py	(revision 19e614a88b2cede7e0b229c9b1a8813b1d5a6490)
+++ fittingview/src/sans/perspectives/fitting/basepage.py	(revision 940aca737db034347a7b2bcbe30f143b76e47cbc)
@@ -113,5 +113,6 @@
         self.enable2D = False
         self.is_mac = ON_MAC
-        
+        self.formfactorbox = None
+        self.structurebox = None
         ##list of model parameters. each item must have same length
         ## each item related to a given parameters
@@ -882,4 +883,19 @@
             self.state.disp_list = copy.deepcopy(self.disp_list)
             self.state.model = self.model.clone()
+            
+            #model combobox: complex code because of mac's silent error
+            if self.structurebox != None:
+                if self.structurebox.IsShown():
+                    self.state.structurecombobox = 'None'
+                    s_select = self.structurebox.GetSelection()
+                    if s_select > 0:
+                        self.state.structurecombobox = self.structurebox.\
+                        GetString(s_select)
+            if self.formfactorbox != None:
+                f_select = self.formfactorbox.GetSelection()
+                if f_select > 0:
+                        self.state.formfactorcombobox = self.formfactorbox.\
+                        GetString(f_select)
+                        
         #save radiobutton state for model selection
         self.state.shape_rbutton = self.shape_rbutton.GetValue()
@@ -887,7 +903,4 @@
         self.state.struct_rbutton = self.struct_rbutton.GetValue()
         self.state.plugin_rbutton = self.plugin_rbutton.GetValue()
-        #model combobox
-        self.state.structurebox = self.structurebox.GetLabel()
-        self.state.formfactorbox = self.formfactorbox.GetLabel()
         
         self.state.enable2D = copy.deepcopy(self.enable2D)
@@ -1231,5 +1244,5 @@
             structfactor_pos = 0
             for ind_struct in range(self.structurebox.GetCount()):
-                if self.structurebox.GetString(ind_struct) == (state.structurecombobox) > 0:
+                if self.structurebox.GetString(ind_struct) == (state.structurecombobox):
                     structfactor_pos = int(ind_struct)
                     break
@@ -1428,6 +1441,6 @@
         self.state.struct_rbutton = self.struct_rbutton.GetValue()
         self.state.plugin_rbutton = self.plugin_rbutton.GetValue()
-        self.state.structurebox = self.structurebox.GetLabel()
-        self.state.formfactorbox = self.formfactorbox.GetLabel()
+        self.state.structurecombobox = self.structurebox.GetLabel()
+        self.state.formfactorcombobox = self.formfactorbox.GetLabel()
        
         ## post state to fit panel
Index: fittingview/src/sans/perspectives/fitting/batchfitpage.py
===================================================================
--- fittingview/src/sans/perspectives/fitting/batchfitpage.py	(revision 978feaa29ed76d662061c04d032cb3c233c0b4bb)
+++ fittingview/src/sans/perspectives/fitting/batchfitpage.py	(revision 940aca737db034347a7b2bcbe30f143b76e47cbc)
@@ -38,4 +38,5 @@
         self.window_caption  = "BatchFit"
         self._set_save_flag(False)
+        self._set_bookmark_flag(False)
         
     def _fill_range_sizer(self):
@@ -365,6 +366,6 @@
             self._set_paste_flag(True)
             if self.data != None:
-                self._set_bookmark_flag(True)
-                self._keep.Enable(True)
+                self._set_bookmark_flag(False)
+                self._keep.Enable(False)
                 
             temp_smear = None
@@ -552,7 +553,7 @@
         else:
             if self.model != None:
-                self._set_bookmark_flag(True)
-                self._keep.Enable(True)
-            self._set_save_flag(True)
+                self._set_bookmark_flag(False)
+                self._keep.Enable(False)
+            self._set_save_flag(False)
             self._set_preview_flag(True)
             """
Index: fittingview/src/sans/perspectives/fitting/fit_thread.py
===================================================================
--- fittingview/src/sans/perspectives/fitting/fit_thread.py	(revision aff29139acc838bf3a7c4f262533479c9af11c3d)
+++ fittingview/src/sans/perspectives/fitting/fit_thread.py	(revision 940aca737db034347a7b2bcbe30f143b76e47cbc)
@@ -26,6 +26,6 @@
                  completefn = None,
                  updatefn   = None,
-                 yieldtime  = 0.01,
-                 worktime   = 0.01,
+                 yieldtime  = 0.03,
+                 worktime   = 0.03,
                  ftol       = None,
                  reset_flag = False):
Index: fittingview/src/sans/perspectives/fitting/fitpage.py
===================================================================
--- fittingview/src/sans/perspectives/fitting/fitpage.py	(revision ac2b8359c1233c434054b10e4d57526abdd9d28b)
+++ fittingview/src/sans/perspectives/fitting/fitpage.py	(revision 940aca737db034347a7b2bcbe30f143b76e47cbc)
@@ -1220,6 +1220,6 @@
                 is_data = check_data_validity(self.data)
                 if is_data:
-                    self._set_bookmark_flag(True)
-                    self._keep.Enable(True)
+                    self._set_bookmark_flag(not self.batch_on)
+                    self._keep.Enable(not self.batch_on)
                     self._set_save_flag(True)
             # Reset smearer, model and data
@@ -1482,37 +1482,39 @@
         if len(self.parameters) > 0:
             for item in self.parameters:
-                #Skip t ifhe angle parameters if 1D data
-                if self.data.__class__.__name__ != "Data2D" and \
-                        not self.enable2D:
-                    if item in self.orientation_params:
+                if item[0].IsShown():
+                    #Skip t ifhe angle parameters if 1D data
+                    if self.data.__class__.__name__ != "Data2D" and \
+                            not self.enable2D:
+                        if item in self.orientation_params:
+                            continue
+                    if item in self.param_toFit:
                         continue
-                if item in self.param_toFit:
-                    continue
-                ## hide statictext +/-
-                if len(item) < 4:
-                    continue
-                if item[3] != None and item[3].IsShown():
-                    item[3].Hide()
-                ## hide textcrtl  for error after fit
-                if item[4] != None and item[4].IsShown():
-                    item[4].Hide()
+                    ## hide statictext +/-
+                    if len(item) < 4:
+                        continue
+                    if item[3] != None and item[3].IsShown():
+                        item[3].Hide()
+                    ## hide textcrtl  for error after fit
+                    if item[4] != None and item[4].IsShown():
+                        item[4].Hide()
   
         if len(self.fittable_param) > 0:
             for item in self.fittable_param:
-                #Skip t ifhe angle parameters if 1D data
-                if self.data.__class__.__name__ != "Data2D" and \
-                        not self.enable2D:
-                    if item in self.orientation_params:
+                if item[0].IsShown():
+                    #Skip t ifhe angle parameters if 1D data
+                    if self.data.__class__.__name__ != "Data2D" and \
+                            not self.enable2D:
+                        if item in self.orientation_params:
+                            continue
+                    if item in self.param_toFit:
                         continue
-                if item in self.param_toFit:
-                    continue
-                if len(item) < 4:
-                    continue
-                ## hide statictext +/-
-                if item[3] != None and item[3].IsShown():
-                    item[3].Hide()
-                ## hide textcrtl  for error after fit
-                if item[4] != None and item[4].IsShown():
-                    item[4].Hide()
+                    if len(item) < 4:
+                        continue
+                    ## hide statictext +/-
+                    if item[3] != None and item[3].IsShown():
+                        item[3].Hide()
+                    ## hide textcrtl  for error after fit
+                    if item[4] != None and item[4].IsShown():
+                        item[4].Hide()
         return
                 
@@ -1847,6 +1849,6 @@
         else:
             if self.model != None:
-                self._set_bookmark_flag(True)
-                self._keep.Enable(True)
+                self._set_bookmark_flag(not self.batch_on)
+                self._keep.Enable(not self.batch_on)
                 
             self._set_save_flag(True)
@@ -1941,10 +1943,10 @@
             #replace data plot on combo box selection
             #by removing the previous selected data
-            wx.PostEvent(self._manager.parent,
-                         NewPlotEvent(action="remove",
-                                      group_id=self.graph_id, id=id))
+            #wx.PostEvent(self._manager.parent,
+            #             NewPlotEvent(action="remove",
+            #                          group_id=self.graph_id, id=id))
             #plot the current selected data
             wx.PostEvent(self._manager.parent,
-                         NewPlotEvent(plot=self.data,
+                         NewPlotEvent(action="check", plot=self.data,
                                       title=str(self.data.title)))
             self._draw_model()
@@ -2077,36 +2079,39 @@
         for item in self.param_toFit:
             if len(item) > 5 and item != None:
-                ## reset error value to initial state
-                if not self.is_mac:
-                    item[3].Hide()
-                    item[4].Hide()
-                for ind in range(len(out)):
-                    if item[1] == p_name[ind]:
-                        break
-                if len(out) <= len(self.param_toFit) and out[ind] != None:
-                    val_out = format_number(out[ind], True)
-                    item[2].SetValue(val_out)
-
-                if(cov != None and len(cov) == len(out)):
-                    try:
-                        if dispersity != None:
-                            if self.enable_disp.GetValue():
-                                if hasattr(self, "text_disp_1"):
-                                    if self.text_disp_1 != None:
-                                        if not self.text_disp_1.IsShown()\
-                                            and not self.is_mac:
-                                            self.text_disp_1.Show(True)
-                    except:
-                        pass
-                    
-                    if cov[ind] != None:
-                        if numpy.isfinite(float(cov[ind])):
-                            val_err = format_number(cov[ind], True)
-                            if not self.is_mac:
-                                item[3].Show(True)
-                                item[4].Show(True)
-                            item[4].SetValue(val_err)
-                            has_error = True
+                if item[0].IsShown():
+                    ## reset error value to initial state
+                    if not self.is_mac:
+                        item[3].Hide()
+                        item[4].Hide()
+                    for ind in range(len(out)):
+                        if item[1] == p_name[ind]:
+                            break
+                    if len(out) > 0 and out[ind] != None:
+                        val_out = format_number(out[ind], True)
+                        item[2].SetValue(val_out)
+    
+                    if(cov != None and len(cov) == len(out)):
+                        try:
+                            if dispersity != None:
+                                if self.enable_disp.GetValue():
+                                    if hasattr(self, "text_disp_1"):
+                                        if self.text_disp_1 != None:
+                                            if not self.text_disp_1.IsShown()\
+                                                and not self.is_mac:
+                                                self.text_disp_1.Show(True)
+                        except:
+                            pass
+                        
+                        if cov[ind] != None:
+                            if numpy.isfinite(float(cov[ind])):
+                                val_err = format_number(cov[ind], True)
+                                if not self.is_mac:
+                                    item[3].Show(True)
+                                    item[4].Show(True)
+                                item[4].SetValue(val_err)
+                                has_error = True
                 i += 1
+            else:
+                raise ValueError, "onsetValues: Invalid parameters..."
         #Show error title when any errors displayed
         if has_error:
@@ -2606,8 +2611,10 @@
         for item in self.parameters:
             if item[0].GetValue() and item not in self.param_toFit:
-                self.param_toFit.append(item)
+                if item[0].IsShown():
+                    self.param_toFit.append(item)
         for item in self.fittable_param:
             if item[0].GetValue() and item not in self.param_toFit:
-                self.param_toFit.append(item)
+                if item[0].IsShown():
+                    self.param_toFit.append(item)
         self.save_current_state_fit()
        
@@ -2616,5 +2623,5 @@
         param2fit = []
         for item in self.param_toFit:
-            if item[0]:
+            if item[0] and item[0].IsShown():
                 param2fit.append(item[1])
         self.parent._manager.set_param2fit(self.uid, param2fit)
@@ -2628,29 +2635,22 @@
             if  self.cb1.GetValue():
                 for item in self.parameters:
-                    ## for data2D select all to fit
-                    if self.data.__class__.__name__ == "Data2D" or \
-                            self.enable2D:
-                        item[0].SetValue(True)
-                        self.param_toFit.append(item)
-                    else:
-                        ## for 1D all parameters except orientation
-                        if not item in self.orientation_params:
+                    if item[0].IsShown():
+                        ## for data2D select all to fit
+                        if self.data.__class__.__name__ == "Data2D" or \
+                                self.enable2D:
                             item[0].SetValue(True)
                             self.param_toFit.append(item)
+                        else:
+                            ## for 1D all parameters except orientation
+                            if not item in self.orientation_params:
+                                item[0].SetValue(True)
+                                self.param_toFit.append(item)
+                    else:
+                        item[0].SetValue(False)
                 #if len(self.fittable_param)>0:
                 for item in self.fittable_param:
-                    if self.data.__class__.__name__ == "Data2D" or \
-                            self.enable2D:
-                        item[0].SetValue(True)
-                        self.param_toFit.append(item)
-                        try:
-                            if len(self.values[item[1]]) > 0:
-                                item[0].SetValue(False)
-                        except:
-                            pass
-
-                    else:
-                        ## for 1D all parameters except orientation
-                        if not item in self.orientation_params_disp:
+                    if item[0].IsShown():
+                        if self.data.__class__.__name__ == "Data2D" or \
+                                self.enable2D:
                             item[0].SetValue(True)
                             self.param_toFit.append(item)
@@ -2660,4 +2660,17 @@
                             except:
                                 pass
+    
+                        else:
+                            ## for 1D all parameters except orientation
+                            if not item in self.orientation_params_disp:
+                                item[0].SetValue(True)
+                                self.param_toFit.append(item)
+                                try:
+                                    if len(self.values[item[1]]) > 0:
+                                        item[0].SetValue(False)
+                                except:
+                                    pass
+                    else:
+                        item[0].SetValue(False)
 
             else:
@@ -2677,5 +2690,5 @@
         param2fit = []
         for item in self.param_toFit:
-            if item[0]:
+            if item[0] and item[0].IsShown():
                 param2fit.append(item[1])
         self.parent._manager.set_param2fit(self.uid, param2fit)
@@ -2694,5 +2707,5 @@
                     continue
             #Select parameters to fit for list of primary parameters
-            if item[0].GetValue():
+            if item[0].GetValue() and item[0].IsShown():
                 if not (item in self.param_toFit):
                     self.param_toFit.append(item)
@@ -2710,5 +2723,5 @@
                 if item in self.orientation_params:
                     continue
-            if item[0].GetValue():
+            if item[0].GetValue() and item[0].IsShown():
                 if not (item in self.param_toFit):
                     self.param_toFit.append(item)
@@ -2742,5 +2755,5 @@
         param2fit = []
         for item in self.param_toFit:
-            if item[0]:
+            if item[0] and item[0].IsShown():
                 param2fit.append(item[1])
         self.parent._manager.set_param2fit(self.uid, param2fit)
Index: fittingview/src/sans/perspectives/fitting/fitting.py
===================================================================
--- fittingview/src/sans/perspectives/fitting/fitting.py	(revision b9dd680bcb0bbb92d8a66d4ec3f0af3c4631854b)
+++ fittingview/src/sans/perspectives/fitting/fitting.py	(revision 940aca737db034347a7b2bcbe30f143b76e47cbc)
@@ -48,5 +48,5 @@
 
 
-if sys.platform.count("darwin") == 0:
+if sys.platform == "win32":
     ON_MAC = False
 else:
@@ -73,4 +73,5 @@
         self.weight = None
         self.fit_panel = None
+        self.plot_panel = None
         # Start with a good default
         self.elapsed = 0.022
@@ -460,4 +461,5 @@
                 
         """
+        self.plot_panel = plotpanel
         graph = plotpanel.graph
         fit_option = "Select data for fitting"
@@ -483,4 +485,5 @@
                 else:
                     return []
+            return [[fit_option, fit_hint, self._onSelect]]
         return []
 
@@ -1281,16 +1284,17 @@
         added to self.page_finder
         """
-        self.panel = event.GetEventObject()
+        panel = self.plot_panel
+        if panel == None:
+            raise ValueError, "Fitting:_onSelect: NonType panel"
         Plugin.on_perspective(self, event=event)
-        self.select_data(self.panel)
+        self.select_data(panel)
         
     def select_data(self, panel):
         """
         """
-        self.panel = panel
-        for plottable in self.panel.graph.plottables:
+        for plottable in panel.graph.plottables:
             if plottable.__class__.__name__ in ["Data1D", "Theory1D"]:
-                data_id = self.panel.graph.selected_plottable
-                if plottable == self.panel.plots[data_id]:
+                data_id = panel.graph.selected_plottable
+                if plottable == panel.plots[data_id]:
                     data = plottable
                     self.add_fit_page(data=[data])
@@ -1880,9 +1884,8 @@
 
         if len(title) > 1:
-            new_plot.title = "Model2D for " + data_name
+            new_plot.title = "Model2D for %s "% model.name + data_name
         new_plot.name = model.name + " [" + \
-                                    data_name + "-2D]"
+                                    data_name + "]"
         theory_data = deepcopy(new_plot)
-        theory_data.name = "Unknown"
         
         self.page_finder[page_id].set_theory_data(data=theory_data,
@@ -2128,10 +2131,12 @@
             residuals.xaxis('\\rm{Q} ', 'A^{-1}')
             residuals.yaxis('\\rm{Residuals} ', 'normalized')
+        theory_name = str(theory_data.name.split()[0])
         new_plot = residuals
-        new_plot.name = "Residuals for " + str(theory_data.name.split()[0]) + "[" +  str(data.name) +"]"
+        new_plot.name = "Residuals for " + str(theory_name) + "[" +\
+                        str(data.name) +"]"
         ## allow to highlight data when plotted
         new_plot.interactive = True
         ## when 2 data have the same id override the 1 st plotted
-        new_plot.id = "res" + str(data_copy.id)
+        new_plot.id = "res" + str(data_copy.id) + str(theory_name)
         ##group_id specify on which panel to plot this data
         group_id = self.page_finder[page_id].get_graph_id()
Index: fittingview/src/sans/perspectives/fitting/simfitpage.py
===================================================================
--- fittingview/src/sans/perspectives/fitting/simfitpage.py	(revision f32d144d174cb53c8dbffe9c43bb830e97f32b7b)
+++ fittingview/src/sans/perspectives/fitting/simfitpage.py	(revision 940aca737db034347a7b2bcbe30f143b76e47cbc)
@@ -215,4 +215,5 @@
             
         self._update_easy_setup_cb()
+        self.Layout()
         self.Refresh()
         
@@ -664,4 +665,7 @@
         ## some model or parameters can be constrained
         self._show_constraint()
+        self.sizer3.Layout()
+        self.Layout()
+        self.Refresh()
         
     def _fill_sizer_fit(self):
Index: park_integration/src/sans/fit/ParkFitting.py
===================================================================
--- park_integration/src/sans/fit/ParkFitting.py	(revision 06e7c26e9840606d993e240d7b7adac9e7ccbb94)
+++ park_integration/src/sans/fit/ParkFitting.py	(revision 940aca737db034347a7b2bcbe30f143b76e47cbc)
@@ -435,5 +435,6 @@
             if result is not None:
                 for p in result.parameters:
-                    if p.data.name == small_result.data.name:
+                    if p.data.name == small_result.data.name and \
+                            p.model.name == small_result.model.name:
                         small_result.index = m.data.idx
                         small_result.fitness = result.fitness
Index: plottools/src/danse/common/plottools/SizeDialog.py
===================================================================
--- plottools/src/danse/common/plottools/SizeDialog.py	(revision 10bfeb307197dbe02c1ab9ca2e868b076c0cd128)
+++ plottools/src/danse/common/plottools/SizeDialog.py	(revision 940aca737db034347a7b2bcbe30f143b76e47cbc)
@@ -10,5 +10,5 @@
         textbox = wx.BoxSizer(wx.HORIZONTAL)
         hbox = wx.BoxSizer(wx.HORIZONTAL)
-        text1 = "Enter in a custom size (float values > 0 accepted)"
+        text1 = "Enter in a custom size (> 0 accepted)"
         msg = wx.StaticText(self, -1, text1, (30,15), style=wx.ALIGN_CENTRE)
         msg.SetLabel(text1)
@@ -16,9 +16,9 @@
         
         textbox.Add(self.myTxtCtrl, flag=wx.LEFT|wx.RIGHT|wx.ADJUST_MINSIZE,
-                 border=10, proportion=2)
+                 border=10)
         vbox.Add(msg, flag=wx.ALL, border=10, proportion=1)
         vbox.Add(textbox, flag=wx.EXPAND|wx.TOP|wx.BOTTOM|wx.ADJUST_MINSIZE,
                  border=10)
-        self.myTxtCtrl.SetValue(str(10))
+        self.myTxtCtrl.SetValue(str(5))
         
         okButton = wx.Button(self, wx.ID_OK, 'OK', size=(70, 25))
Index: sansguiframe/src/sans/guiframe/gui_manager.py
===================================================================
--- sansguiframe/src/sans/guiframe/gui_manager.py	(revision 6306f2f639a273e7a698e0d6b26872deb4bf2777)
+++ sansguiframe/src/sans/guiframe/gui_manager.py	(revision 940aca737db034347a7b2bcbe30f143b76e47cbc)
@@ -452,5 +452,11 @@
             return
         _, ext = os.path.splitext(name)
-        fd = open(file_name, 'w')
+        try:
+            fd = open(file_name, 'w')
+        except:
+            # On Permission denied: IOError
+            temp_dir = get_user_directory()
+            temp_file_name = os.path.join(temp_dir, name)
+            fd = open(temp_file_name, 'w')
         separator = "\t"
         if ext.lower() == ".csv":
@@ -491,7 +497,7 @@
             excel_app.Visible = 1
         except:
-            msg = "Error occured when calling Excel\n"
-            msg += "Check that Excel in installed in this machine or \n"
-            msg += "Check that %s really exists.\n" % str(file_name)
+            msg = "Error occured when calling Excel.\n"
+            msg += "Check that Excel installed in this machine or \n"
+            msg += "check that %s really exists.\n" % str(file_name)
             wx.PostEvent(self, StatusEvent(status=msg,
                                              info="error"))
@@ -1031,5 +1037,18 @@
         return menu_list
         
-        
+    def get_current_context_menu(self, plotpanel=None):
+        """
+        Get the context menu items made available 
+        by the current plug-in. 
+        This function is used by the plotting module
+        """
+        if plotpanel is None:
+            return
+        menu_list = []
+        item = self._current_perspective
+        if item != None:
+            menu_list.extend(item.get_context_menu(plotpanel=plotpanel))
+        return menu_list
+            
     def on_panel_close(self, event):
         """
@@ -2598,8 +2617,13 @@
                 if has_errors:
                     if data.dx != [] and data.dx[i] != None:
-                        out.write("%g  %g  %g  %g\n" % (data.x[i], 
-                                                    data.y[i],
-                                                    data.dy[i],
-                                                    data.dx[i]))
+                        if  data.dx[i] != None:
+                            out.write("%g  %g  %g  %g\n" % (data.x[i], 
+                                                        data.y[i],
+                                                        data.dy[i],
+                                                        data.dx[i]))
+                        else:
+                            out.write("%g  %g  %g\n" % (data.x[i], 
+                                                        data.y[i],
+                                                        data.dy[i]))
                     else:
                         out.write("%g  %g  %g\n" % (data.x[i], 
Index: sansguiframe/src/sans/guiframe/gui_statusbar.py
===================================================================
--- sansguiframe/src/sans/guiframe/gui_statusbar.py	(revision 199fdec04f37527fb4df9b246657fd366ca3979d)
+++ sansguiframe/src/sans/guiframe/gui_statusbar.py	(revision 940aca737db034347a7b2bcbe30f143b76e47cbc)
@@ -238,8 +238,9 @@
         clear the progress bar
         """
-        flag = False
-        if (self.nb_start <= self.nb_stop) or \
-            (self.nb_progress <= self.nb_stop):
-            flag = True
+        flag = True
+        # Why we do this?
+        #if (self.nb_start <= self.nb_stop) or \
+        #    (self.nb_progress <= self.nb_stop):
+        #    flag = True
         return flag
     
Index: sansguiframe/src/sans/guiframe/local_perspectives/plotting/AnnulusSlicer.py
===================================================================
--- sansguiframe/src/sans/guiframe/local_perspectives/plotting/AnnulusSlicer.py	(revision 13382fc7d6239b432b9612e03e8b6f5c1beeb0b8)
+++ sansguiframe/src/sans/guiframe/local_perspectives/plotting/AnnulusSlicer.py	(revision 940aca737db034347a7b2bcbe30f143b76e47cbc)
@@ -167,6 +167,6 @@
 
         new_plot.group_id = "AnnulusPhi" + self.base.data2D.name
-        new_plot.id = None
-        #new_plot.is_data= True
+        new_plot.id = "AnnulusPhi" + self.base.data2D.name
+        new_plot.is_data= True
         new_plot.xtransform = "x"
         new_plot.ytransform = "y"
Index: sansguiframe/src/sans/guiframe/local_perspectives/plotting/Plotter1D.py
===================================================================
--- sansguiframe/src/sans/guiframe/local_perspectives/plotting/Plotter1D.py	(revision 78919f451c2c75108982c75a7aec976d4f58a145)
+++ sansguiframe/src/sans/guiframe/local_perspectives/plotting/Plotter1D.py	(revision 940aca737db034347a7b2bcbe30f143b76e47cbc)
@@ -41,5 +41,5 @@
 DEFAULT_BEAM = 0.005
 BIN_WIDTH = 1
-
+IS_MAC = (sys.platform == 'darwin')
 
 class ModelPanel1D(PlotPanel, PanelBase):
@@ -174,4 +174,10 @@
         # It was found that wx >= 2.9.3 sends an event even if no size changed.
         # So manually recode the size (=x_size) and compare here.
+        # Massy code to work around:<
+        if self.parent._mgr != None:
+            max_panel = self.parent._mgr.GetPane(self)
+            if max_panel.IsMaximized():
+                self.parent._mgr.RestorePane(max_panel)
+                max_panel.Maximize()
         if self.x_size != None:
             if self.x_size == self.GetSize():
@@ -286,4 +292,7 @@
             try:
                 self._onEVT_FUNC_PROPERTY()
+                if IS_MAC:
+                    # MAC: forcing to plot 2D avg
+                    self.canvas._onDrawIdle()
             except:
                 msg=" Encountered singular points..."
@@ -409,6 +418,15 @@
                 if plot != self.plots[self.graph.selected_plottable]:
                     continue
+                
+            id = wx.NewId()
+            plot_menu.Append(id, "&DataInfo", name)
+            wx.EVT_MENU(self, id, self. _onDataShow)
+            id = wx.NewId()
+            plot_menu.Append(id, "&Save Points as a File", name)
+            wx.EVT_MENU(self, id, self._onSave)
+            plot_menu.AppendSeparator()
+            
             #add menu of other plugins
-            item_list = self.parent.get_context_menu(self)
+            item_list = self.parent.get_current_context_menu(self)
               
             if (not item_list == None) and (not len(item_list) == 0):
@@ -425,12 +443,5 @@
                         pass
                 plot_menu.AppendSeparator()
-                
-            id = wx.NewId()
-            plot_menu.Append(id, "&DataInfo", name)
-            wx.EVT_MENU(self, id, self. _onDataShow)
-            id = wx.NewId()
-            plot_menu.Append(id, "&Save Points as a File", name)
-            wx.EVT_MENU(self, id, self._onSave)
-            plot_menu.AppendSeparator()
+            
             if self.parent.ClassName.count('wxDialog') == 0: 
                 id = wx.NewId()
Index: sansguiframe/src/sans/guiframe/local_perspectives/plotting/Plotter2D.py
===================================================================
--- sansguiframe/src/sans/guiframe/local_perspectives/plotting/Plotter2D.py	(revision 2778c4f23185a3c3c4b74a32e3cc7e6a483122f2)
+++ sansguiframe/src/sans/guiframe/local_perspectives/plotting/Plotter2D.py	(revision 940aca737db034347a7b2bcbe30f143b76e47cbc)
@@ -321,5 +321,5 @@
         if len(self.data2D.detector) == 1:        
             
-            item_list = self.parent.get_context_menu(self)
+            item_list = self.parent.get_current_context_menu(self)
             if (not item_list == None) and (not len(item_list) == 0) and\
                 self.data2D.name.split(" ")[0] != 'Residuals':  
@@ -631,5 +631,5 @@
             new_plot.yaxis("\\rm{Intensity} ", "cm^{-1}")
 
-        new_plot.group_id = "Circ avg " + self.data2D.name
+        new_plot.group_id = "2daverage"  + self.data2D.name
         new_plot.id = "Circ avg " + self.data2D.name
         new_plot.is_data = True
Index: sansguiframe/src/sans/guiframe/local_perspectives/plotting/SectorSlicer.py
===================================================================
--- sansguiframe/src/sans/guiframe/local_perspectives/plotting/SectorSlicer.py	(revision 789ffc6013a5d6655e5dc153e1686836e70f7bb0)
+++ sansguiframe/src/sans/guiframe/local_perspectives/plotting/SectorSlicer.py	(revision 940aca737db034347a7b2bcbe30f143b76e47cbc)
@@ -183,6 +183,6 @@
             new_plot.yaxis("\\rm{Residuals} ", "/")
 
-        new_plot.group_id = "SectorQ" + self.base.data2D.name
-        new_plot.id = None
+        new_plot.group_id = "2daverage" + self.base.data2D.name
+        new_plot.id = "SectorQ" + self.base.data2D.name
         new_plot.is_data = True
         self.base.parent.update_theory(data_id=data, \
Index: sansguiframe/src/sans/guiframe/local_perspectives/plotting/SlicerParameters.py
===================================================================
--- sansguiframe/src/sans/guiframe/local_perspectives/plotting/SlicerParameters.py	(revision 8c347a61193367bd8a75b5a9949e34a45f6b9385)
+++ sansguiframe/src/sans/guiframe/local_perspectives/plotting/SlicerParameters.py	(revision 940aca737db034347a7b2bcbe30f143b76e47cbc)
@@ -87,5 +87,4 @@
                     ctl.SetValue(format_number(str(params[item])))
                     self.Bind(wx.EVT_TEXT_ENTER, self.onTextEnter)
-                    ctl.Bind(wx.EVT_KILL_FOCUS, self.onTextEnter)
                     self.parameters.append([item, ctl])
                     self.bck.Add(ctl, (iy, ix), (1, 1), 
Index: sansguiframe/src/sans/guiframe/local_perspectives/plotting/boxSlicer.py
===================================================================
--- sansguiframe/src/sans/guiframe/local_perspectives/plotting/boxSlicer.py	(revision 13382fc7d6239b432b9612e03e8b6f5c1beeb0b8)
+++ sansguiframe/src/sans/guiframe/local_perspectives/plotting/boxSlicer.py	(revision 940aca737db034347a7b2bcbe30f143b76e47cbc)
@@ -198,7 +198,7 @@
             new_plot.yaxis("\\rm{Residuals} ", "/")
             
-        new_plot.group_id = str(self.averager.__name__) + self.base.data2D.name
-        #new_plot.id = str(self.averager.__name__)
-        #new_plot.is_data= True
+        new_plot.group_id = "2daverage" + self.base.data2D.name
+        new_plot.id = (self.averager.__name__) + self.base.data2D.name
+        new_plot.is_data= True
         self.base.parent.update_theory(data_id=self.base.data2D.id, \
                                        theory=new_plot)
Index: sansguiframe/src/sans/guiframe/local_perspectives/plotting/plotting.py
===================================================================
--- sansguiframe/src/sans/guiframe/local_perspectives/plotting/plotting.py	(revision 48832acc10aa946740ade3cf47902b02cfd40995)
+++ sansguiframe/src/sans/guiframe/local_perspectives/plotting/plotting.py	(revision 940aca737db034347a7b2bcbe30f143b76e47cbc)
@@ -276,29 +276,37 @@
         
         """
+        action_check = False
         if hasattr(event, 'action'):
-            group_id = event.group_id
-            if group_id in self.plot_panels.keys():
-                #remove data from panel
-                if event.action.lower().strip() == 'remove':
-                    id = event.id
-                    return self.remove_plot(group_id, id)
-                if event.action.lower().strip() == 'hide':
-                    return self.hide_panel(group_id)
-                if event.action.lower().strip() == 'delete':
-                    panel = self.plot_panels[group_id]
-                    uid = panel.uid
-                    return self.parent.delete_panel(uid)
-                if event.action.lower().strip() == "clear":
-                    return self.clear_panel_by_id(group_id)
+            action_string = event.action.lower().strip()
+            if action_string == 'check':
+                action_check = True
+            else:
+                group_id = event.group_id
+                if group_id in self.plot_panels.keys():
+                    #remove data from panel
+                    if action_string == 'remove':
+                        id = event.id
+                        return self.remove_plot(group_id, id)
+                    if action_string == 'hide':
+                        return self.hide_panel(group_id)
+                    if action_string == 'delete':
+                        panel = self.plot_panels[group_id]
+                        uid = panel.uid
+                        return self.parent.delete_panel(uid)
+                    if action_string == "clear":
+                        return self.clear_panel_by_id(group_id)
+                    
         if not hasattr(event, 'plot'):    
             return
         title = None
         if hasattr(event, 'title'):
-            title = 'Graph'#event.title
-                
+            title = 'Graph'#event.title      
         data = event.plot
-        group_id = data.group_id
-            
-        if group_id in self.plot_panels.keys():
+        group_id = data.group_id    
+        if group_id in self.plot_panels.keys():
+            if action_check:
+                # Check if the plot already exist. if it does, do nothing.
+                if data.id in self.plot_panels[group_id].plots.keys():
+                    return 
             #update a panel graph 
             panel = self.plot_panels[group_id]
@@ -309,7 +317,22 @@
                 new_panel = self.create_1d_panel(data, group_id)
             else:
+                # Need to make the group_id consistent with 1D thus no if below
+                if len(self.plot_panels.values()) > 0:
+                    for p_group_id in self.plot_panels.keys():
+                        p_plot = self.plot_panels[p_group_id]
+                        if data.id in p_plot.plots.keys():
+                            p_plot.plots[data.id] = data
+                            self.plot_panels[group_id] = p_plot
+                            if group_id != p_group_id:
+                                del self.plot_panels[p_group_id]
+                                if p_group_id in data.list_group_id:
+                                    data.list_group_id.remove(p_group_id)
+                                if group_id not in data.list_group_id:
+                                    data.list_group_id.append(group_id)
+                            p_plot.group_id = group_id
+                            return
+                
                 new_panel = self.create_2d_panel(data, group_id)
-            self.create_panel_helper(new_panel, data, group_id, title)
-            
+            self.create_panel_helper(new_panel, data, group_id, title) 
         return
 
Index: sansguiframe/src/sans/guiframe/local_perspectives/plotting/profile_dialog.py
===================================================================
--- sansguiframe/src/sans/guiframe/local_perspectives/plotting/profile_dialog.py	(revision 2d443fde5deda0cbc1b82bb103bbf62e4c79cfcc)
+++ sansguiframe/src/sans/guiframe/local_perspectives/plotting/profile_dialog.py	(revision 940aca737db034347a7b2bcbe30f143b76e47cbc)
@@ -53,4 +53,5 @@
             self.SetTitle("Scattering Length Density Profile")
             self.parent = parent
+            self._mgr = None
             self.data = data
             self.str = self.data.__str__()
@@ -75,4 +76,5 @@
             self.newplot.dy = None
             self.newplot.name = 'SLD'
+            self.newplot.id = self.newplot.name
             self.plotpanel.add_image(self.newplot) 
             self.plotpanel.subplot.set_ylim(min(data_plot.y) - _Y_OFF , 
@@ -81,4 +83,7 @@
                                                 max(data_plot.x) + _X_OFF)
             #self.Centre()
+            self.plotpanel.resizing = False
+            self.plotpanel.canvas.set_resizing(self.plotpanel.resizing)
+            self.plotpanel.subplot.figure.canvas.draw_idle()
             self.Layout()
 
@@ -175,4 +180,10 @@
         self.parent.parent.parent.on_change_caption(name, old_caption, new_caption)
     
+    def disable_app_menu(self, panel):
+        """
+        Disable menu bar
+        """
+        # Not implemented!
+        return
     
 class SLDplotpanel(PlotPanel):
@@ -203,4 +214,5 @@
         self.yaxis_label = ''
         self.yaxis_unit = ''
+        self.resizing = True
         
     def add_image(self, plot):
@@ -208,8 +220,6 @@
         Add image(Theory1D)
         """
-        self.plots[plot.name] = plot
-        self.plots[plot.name].is_data = False
-        #init graph
-        #self.gaph = Graph()
+        self.plots[plot.id] = plot
+        self.plots[plot.id].is_data = True
         #add plot
         self.graph.add(plot)
@@ -222,11 +232,10 @@
         self.yaxis_unit = '10^{-6}A^{-2}'
         self.graph.yaxis(self.yaxis_label, self.yaxis_unit)
+        #self.subplot.figure.canvas.draw_idle()
+        # For latter scale changes 
+        self.plots[plot.id].xaxis('\\rm{%s} '% x1_label, 'A')
+        self.plots[plot.id].yaxis('\\rm{SLD} ', '10^{-6}A^{-2}')
         #draw
         self.graph.render(self)
-        self.subplot.figure.canvas.draw_idle()
-                
-        # For latter scale changes 
-        self.plots[plot.name].xaxis('\\rm{%s} '% x1_label, 'A')
-        self.plots[plot.name].yaxis('\\rm{SLD} ', '10^{-6}A^{-2}')
         
     def on_set_focus(self, event):
@@ -257,5 +266,5 @@
         """
         pass
-    
+                           
     def _onSave(self, evt):
         """
@@ -265,55 +274,17 @@
         
         """
-       
-        path = None
-        wildcard = "Text files (*.txt)|*.txt|"\
-                    "CanSAS 1D files(*.xml)|*.xml" 
-        default_name = "sld_profile"
+        menu = evt.GetEventObject()
+        id = evt.GetId()
+        self.set_selected_from_menu(menu, id)
+        data = self.plots[self.graph.selected_plottable]
+        default_name = data.label
+        if default_name.count('.') > 0:
+            default_name = default_name.split('.')[0]
+        default_name += "_out"
         if self.parent != None:
-            self._default_save_location = self.parent.parent._default_save_location
-        dlg = wx.FileDialog(self, "Choose a file",
-                            self._default_save_location,
-                            default_name, wildcard , wx.SAVE)
-       
-        if dlg.ShowModal() == wx.ID_OK:
-            path = dlg.GetPath()
-            # ext_num = 0 for .txt, ext_num = 1 for .xml
-            # This is MAC Fix
-            ext_num = dlg.GetFilterIndex()
-            if ext_num == 0:
-                format = '.txt'
-            else:
-                format = '.xml'
-            path = os.path.splitext(path)[0] + format
-            mypath = os.path.basename(path)
-            
-            #TODO: This is bad design. The DataLoader is designed 
-            #to recognize extensions.
-            # It should be a simple matter of calling the .
-            #save(file, data, '.xml') method
-            # of the sans.dataloader.loader.Loader class.
-            from sans.dataloader.loader import  Loader
-            #Instantiate a loader 
-            loader = Loader() 
-            data = self.parent.data
-            format = ".txt"
-            if os.path.splitext(mypath)[1].lower() == format:
-                # Make sure the ext included in the file name
-                # especially on MAC
-                fName = os.path.splitext(path)[0] + format
-                self._onsaveTXT(fName)
-            format = ".xml"
-            if os.path.splitext(mypath)[1].lower() == format:
-                # Make sure the ext included in the file name
-                # especially on MAC
-                fName = os.path.splitext(path)[0] + format
-                loader.save(fName, data, format)
-            try:
-                self._default_save_location = os.path.dirname(path)
-                self.parent.parent._default_save_location = self._default_save_location
-            except:
-                pass    
-        dlg.Destroy()
-         
+            # What an ancestor!
+            fit_panel = self.parent.parent.parent
+            fit_panel.parent.save_data1d(data, default_name)
+             
 class ViewerFrame(wx.Frame):
     """
Index: sansguiframe/src/sans/guiframe/media/Graph_help.html
===================================================================
--- sansguiframe/src/sans/guiframe/media/Graph_help.html	(revision d8740928b8b3419225ae25a86319a24bfa86ac72)
+++ sansguiframe/src/sans/guiframe/media/Graph_help.html	(revision 940aca737db034347a7b2bcbe30f143b76e47cbc)
@@ -7,8 +7,8 @@
 <li><a href="#reset">Reset Graph</a></li>
 <li><a href="#hide">Hide/Show/Delete Graph</a></li>
+<li><a href="#info">Data Info</a></li>
 <li><a href="#save">Save plot Image</a></li>
 <li><a href="#savedata">Save Data</a></li>
 <li><a href="#drag">Drag plot</a></li>
-<li><a href="#select">Select Data</a></li>
 <li><a href="#zoom">Zoom In/Out</a></li>
 <li><a href="#remove">Remove Data</a></li>
@@ -33,5 +33,5 @@
 <h5><a name="hide">Hide/Show/Delete Graph</a></h5>
 <p>
-	To Hide, click the Hide (closed eye) button in the tool bar.<br>
+	To Hide, click the Hide (bar) button in the tool bar.<br>
 	To Show, select the the 'Show' menuitem in the 'Graph' menu in the menu bar.<br>
 	To Delete, click the 'x' button in the title bar.<br>
@@ -43,4 +43,9 @@
 	Right click on plot. Context menu will pop-up select save image [file name].A dialog
 	window opens and write a the name of the file to save and click on <b>Save Image.</b>
+</p>
+
+<h5><a name="info"> Data Info</a></h5>
+<p>
+	From the context menu, select 'Data Info' to see the data information dialog panel.
 </p>
 
Index: sansmodels/src/libigor/libStructureFactor.c
===================================================================
--- sansmodels/src/libigor/libStructureFactor.c	(revision 67424cdc019bde2f4cbc089828ff660e6f914c2c)
+++ sansmodels/src/libigor/libStructureFactor.c	(revision 940aca737db034347a7b2bcbe30f143b76e47cbc)
@@ -7,6 +7,4 @@
 #include "StandardHeaders.h"			// Include ANSI headers, Mac headers, IgorXOP.h, XOP.h and XOPSupport.h
 #include "libStructureFactor.h"
-
-static double gMSAWave[17]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17};
 
 //Hard Sphere Structure Factor
@@ -177,4 +175,5 @@
 HayterPenfoldMSA(double dp[], double q)
 {
+  double gMSAWave[17]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17};
 	double Elcharge=1.602189e-19;		// electron charge in Coulombs (C)
 	double kB=1.380662e-23;				// Boltzman constant in J/K
@@ -231,7 +230,7 @@
 	
 	ierr=0;
-	ierr=sqcoef(ierr);
+	ierr=sqcoef(ierr, gMSAWave);
 	if (ierr>=0) {
-		SofQ=sqhcal(Qdiam);
+		SofQ=sqhcal(Qdiam, gMSAWave);
 	}else{
        	//SofQ=NaN;
@@ -269,9 +268,9 @@
 //
 int
-sqcoef(int ir)
+sqcoef(int ir, double gMSAWave[])
 {	
 	int itm=40,ix,ig,ii;
 	double acc=5.0E-6,del,e1,e2,f1,f2;
-	
+
 	//      WAVE gMSAWave = $"root:HayPenMSA:gMSAWave"
 	f1=0;		//these were never properly initialized...
@@ -284,5 +283,5 @@
 		gMSAWave[16]=gMSAWave[4];
 		ix=1;
-		ir = sqfun(ix,ir);
+		ir = sqfun(ix,ir,gMSAWave);
 		gMSAWave[14]=gMSAWave[15];
 		gMSAWave[4]=gMSAWave[16];
@@ -310,5 +309,5 @@
 			gMSAWave[16]=e1;
 			ix=2;
-			ir = sqfun(ix,ir);
+			ir = sqfun(ix,ir,gMSAWave);
 			f1=gMSAWave[15];
 			e1=gMSAWave[16];
@@ -317,5 +316,5 @@
 			gMSAWave[16]=e2;
 			ix=2;
-			ir = sqfun(ix,ir);
+			ir = sqfun(ix,ir,gMSAWave);
 			f2=gMSAWave[15];
 			e2=gMSAWave[16];
@@ -327,5 +326,5 @@
 		gMSAWave[16]=e2;
 		ix=4;
-		ir = sqfun(ix,ir);
+		ir = sqfun(ix,ir,gMSAWave);
 		gMSAWave[14]=gMSAWave[15];
 		e2=gMSAWave[16];
@@ -338,5 +337,5 @@
 	gMSAWave[16]=gMSAWave[4];
 	ix=3;
-	ir = sqfun(ix,ir);
+	ir = sqfun(ix,ir,gMSAWave);
 	gMSAWave[14]=gMSAWave[15];
 	gMSAWave[4]=gMSAWave[16];
@@ -349,5 +348,5 @@
 
 int
-sqfun(int ix, int ir)
+sqfun(int ix, int ir, double gMSAWave[])
 {	
 	double acc=1.0e-6;
@@ -712,9 +711,9 @@
 
 double
-sqhcal(double qq)
+sqhcal(double qq, double gMSAWave[])
 {      	
     double SofQ,etaz,akz,gekz,e24,x1,x2,ck,sk,ak2,qk,q2k,qk2,qk3,qqk,sink,cosk,asink,qcosk,aqk,inter; 		
 	//	WAVE gMSAWave = $"root:HayPenMSA:gMSAWave"
-	
+
 	etaz = gMSAWave[10];
 	akz =  gMSAWave[12];
Index: sansmodels/src/libigor/libStructureFactor.h
===================================================================
--- sansmodels/src/libigor/libStructureFactor.h	(revision 67424cdc019bde2f4cbc089828ff660e6f914c2c)
+++ sansmodels/src/libigor/libStructureFactor.h	(revision 940aca737db034347a7b2bcbe30f143b76e47cbc)
@@ -10,5 +10,5 @@
 
 //function prototypes
-double sqhcal(double qq);
-int sqfun(int ix, int ir);
-int sqcoef(int ir);
+double sqhcal(double qq, double gMSAWave[]);
+int sqfun(int ix, int ir, double gMSAWave[]);
+int sqcoef(int ir, double gMSAWave[]);
Index: sansmodels/src/sans/models/media/model_functions.html
===================================================================
--- sansmodels/src/sans/models/media/model_functions.html	(revision 57eab9e4ce7fe9bfee2313128cf615bbf6b42c81)
+++ sansmodels/src/sans/models/media/model_functions.html	(revision 940aca737db034347a7b2bcbe30f143b76e47cbc)
@@ -5749,11 +5749,8 @@
 <p class="MsoNormal">The contrast is defined as SLD(core)
  SLD(shell) or
-SLD(shell  solvent). In the parameters, equat_core = equatorial radius
-of the
-core, polar_core = polar radius of the core, equat_shell = r<sub>min</sub>
-(or
-equatorial radius of the shell), and polar_shell = = r<sub>maj</sub>
-(or polar radius
-of the shell).</p>
+SLD(shell  solvent). In the parameters, equat_core = equatorial core radius, 
+polar_core = polar core radius, equat_shell = r<sub>min</sub>
+(or equatorial outer radius), and polar_shell = = r<sub>maj</sub>
+(or polar outer radius).</p>
 <p class="MsoNormal">&nbsp;</p>
 <p class="MsoNormal">For P*S: The 2<sup>nd</sup>
Index: sansview/README.txt
===================================================================
--- sansview/README.txt	(revision fa009445c85b6481f03e4988ffb5eb97ad8e0f38)
+++ sansview/README.txt	(revision 940aca737db034347a7b2bcbe30f143b76e47cbc)
@@ -94,18 +94,30 @@
 			- run 'python sansview.py' under the 'sansview' folder.
 		- The following modules are required:
-			* matplotlib >= 0.99.0(WIN), 0.99.1.1(MAC)
-			* numpy >= 1.4.1
-			* scipy >= 0.7.2
-			* wxpython 2.8.11 unicode(WIN), 2.8.12.0(MAC) < 2.9.xx
-			* lxml >= 2.2.2
-			* multiprocessing-2.6.2(X)
-			* comtypes (for PDF window)(WIN)
-			* pywin32 (to read ms office)(WIN)
-			* PIL (Python Image Library)
-			* Pyparsing (apply for periodictable and bundling)
-			* periodictable = 1.3.0 (using 'easy_install periodictable')
-			* pisa (html to pdf : MAC)
-			* MinGW/Cygwin (for Windows) or other GNU compiler (gcc)
-			* Optional: setuptools, svn, Innosetup, py2exe(WIN),and/or py2app(MAC) to build App from the source.
+			- wxPython 2.8.12.1
+			- matplotlib 1.1.0 
+			- SciPy 0.10.1
+			- py2app (MAC)
+
+			(The following three are easily installed using easy_install)
+			- lxml 2.3.0
+			- numpy 1.6.1
+			- periodictable 1.3.0
+
+			(The following are additional dependencies for Windows)
+			- comtypes 0.6.2
+			- pywin32 build 217
+			- pisa 3.0.27 (NOT 3.0.33)
+			- html5lib 0.95
+			- reportlab 2.5
+			- pyparsing 1.5.5
+			- PIL 1.1.7
+			- setuptools 0.6c11
+			- py2exe 0.6.9 (WIN)
+			- svn
+			- MinGW w/ gcc version 4.6.1 (WIN)
+			- Innosetup (WIN).
+
+			(On Windows, the following site has all the dependencies nicely packaged)
+			http://www.lfd.uci.edu/~gohlke/pythonlibs/
 
 
