Index: src/sas/sascalc/data_util/qsmearing.py
===================================================================
--- src/sas/sascalc/data_util/qsmearing.py	(revision f8aa738fc96212318518aaa88e9bdeaac7010fbb)
+++ src/sas/sascalc/data_util/qsmearing.py	(revision c6728e196359ad8b7bc04cd8e4c5df3ca22ea55f)
@@ -5,5 +5,5 @@
 #This software was developed by the University of Tennessee as part of the
 #Distributed Data Analysis of Neutron Scattering Experiments (DANSE)
-#project funded by the US National Science Foundation. 
+#project funded by the US National Science Foundation.
 #See the license text in license.txt
 #copyright 2008, University of Tennessee
@@ -13,7 +13,13 @@
 import logging
 import sys
+from sasmodels import sesans
+import numpy as np  # type: ignore
+from numpy import pi, exp  # type: ignore
 
 from sasmodels.resolution import Slit1D, Pinhole1D
+from sasmodels.sesans import SESANS1D
 from sasmodels.resolution2d import Pinhole2D
+from src.sas.sascalc.data_util.nxsunit import Converter
+
 
 def smear_selection(data, model = None):
@@ -36,4 +42,6 @@
     # Sanity check. If we are not dealing with a SAS Data1D
     # object, just return None
+
+    # This checks for 2D data (does not throw exception because fail is common)
     if  data.__class__.__name__ not in ['Data1D', 'Theory1D']:
         if data == None:
@@ -42,5 +50,5 @@
             return None
         return Pinhole2D(data)
-
+    # This checks for 1D data with smearing info in the data itself (again, fail is likely; no exceptions)
     if  not hasattr(data, "dx") and not hasattr(data, "dxl")\
          and not hasattr(data, "dxw"):
@@ -48,4 +56,26 @@
 
     # Look for resolution smearing data
+    # This is the code that checks for SESANS data; it looks for the file loader
+    # TODO: change other sanity checks to check for file loader instead of data structure?
+    _found_sesans = False
+    #if data.dx is not None and data.meta_data['loader']=='SESANS':
+    if data.dx is not None and data.isSesans:
+        #if data.dx[0] > 0.0:
+        if numpy.size(data.dx[data.dx <= 0]) == 0:
+            _found_sesans = True
+        #if data.dx[0] <= 0.0:
+        if numpy.size(data.dx[data.dx <= 0]) > 0:
+            raise ValueError('one or more of your dx values are negative, please check the data file!')
+    if _found_sesans == True:
+        #Pre-compute the Hankel matrix (H)
+        qmax, qunits = data.sample.zacceptance
+        hankel=sesans.SesansTransform()
+        sesans.SesansTransform.set_transform(hankel,
+        SE = Converter(data._xunit)(data.x, "A"),
+        zaccept = Converter(qunits)(qmax, "1/A"),
+        Rmax = 10000000)
+        # Then return the actual transform, as if it were a smearing function
+        return PySmear(SESANS1D(data, hankel._H0, hankel._H, hankel.q), model)
+
     _found_resolution = False
     if data.dx is not None and len(data.dx) == len(data.x):
@@ -92,5 +122,14 @@
         self.model = model
         self.resolution = resolution
-        self.offset = numpy.searchsorted(self.resolution.q_calc, self.resolution.q[0])
+        if hasattr(self.resolution, 'data'):
+            if self.resolution.data.meta_data['loader'] == 'SESANS': # Always True if file extension is '.ses'!
+                self.offset = 0
+            # This is default behaviour, for future resolution/transform functions this needs to be revisited.
+            else:
+                self.offset = numpy.searchsorted(self.resolution.q_calc, self.resolution.q[0])
+        else:
+            self.offset = numpy.searchsorted(self.resolution.q_calc, self.resolution.q[0])
+
+        #self.offset = numpy.searchsorted(self.resolution.q_calc, self.resolution.q[0])
 
     def apply(self, iq_in, first_bin=0, last_bin=None):
@@ -126,4 +165,5 @@
         q[first:last+1].
         """
+
         q = self.resolution.q
         first = numpy.searchsorted(q, q_min)
Index: src/sas/sascalc/dataloader/data_info.py
===================================================================
--- src/sas/sascalc/dataloader/data_info.py	(revision 1b1a1c1f5fa5d17a2e503d0e1803259f57dc943a)
+++ src/sas/sascalc/dataloader/data_info.py	(revision 1fac6c09c8ab1f0c228d078ee755bc91242e2fdc)
@@ -25,58 +25,4 @@
 import numpy
 import math
-
-class plottable_sesans1D(object):
-    """
-    SESANS is a place holder for 1D SESANS plottables.
-
-    #TODO: This was directly copied from the plottables_1D. Modified Somewhat.
-    #Class has been updated.
-    """
-    # The presence of these should be mutually
-    # exclusive with the presence of Qdev (dx)
-    x = None
-    y = None
-    lam = None
-    dx = None
-    dy = None
-    dlam = None
-    ## Slit smearing length
-    dxl = None
-    ## Slit smearing width
-    dxw = None
-
-    # Units
-    _xaxis = ''
-    _xunit = ''
-    _yaxis = ''
-    _yunit = ''
-
-    def __init__(self, x, y, lam, dx=None, dy=None, dlam=None):
-#        print "SESANS plottable working"
-        self.x = numpy.asarray(x)
-        self.y = numpy.asarray(y)
-        self.lam = numpy.asarray(lam)
-        if dx is not None:
-            self.dx = numpy.asarray(dx)
-        if dy is not None:
-            self.dy = numpy.asarray(dy)
-        if dlam is not None:
-            self.dlam = numpy.asarray(dlam)
-
-    def xaxis(self, label, unit):
-        """
-        set the x axis label and unit
-        """
-        self._xaxis = label
-        self._xunit = unit
-
-    def yaxis(self, label, unit):
-        """
-        set the y axis label and unit
-        """
-        self._yaxis = label
-        self._yunit = unit
-
-
 class plottable_1D(object):
     """
@@ -94,4 +40,9 @@
     dxw = None
 
+    ## SESANS specific params (wavelengths for spin echo length calculation)
+
+    lam = None
+    dlam = None
+
     # Units
     _xaxis = ''
@@ -100,5 +51,5 @@
     _yunit = ''
 
-    def __init__(self, x, y, dx=None, dy=None, dxl=None, dxw=None):
+    def __init__(self, x, y, dx=None, dy=None, dxl=None, dxw=None, lam=None, dlam=None):
         self.x = numpy.asarray(x)
         self.y = numpy.asarray(y)
@@ -111,4 +62,8 @@
         if dxw is not None:
             self.dxw = numpy.asarray(dxw)
+        if lam is not None:
+            self.lam = numpy.asarray(lam)
+        if dlam is not None:
+            self.dlam = numpy.asarray(dlam)
 
     def xaxis(self, label, unit):
@@ -736,14 +691,29 @@
         return self._perform_union(other)
 
-class SESANSData1D(plottable_sesans1D, DataInfo):
-    """
-    SESANS 1D data class
-    """
-    x_unit = 'nm'
-    y_unit = 'pol'
-
-    def __init__(self, x=None, y=None, lam=None, dx=None, dy=None, dlam=None):
+class Data1D(plottable_1D, DataInfo):
+    """
+    1D data class
+    """
+    #if plottable_1D.lam is None: # This means it's SANS data!
+     #   x_unit = '1/A'
+      #  y_unit = '1/cm'
+    #elif plottable_1D.lam is not None: # This means it's SESANS data!
+     #   x_unit = 'A'
+      #  y_unit = 'pol'
+    #else: # and if it's neither, you get punished!
+     #   raise(TypeError,'This is neither SANS nor SESANS data, what the hell are you doing??')
+
+    def __init__(self, x=None, y=None, dx=None, dy=None, lam=None, dlam=None, isSesans=False):
+        self.isSesans = isSesans
         DataInfo.__init__(self)
-        plottable_sesans1D.__init__(self, x, y, lam, dx, dy, dlam)
+        plottable_1D.__init__(self, x, y, dx, dy,None, None, lam, dlam)
+        if self.isSesans:
+            x_unit = 'A'
+            y_unit = 'pol'
+        elif not self.isSesans: # it's SANS data! (Could also be simple else statement, but i prefer exhaustive conditionals...-JHB)
+            x_unit = '1/A'
+            y_unit = '1/cm'
+        else: # and if it's neither, you get punished!
+            raise(TypeError,'This is neither SANS nor SESANS data, what the hell are you doing??')
 
     def __str__(self):
@@ -759,60 +729,4 @@
         return _str
 
-    def clone_without_data(self, length=0, clone=None):
-        """
-        Clone the current object, without copying the data (which
-        will be filled out by a subsequent operation).
-        The data arrays will be initialized to zero.
-
-        :param length: length of the data array to be initialized
-        :param clone: if provided, the data will be copied to clone
-        """
-        from copy import deepcopy
-        if clone is None or not issubclass(clone.__class__, Data1D):
-            x = numpy.zeros(length)
-            dx = numpy.zeros(length)
-            y = numpy.zeros(length)
-            dy = numpy.zeros(length)
-            clone = Data1D(x, y, dx=dx, dy=dy)
-
-        clone.title = self.title
-        clone.run = self.run
-        clone.filename = self.filename
-        clone.instrument = self.instrument
-        clone.notes = deepcopy(self.notes)
-        clone.process = deepcopy(self.process)
-        clone.detector = deepcopy(self.detector)
-        clone.sample = deepcopy(self.sample)
-        clone.source = deepcopy(self.source)
-        clone.collimation = deepcopy(self.collimation)
-        clone.trans_spectrum = deepcopy(self.trans_spectrum)
-        clone.meta_data = deepcopy(self.meta_data)
-        clone.errors = deepcopy(self.errors)
-
-        return clone
-
-class Data1D(plottable_1D, DataInfo):
-    """
-    1D data class
-    """
-    x_unit = '1/A'
-    y_unit = '1/cm'
-
-    def __init__(self, x, y, dx=None, dy=None):
-        DataInfo.__init__(self)
-        plottable_1D.__init__(self, x, y, dx, dy)
-
-    def __str__(self):
-        """
-        Nice printout
-        """
-        _str = "%s\n" % DataInfo.__str__(self)
-        _str += "Data:\n"
-        _str += "   Type:         %s\n" % self.__class__.__name__
-        _str += "   X-axis:       %s\t[%s]\n" % (self._xaxis, self._xunit)
-        _str += "   Y-axis:       %s\t[%s]\n" % (self._yaxis, self._yunit)
-        _str += "   Length:       %g\n" % len(self.x)
-        return _str
-
     def is_slit_smeared(self):
         """
@@ -843,5 +757,7 @@
             y = numpy.zeros(length)
             dy = numpy.zeros(length)
-            clone = Data1D(x, y, dx=dx, dy=dy)
+            lam = numpy.zeros(length)
+            dlam = numpy.zeros(length)
+            clone = Data1D(x, y, lam=lam, dx=dx, dy=dy, dlam=dlam )
 
         clone.title = self.title
Index: src/sas/sascalc/dataloader/readers/sesans_reader.py
===================================================================
--- src/sas/sascalc/dataloader/readers/sesans_reader.py	(revision 1c0e3b00657233c26bdd975c429cd05561a5c4b8)
+++ src/sas/sascalc/dataloader/readers/sesans_reader.py	(revision a01af350a84a187cc8dad7f8e72ebcf348a35f96)
@@ -8,5 +8,5 @@
 import numpy
 import os
-from sas.sascalc.dataloader.data_info import SESANSData1D
+from sas.sascalc.dataloader.data_info import Data1D
 
 # Check whether we have a converter available
@@ -59,14 +59,5 @@
                     raise  RuntimeError, "sesans_reader: cannot open %s" % path
                 buff = input_f.read()
-#                print buff
                 lines = buff.splitlines()
-#                print lines
-                #Jae could not find python universal line spliter:
-                #keep the below for now
-                # some ascii data has \r line separator,
-                # try it when the data is on only one long line
-#                if len(lines) < 2 :
-#                    lines = buff.split('\r')
-                 
                 x  = numpy.zeros(0)
                 y  = numpy.zeros(0)
@@ -83,24 +74,7 @@
                 tdlam = numpy.zeros(0)
                 tdx = numpy.zeros(0)
-#                print "all good"
-                output = SESANSData1D(x=x, y=y, lam=lam, dy=dy, dx=dx, dlam=dlam)
-#                print output                
+                output = Data1D(x=x, y=y, lam=lam, dy=dy, dx=dx, dlam=dlam, isSesans=True )
                 self.filename = output.filename = basename
 
-#                #Initialize counters for data lines and header lines.
-#                is_data = False  # Has more than 5 lines
-#                # More than "5" lines of data is considered as actual
-#                # data unless that is the only data
-#                mum_data_lines = 5
-#                # To count # of current data candidate lines
-#                i = -1
-#                # To count total # of previous data candidate lines
-#                i1 = -1
-#                # To count # of header lines
-#                j = -1
-#                # Helps to count # of header lines
-#                j1 = -1
-#                #minimum required number of columns of data; ( <= 4).
-#                lentoks = 2
                 paramnames=[]
                 paramvals=[]
@@ -111,6 +85,4 @@
                 Pvals=[]
                 dPvals=[]
-#                print x
-#                print zvals
                 for line in lines:
                     # Initial try for CSV (split on ,)
@@ -122,9 +94,9 @@
                     if len(toks)>5:
                         zvals.append(toks[0])
-                        dzvals.append(toks[1])
-                        lamvals.append(toks[2])
-                        dlamvals.append(toks[3])
-                        Pvals.append(toks[4])
-                        dPvals.append(toks[5])
+                        dzvals.append(toks[3])
+                        lamvals.append(toks[4])
+                        dlamvals.append(toks[5])
+                        Pvals.append(toks[1])
+                        dPvals.append(toks[2])
                     else:
                         continue
@@ -140,6 +112,8 @@
                 default_z_unit = "A"
                 data_conv_P = None
-                default_p_unit = " "
+                default_p_unit = " " # Adjust unit for axis (L^-3)
                 lam_unit = lam_header[1].replace("[","").replace("]","")
+                if lam_unit == 'AA':
+                    lam_unit = 'A'
                 varheader=[zvals[0],dzvals[0],lamvals[0],dlamvals[0],Pvals[0],dPvals[0]]
                 valrange=range(1, len(zvals))
@@ -161,4 +135,5 @@
                 output.x, output.x_unit = self._unit_conversion(x, lam_unit, default_z_unit)
                 output.y = y
+                output.y_unit = '\AA^{-2} cm^{-1}' # output y_unit erbij
                 output.dx, output.dx_unit = self._unit_conversion(dx, lam_unit, default_z_unit)
                 output.dy = dy
@@ -166,14 +141,14 @@
                 output.dlam, output.dlam_unit = self._unit_conversion(dlam, lam_unit, default_z_unit)
 
-                output.xaxis("\rm{z}", output.x_unit)
-                output.yaxis("\\rm{P/P0}", output.y_unit)
+                output.xaxis("\\rm{z}", output.x_unit)
+                output.yaxis("\\rm{ln(P)/(t \lambda^2)}", output.y_unit) # Adjust label to ln P/(lam^2 t), remove lam column refs
                 # Store loading process information
                 output.meta_data['loader'] = self.type_name
-                output.sample.thickness = float(paramvals[6])
+                #output.sample.thickness = float(paramvals[6])
                 output.sample.name = paramvals[1]
                 output.sample.ID = paramvals[0]
                 zaccept_unit_split = paramnames[7].split("[")
                 zaccept_unit = zaccept_unit_split[1].replace("]","")
-                if zaccept_unit.strip() == '\AA^-1':
+                if zaccept_unit.strip() == '\AA^-1' or zaccept_unit.strip() == '\A^-1':
                     zaccept_unit = "1/A"
                 output.sample.zacceptance=(float(paramvals[7]),zaccept_unit)
Index: src/sas/sascalc/fit/AbstractFitEngine.py
===================================================================
--- src/sas/sascalc/fit/AbstractFitEngine.py	(revision fc18690cd84cc4dd6e33a9d344f47b08cef71290)
+++ src/sas/sascalc/fit/AbstractFitEngine.py	(revision 79885018e2047aef9517748c8de7eccc28d1305e)
@@ -131,5 +131,5 @@
         a way to get residuals from data.
     """
-    def __init__(self, x, y, dx=None, dy=None, smearer=None, data=None):
+    def __init__(self, x, y, dx=None, dy=None, smearer=None, data=None, lam=None, dlam=None):
         """
             :param smearer: is an object of class QSmearer or SlitSmearer
@@ -152,5 +152,5 @@
                 
         """
-        Data1D.__init__(self, x=x, y=y, dx=dx, dy=dy)
+        Data1D.__init__(self, x=x, y=y, dx=dx, dy=dy, lam=lam,dlam=dlam)
         self.num_points = len(x)
         self.sas_data = data
Index: src/sas/sascalc/fit/BumpsFitting.py
===================================================================
--- src/sas/sascalc/fit/BumpsFitting.py	(revision 1a5d5f2d6cd4b4999b40c7fbc72a7a295fa78d9d)
+++ src/sas/sascalc/fit/BumpsFitting.py	(revision 1a5d5f2d6cd4b4999b40c7fbc72a7a295fa78d9d)
@@ -27,5 +27,4 @@
 from bumps import parameter
 from bumps.fitproblem import FitProblem
-
 
 from sas.sascalc.fit.AbstractFitEngine import FitEngine
Index: src/sas/sasgui/guiframe/dataFitting.py
===================================================================
--- src/sas/sasgui/guiframe/dataFitting.py	(revision 9b6d62d61651fd47f2c1045d4d7ac93baea0c533)
+++ src/sas/sasgui/guiframe/dataFitting.py	(revision 1fac6c09c8ab1f0c228d078ee755bc91242e2fdc)
@@ -17,5 +17,5 @@
     """
     """
-    def __init__(self, x=None, y=None, dx=None, dy=None):
+    def __init__(self, x=None, y=None, dx=None, dy=None, lam=None, dlam=None, isSesans=False):
         """
         """
@@ -24,6 +24,7 @@
         if y is None:
             y = []
-        PlotData1D.__init__(self, x, y, dx, dy)
-        LoadData1D.__init__(self, x, y, dx, dy)
+        self.isSesans = isSesans
+        PlotData1D.__init__(self, x, y, dx, dy, lam, dlam)
+        LoadData1D.__init__(self, x, y, dx, dy, lam, dlam, isSesans)
         self.id = None
         self.list_group_id = []
@@ -68,5 +69,5 @@
         # First, check the data compatibility
         dy, dy_other = self._validity_check(other)
-        result = Data1D(x=[], y=[], dx=None, dy=None)
+        result = Data1D(x=[], y=[], lam=[], dx=None, dy=None, dlam=None)
         result.clone_without_data(length=len(self.x), clone=self)
         result.copy_from_datainfo(data1d=self)
@@ -115,7 +116,11 @@
         # First, check the data compatibility
         self._validity_check_union(other)
-        result = Data1D(x=[], y=[], dx=None, dy=None)
+        result = Data1D(x=[], y=[], lam=[], dx=None, dy=None, dlam=None)
         tot_length = len(self.x) + len(other.x)
         result = self.clone_without_data(length=tot_length, clone=result)
+        if self.dlam == None or other.dlam is None:
+            result.dlam = None
+        else:
+            result.dlam = numpy.zeros(tot_length)
         if self.dy == None or other.dy is None:
             result.dy = None
@@ -141,4 +146,9 @@
         result.y = numpy.append(self.y, other.y)
         result.y = result.y[ind]
+        result.lam = numpy.append(self.lam, other.lam)
+        result.lam = result.lam[ind]
+        if result.dlam != None:
+            result.dlam = numpy.append(self.dlam, other.dlam)
+            result.dlam = result.dlam[ind]
         if result.dy != None:
             result.dy = numpy.append(self.dy, other.dy)
@@ -260,7 +270,11 @@
         # First, check the data compatibility
         self._validity_check_union(other)
-        result = Data1D(x=[], y=[], dx=None, dy=None)
+        result = Data1D(x=[], y=[], lam=[], dx=None, dy=None, dlam=[])
         tot_length = len(self.x)+len(other.x)
         result.clone_without_data(length=tot_length, clone=self)
+        if self.dlam == None or other.dlam is None:
+            result.dlam = None
+        else:
+            result.dlam = numpy.zeros(tot_length)
         if self.dy == None or other.dy is None:
             result.dy = None
@@ -285,4 +299,6 @@
         result.y = numpy.append(self.y, other.y)
         result.y = result.y[ind]
+        result.lam = numpy.append(self.lam, other.lam)
+        result.lam = result.lam[ind]
         if result.dy != None:
             result.dy = numpy.append(self.dy, other.dy)
Index: src/sas/sasgui/guiframe/data_manager.py
===================================================================
--- src/sas/sasgui/guiframe/data_manager.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
+++ src/sas/sasgui/guiframe/data_manager.py	(revision 1fac6c09c8ab1f0c228d078ee755bc91242e2fdc)
@@ -62,6 +62,8 @@
         if issubclass(Data2D, data.__class__):
             new_plot = Data2D(image=None, err_image=None) 
-        else: 
-            new_plot = Data1D(x=[], y=[], dx=None, dy=None)
+        elif data.meta_data['loader'] == 'SESANS':
+            new_plot = Data1D(x=[], y=[], dx=None, dy=None, lam=None, dlam=None, isSesans=True)
+        else:
+            new_plot = Data1D(x=[], y=[], dx=None, dy=None, lam=None, dlam=None) #SESANS check???
            
         new_plot.copy_from_datainfo(data)
Index: src/sas/sasgui/perspectives/fitting/basepage.py
===================================================================
--- src/sas/sasgui/perspectives/fitting/basepage.py	(revision c8e19964f2dda929ccae8237e7b140a906cdf134)
+++ src/sas/sasgui/perspectives/fitting/basepage.py	(revision 55db50176845da6589edc694cd3c2436715e9c73)
@@ -143,4 +143,5 @@
         self.theory_qmin_x = None
         self.theory_qmax_x = None
+        self.cb1 = None
         self.btEditMask = None
         self.btFit = None
@@ -281,6 +282,8 @@
                            num=self.npts_x, endpoint=True)
         self.data = Data1D(x=x)
-        self.data.xaxis('\\rm{Q}', "A^{-1}")
-        self.data.yaxis('\\rm{Intensity}', "cm^{-1}")
+        #self.data.xaxis('\\rm{Q}', "A^{-1}")
+        self.data.xaxis('\\rm{X}', "")
+        #self.data.yaxis('\\rm{Intensity}', "cm^{-1}")
+        self.data.yaxis('\\rm{Y}', "")
         self.data.is_data = False
         self.data.id = str(self.uid) + " data"
@@ -307,6 +310,8 @@
                            num=self.npts_x, endpoint=True, base=10.0)
         self.data = Data1D(x=x)
-        self.data.xaxis('\\rm{Q}', "A^{-1}")
-        self.data.yaxis('\\rm{Intensity}', "cm^{-1}")
+        #self.data.xaxis('\\rm{Q}', "A^{-1}")
+        #self.data.yaxis('\\rm{Intensity}', "cm^{-1}")
+        self.data.xaxis('\\rm{X}', "")
+        self.data.yaxis('\\rm{Y}', "")
         self.data.is_data = False
         self.data.id = str(self.uid) + " data"
@@ -1124,4 +1129,7 @@
         # set data, etc. from the state
         # reset page between theory and fitting from bookmarking
+        #if state.data == None:
+        #    data = None
+        #else:
         data = state.data
 
@@ -1340,4 +1348,8 @@
                         except Exception:
                             logging.error(traceback.format_exc())
+
+        # Make sure the check box updated when all checked
+        if self.cb1.GetValue():
+            self.select_all_param(None)
 
     def _selectDlg(self):
@@ -2481,6 +2493,8 @@
                         item[2].Enable()
 
-            # Make sure the check box updated
-            self.get_all_checked_params()
+            # Make sure the check box updated when all checked
+            if self.cb1.GetValue():
+                #self.select_all_param(None)
+                self.get_all_checked_params()
 
             # update params
@@ -3661,4 +3675,8 @@
         call back for model selection if implemented
         """
+    def select_all_param(self, event):
+        """
+        set to true or false all checkBox if implemented
+        """
     def get_weight_flag(self):
         """
Index: src/sas/sasgui/perspectives/fitting/fitpage.py
===================================================================
--- src/sas/sasgui/perspectives/fitting/fitpage.py	(revision c8e19964f2dda929ccae8237e7b140a906cdf134)
+++ src/sas/sasgui/perspectives/fitting/fitpage.py	(revision 55db50176845da6589edc694cd3c2436715e9c73)
@@ -168,4 +168,5 @@
             self.set_data(data)
         elif self.dataSource.GetCount() > 0:
+
             pos = self.dataSource.GetSelection()
             data = self.dataSource.GetClientData(pos)
@@ -617,5 +618,5 @@
         # fill a sizer with the combobox to select dispersion type
         model_disp = wx.StaticText(self, wx.ID_ANY, 'Function')
-        CHECK_STATE = False
+        CHECK_STATE = self.cb1.GetValue()
 
         ix = 0
@@ -961,4 +962,5 @@
 
         self.state.model = self.model.clone()
+
         # save state into
         self._copy_parameters_state(self.parameters, self.state.parameters)
@@ -971,4 +973,5 @@
         wx.PostEvent(self.parent,
                      StatusEvent(status=" Selected Distribution: Gaussian"))
+
         # Fill the list of fittable parameters
         self.get_all_checked_params()
@@ -2682,4 +2685,5 @@
         self._manager.set_param2fit(self.uid, param2fit)
 
+
     def select_param(self, event=None):
         """
@@ -2728,4 +2732,10 @@
         if len(self.fittable_param) > 0:
             len_orient_para *= 2
+        #Set the value of checkbox that selected every checkbox or not
+        if len(self.parameters) + len(self.fittable_param) - len_orient_para \
+            == len(self.param_toFit):
+            self.cb1.SetValue(True)
+        else:
+            self.cb1.SetValue(False)
 
         self.save_current_state_fit()
@@ -2829,6 +2839,12 @@
         iy = 0
         ix = 0
-        sizer.Add(wx.StaticText(self, wx.ID_ANY, 'Parameter'),
-                  (iy, ix), (1, 1), wx.EXPAND | wx.ADJUST_MINSIZE, 0)
+        select_text = "Select All"
+        self.cb1 = wx.CheckBox(self, wx.ID_ANY, str(select_text), (10, 10))
+        wx.EVT_CHECKBOX(self, self.cb1.GetId(), self.select_all_param)
+        self.cb1.SetToolTipString("To check/uncheck all the boxes below.")
+        self.cb1.SetValue(True)
+
+        sizer.Add(self.cb1, (iy, ix), (1, 1), \
+                             wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 5)
         ix += 1
         self.text2_2 = wx.StaticText(self, wx.ID_ANY, 'Value')
@@ -2857,5 +2873,5 @@
         self.text2_4.Hide()
 
-        CHECK_STATE = False
+        CHECK_STATE = self.cb1.GetValue()
         for item in keys:
 
Index: src/sas/sasgui/plottools/plottables.py
===================================================================
--- src/sas/sasgui/plottools/plottables.py	(revision 80f46846f5b08d9cfb2ff0e58faab64f8106db49)
+++ src/sas/sasgui/plottools/plottables.py	(revision 80f46846f5b08d9cfb2ff0e58faab64f8106db49)
@@ -1023,5 +1023,5 @@
     """
 
-    def __init__(self, x, y, dx=None, dy=None):
+    def __init__(self, x, y, dx=None, dy=None, lam=None, dlam=None):
         """
         Draw points specified by x[i],y[i] in the current color/symbol.
@@ -1037,6 +1037,8 @@
         self.x = x
         self.y = y
+        self.lam = lam
         self.dx = dx
         self.dy = dy
+        self.dlam = dlam
         self.source = None
         self.detector = None
