Index: sasview/test/sesans_data/sphere2micron.ses
===================================================================
--- sasview/test/sesans_data/sphere2micron.ses	(revision 2a2b43a784d2e1dc3f9304934bcb138df3aad058)
+++ sasview/test/sesans_data/sphere2micron.ses	(revision 2a2b43a784d2e1dc3f9304934bcb138df3aad058)
@@ -0,0 +1,51 @@
+DataFileTitle 	"Polystyrene of Markus Strobl,  Full Sine, ++ only "						
+Sample 	"Polystyrene 2 um in 53% H2O, 47% D2O "						
+Settings 	"D1=D2=20x8 mm,Ds = 16x10 mm (WxH), GF1 =scanning, GF2 = 2.5 A. 2 um polystyrene in 53% H2O, 47% D2O; 8.55% contrast "						
+Operator 	CPD 						
+Date 	do 10 jul 2014 16:37:30 						
+ScanType 	sine one element scan 						
+Thickness [cm] 	2.00E-01						
+Q_zmax [\A^-1] 	0.05						
+Q_ymax [\A^-1] 	0.05						
+  							
+spin echo length [A] 	 Depolarisation [A-2 cm-1] 	 error depol [A-2 cm-1] 	 error SEL [A] 	 wavelength [A] 	 error wavelength [A] 	 polarisation 	 error pol 
+391.56	0.0041929	0.0036894	19.578	2.11	0.1055	1.0037	0.0032974
+1564	-0.0046571	0.0038185	78.2	2.11	0.1055	0.99586	0.003386
+2735.6	-0.017007	0.0038132	136.78	2.11	0.1055	0.98497	0.0033444
+3907.9	-0.033462	0.0035068	195.39	2.11	0.1055	0.97064	0.0030309
+5080.2	-0.047483	0.0038208	254.01	2.11	0.1055	0.9586	0.0032613
+6251.8	-0.070375	0.00376	312.59	2.11	0.1055	0.93926	0.0031446
+7423.2	-0.092217	0.0037927	371.16	2.11	0.1055	0.92117	0.0031108
+8595.5	-0.10238	0.004006	429.77	2.11	0.1055	0.91287	0.0032562
+9767.7	-0.12672	0.0038534	488.39	2.11	0.1055	0.8933	0.0030651
+10940	-0.1374	0.004243	546.98	2.11	0.1055	0.88484	0.003343
+12112	-0.16072	0.0045837	605.58	2.11	0.1055	0.86666	0.0035372
+13284	-0.16623	0.0045613	664.2	2.11	0.1055	0.86242	0.0035027
+14456	-0.18468	0.0044918	722.79	2.11	0.1055	0.84837	0.0033931
+15628	-0.19143	0.0048967	781.38	2.11	0.1055	0.84328	0.0036768
+16800	-0.20029	0.0045421	840.02	2.11	0.1055	0.83666	0.0033837
+17971	-0.19798	0.0046642	898.56	2.11	0.1055	0.83838	0.0034819
+19143	-0.21442	0.0047052	957.17	2.11	0.1055	0.82619	0.0034614
+20316	-0.20885	0.0044931	1015.8	2.11	0.1055	0.8303	0.0033218
+21488	-0.21393	0.0049186	1074.4	2.11	0.1055	0.82655	0.00362
+22660	-0.20685	0.004423	1133	2.11	0.1055	0.83179	0.0032758
+23832	-0.20802	0.0046979	1191.6	2.11	0.1055	0.83092	0.0034758
+25003	-0.19848	0.0045953	1250.2	2.11	0.1055	0.838	0.0034289
+26175	-0.21117	0.0044567	1308.8	2.11	0.1055	0.82859	0.0032881
+27347	-0.21283	0.004137	1367.4	2.11	0.1055	0.82736	0.0030477
+28520	-0.2042	0.0044587	1426	2.11	0.1055	0.83375	0.0033101
+29692	-0.2112	0.0042852	1484.6	2.11	0.1055	0.82857	0.0031615
+30864	-0.20319	0.0043483	1543.2	2.11	0.1055	0.8345	0.003231
+32036	-0.20752	0.0044297	1601.8	2.11	0.1055	0.83129	0.0032788
+33207	-0.20654	0.0043188	1660.4	2.11	0.1055	0.83201	0.0031995
+34380	-0.20126	0.0046375	1719	2.11	0.1055	0.83593	0.0034518
+35551	-0.20924	0.0042871	1777.6	2.11	0.1055	0.83001	0.0031684
+36724	-0.21323	0.0045471	1836.2	2.11	0.1055	0.82707	0.0033487
+37895	-0.21324	0.0045354	1894.7	2.11	0.1055	0.82706	0.00334
+39067	-0.19905	0.0044141	1953.4	2.11	0.1055	0.83758	0.003292
+40239	-0.1991	0.0047441	2012	2.11	0.1055	0.83754	0.003538
+41411	-0.20359	0.0050136	2070.5	2.11	0.1055	0.8342	0.003724
+42583	-0.21032	0.0049474	2129.1	2.11	0.1055	0.82922	0.0036529
+43755	-0.20689	0.0048203	2187.8	2.11	0.1055	0.83176	0.00357
+44927	-0.21075	0.0052337	2246.4	2.11	0.1055	0.8289	0.0038628
+46099	-0.19956	0.0047827	2304.9	2.11	0.1055	0.8372	0.0035653
Index: sview/test/sesans_data/spheres2micron.ses
===================================================================
--- sasview/test/sesans_data/spheres2micron.ses	(revision 850a498341c296f7bc4d6699c6a3f68926e38332)
+++ 	(revision )
@@ -1,131 +1,0 @@
-DataFileTitle 	Polystyrene of Markus Strobl,  Full Sine, ++ only 
-Sample 	Polystyrene 2 um in 53% H2O, 47% D2O 
-Settings 	D1=D2=20x8 mm,Ds = 16x10 mm (WxH), GF1 =scanning, GF2 = 2.5 A. 2 um polystyrene in 53% H2O, 47% D2O; 8.55% contrast 
-Operator 	CPD 
-Date 	ma 7 jul 2014 18:54:43 
-ScanType 	sine one element scan 
-Thickness [mm] 	2 
-Q_zmax [\AA^-1] 	0.05 
-Q_ymax [\AA^-1] 	0.05 
-  
-spin echo length [nm] 	 error SEL 	 wavelength [nm] 	 error wavelength 	 polarisation 	 error pol 
-49.778	2.4889	0.211	0.01055	0.99782	0.0044367
-63.041	3.152	0.211	0.01055	1.0026	0.0047862
-76.487	3.8244	0.211	0.01055	0.99601	0.0060598
-89.847	4.4924	0.211	0.01055	0.99175	0.0058257
-103.41	5.1705	0.211	0.01055	0.99543	0.0060966
-116.95	5.8475	0.211	0.01055	0.99512	0.0048106
-130.61	6.5303	0.211	0.01055	0.9975	0.0062594
-144.37	7.2184	0.211	0.01055	0.99473	0.005293
-158.2	7.9102	0.211	0.01055	0.9927	0.0053389
-172.12	8.6062	0.211	0.01055	0.99453	0.0064548
-186.17	9.3087	0.211	0.01055	0.98641	0.0073259
-200.28	10.014	0.211	0.01055	0.98879	0.0078682
-214.46	10.723	0.211	0.01055	0.9895	0.0068058
-228.73	11.436	0.211	0.01055	0.99204	0.0082509
-243.12	12.156	0.211	0.01055	0.99406	0.0051381
-257.55	12.878	0.211	0.01055	0.97965	0.0055447
-272.22	13.611	0.211	0.01055	0.97982	0.0065843
-286.9	14.345	0.211	0.01055	0.97793	0.0071814
-301.73	15.087	0.211	0.01055	0.97835	0.0066197
-316.75	15.838	0.211	0.01055	0.98125	0.0069484
-331.82	16.591	0.211	0.01055	0.97828	0.0068737
-347.16	17.358	0.211	0.01055	0.97682	0.006744
-362.45	18.122	0.211	0.01055	0.98155	0.0059865
-378.09	18.904	0.211	0.01055	0.96446	0.0066788
-393.74	19.687	0.211	0.01055	0.97276	0.0073781
-409.61	20.481	0.211	0.01055	0.97101	0.0071053
-425.55	21.278	0.211	0.01055	0.97501	0.0068244
-441.91	22.096	0.211	0.01055	0.96958	0.0072272
-458.12	22.906	0.211	0.01055	0.95991	0.0064035
-474.77	23.739	0.211	0.01055	0.96219	0.0059227
-491.52	24.576	0.211	0.01055	0.96016	0.0058606
-508.51	25.426	0.211	0.01055	0.9509	0.0049836
-525.68	26.284	0.211	0.01055	0.95558	0.0055218
-543.08	27.154	0.211	0.01055	0.95079	0.0058258
-560.74	28.037	0.211	0.01055	0.9514	0.0043921
-578.69	28.935	0.211	0.01055	0.94562	0.0046962
-596.75	29.838	0.211	0.01055	0.94588	0.0047341
-615.17	30.758	0.211	0.01055	0.93958	0.0045821
-633.77	31.688	0.211	0.01055	0.93731	0.0043108
-652.82	32.641	0.211	0.01055	0.93664	0.0052044
-672.04	33.602	0.211	0.01055	0.93209	0.0035563
-691.57	34.578	0.211	0.01055	0.93385	0.0046002
-711.48	35.574	0.211	0.01055	0.93028	0.0051136
-731.67	36.583	0.211	0.01055	0.93012	0.0035279
-752.17	37.608	0.211	0.01055	0.92594	0.0039458
-773.1	38.655	0.211	0.01055	0.92352	0.0027613
-794.42	39.721	0.211	0.01055	0.91823	0.0034587
-816.14	40.807	0.211	0.01055	0.90862	0.0034262
-838.19	41.91	0.211	0.01055	0.91909	0.003498
-860.69	43.034	0.211	0.01055	0.91013	0.0030537
-883.74	44.187	0.211	0.01055	0.90449	0.0035391
-907.04	45.352	0.211	0.01055	0.90057	0.0029672
-930.95	46.547	0.211	0.01055	0.90316	0.0031245
-955.38	47.769	0.211	0.01055	0.89492	0.0030981
-980.25	49.013	0.211	0.01055	0.89636	0.0036625
-1005.7	50.284	0.211	0.01055	0.88808	0.0022652
-1031.7	51.586	0.211	0.01055	0.88665	0.0044622
-1058.3	52.914	0.211	0.01055	0.88205	0.0030275
-1085.5	54.276	0.211	0.01055	0.88257	0.0028637
-1113.4	55.669	0.211	0.01055	0.87629	0.0030312
-1141.9	57.093	0.211	0.01055	0.87732	0.0026539
-1171	58.55	0.211	0.01055	0.87361	0.0034591
-1201	60.052	0.211	0.01055	0.86595	0.0028129
-1231.6	61.582	0.211	0.01055	0.86804	0.0043311
-1263	63.151	0.211	0.01055	0.86676	0.0028806
-1295.2	64.762	0.211	0.01055	0.85655	0.0028657
-1328.4	66.419	0.211	0.01055	0.85794	0.0034773
-1362.3	68.113	0.211	0.01055	0.85521	0.0032798
-1397.1	69.854	0.211	0.01055	0.84974	0.0044537
-1432.9	71.644	0.211	0.01055	0.84149	0.0032738
-1469.7	73.487	0.211	0.01055	0.84801	0.0037874
-1507.5	75.376	0.211	0.01055	0.84334	0.003206
-1546.4	77.318	0.211	0.01055	0.83749	0.0040707
-1586.4	79.322	0.211	0.01055	0.83921	0.0049938
-1627.6	81.381	0.211	0.01055	0.83434	0.0057337
-1669.9	83.497	0.211	0.01055	0.82878	0.0062417
-1713.6	85.678	0.211	0.01055	0.82309	0.0080179
-1758.5	87.927	0.211	0.01055	0.82433	0.0074191
-1804.8	90.239	0.211	0.01055	0.82023	0.0076431
-1852.5	92.627	0.211	0.01055	0.82756	0.0063064
-1901.7	95.087	0.211	0.01055	0.82584	0.0052944
-1952.4	97.622	0.211	0.01055	0.82799	0.0050662
-2004.8	100.24	0.211	0.01055	0.82345	0.0043127
-2058.8	102.94	0.211	0.01055	0.82296	0.0038
-2114.5	105.72	0.211	0.01055	0.81987	0.0034072
-2172	108.6	0.211	0.01055	0.82021	0.0036752
-2231.4	111.57	0.211	0.01055	0.82765	0.0028851
-2292.8	114.64	0.211	0.01055	0.82664	0.0038942
-2356.2	117.81	0.211	0.01055	0.82702	0.0047371
-2421.8	121.09	0.211	0.01055	0.81593	0.0043772
-2489.6	124.48	0.211	0.01055	0.8251	0.0028026
-2559.5	127.98	0.211	0.01055	0.8292	0.0024574
-2631.9	131.59	0.211	0.01055	0.82626	0.0036198
-2706.8	135.34	0.211	0.01055	0.8208	0.0032314
-2784.3	139.22	0.211	0.01055	0.81959	0.0042731
-2864.5	143.23	0.211	0.01055	0.82653	0.002699
-2947.5	147.38	0.211	0.01055	0.82401	0.0036726
-3033.5	151.67	0.211	0.01055	0.82361	0.0048224
-3122.4	156.12	0.211	0.01055	0.82358	0.0041221
-3214.5	160.73	0.211	0.01055	0.82187	0.0028807
-3310.1	165.5	0.211	0.01055	0.82644	0.003516
-3409	170.45	0.211	0.01055	0.82355	0.0021166
-3511.4	175.57	0.211	0.01055	0.82513	0.0033911
-3617.6	180.88	0.211	0.01055	0.82802	0.0015342
-3727.6	186.38	0.211	0.01055	0.82663	0.0029222
-3841.7	192.08	0.211	0.01055	0.82026	0.0020755
-3960	198	0.211	0.01055	0.83079	0.0026394
-4082.7	204.13	0.211	0.01055	0.82665	0.0027466
-4209.9	210.5	0.211	0.01055	0.82774	0.0025199
-4341.9	217.09	0.211	0.01055	0.83489	0.0030619
-4478.7	223.94	0.211	0.01055	0.81987	0.0020988
-4620.8	231.04	0.211	0.01055	0.8253	0.0023899
-4768.2	238.41	0.211	0.01055	0.82653	0.0022851
-4921.1	246.06	0.211	0.01055	0.82442	0.003383
-5079.8	253.99	0.211	0.01055	0.82827	0.0015979
-5244.7	262.23	0.211	0.01055	0.82494	0.0031129
-5415.7	270.79	0.211	0.01055	0.82183	0.0030149
-5593.3	279.67	0.211	0.01055	0.83217	0.0046976
-5777.8	288.89	0.211	0.01055	0.82227	0.005574
-5969.3	298.46	0.211	0.01055	0.82338	0.0025569
Index: src/sas/sascalc/data_util/qsmearing.py
===================================================================
--- src/sas/sascalc/data_util/qsmearing.py	(revision d3911e3cf881d888113c59010d5c63db40c0181b)
+++ src/sas/sascalc/data_util/qsmearing.py	(revision 157b716f93f466df115b83210a75d8ba2aec646a)
@@ -13,7 +13,10 @@
 import logging
 import sys
-
+import numpy as np  # type: ignore
+from numpy import pi, exp # type:ignore
 from sasmodels.resolution import Slit1D, Pinhole1D
+from sasmodels.sesans import SesansTransform
 from sasmodels.resolution2d import Pinhole2D
+from src.sas.sascalc.data_util.nxsunit import Converter
 
 def smear_selection(data, model = None):
@@ -36,4 +39,5 @@
     # 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:
@@ -41,6 +45,6 @@
         elif data.dqx_data == None or data.dqy_data == None:
             return None
-        return PySmear2D(data, model)
-
+        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 +52,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
+        SElength = Converter(data._xunit)(data.x, "A")
+        zaccept = Converter(qunits)(qmax, "1/A"),
+        Rmax = 10000000
+        hankel = SesansTransform(data.x, SElength, zaccept, Rmax)
+        # Then return the actual transform, as if it were a smearing function
+        return PySmear(hankel, model, offset=0)
+
     _found_resolution = False
     if data.dx is not None and len(data.dx) == len(data.x):
@@ -89,8 +115,10 @@
     Wrapper for pure python sasmodels resolution functions.
     """
-    def __init__(self, resolution, model):
+    def __init__(self, resolution, model, offset=None):
         self.model = model
         self.resolution = resolution
-        self.offset = numpy.searchsorted(self.resolution.q_calc, self.resolution.q[0])
+        if offset is None:
+            offset = numpy.searchsorted(self.resolution.q_calc, self.resolution.q[0])
+        self.offset = offset
 
     def apply(self, iq_in, first_bin=0, last_bin=None):
Index: src/sas/sascalc/dataloader/data_info.py
===================================================================
--- src/sas/sascalc/dataloader/data_info.py	(revision 345e7e4a8c6f5977c8c07032553b5ab00bdf837d)
+++ src/sas/sascalc/dataloader/data_info.py	(revision ad4632c3bee7cc6b6d8987a3088e925b98cf41ab)
@@ -25,57 +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):
@@ -93,4 +40,7 @@
     ## Slit smearing width
     dxw = None
+    ## SESANS specific params (wavelengths for spin echo length calculation)
+    lam = None
+    dlam = None
 
     # Units
@@ -100,5 +50,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 +61,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):
@@ -398,4 +352,6 @@
     ## Details
     details = None
+    ## SESANS zacceptance
+    zacceptance = None
 
     def __init__(self):
@@ -535,4 +491,7 @@
     ## Loading errors
     errors = None
+    ## SESANS data check
+    isSesans = None
+
 
     def __init__(self):
@@ -567,4 +526,6 @@
         ## Loading errors
         self.errors = []
+        ## SESANS data check
+        self.isSesans = False
 
     def append_empty_process(self):
@@ -586,4 +547,5 @@
         _str += "Title:           %s\n" % self.title
         _str += "Run:             %s\n" % str(self.run)
+        _str += "SESANS:          %s\n" % str(self.isSesans)
         _str += "Instrument:      %s\n" % str(self.instrument)
         _str += "%s\n" % str(self.sample)
@@ -736,14 +698,21 @@
         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
+    """
+    def __init__(self, x=None, y=None, dx=None, dy=None, lam=None, dlam=None, isSesans=None):
         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)
+        self.isSesans = isSesans
+        try:
+            if self.isSesans: # the data is SESANS
+                self.x_unit = 'A'
+                self.y_unit = 'pol'
+            elif not self.isSesans: # the data is SANS
+                self.x_unit = '1/A'
+                self.y_unit = '1/cm'
+        except: # the data is not recognized/supported, and the user is notified
+            raise(TypeError, 'data not recognized, check documentation for supported 1D data formats')
 
     def __str__(self):
@@ -759,60 +728,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 +756,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
@@ -1021,10 +936,12 @@
     def __init__(self, data=None, err_data=None, qx_data=None,
                  qy_data=None, q_data=None, mask=None,
-                 dqx_data=None, dqy_data=None):
-        self.y_bins = []
-        self.x_bins = []
+                 dqx_data=None, dqy_data=None, isSesans=None):
         DataInfo.__init__(self)
         plottable_2D.__init__(self, data, err_data, qx_data,
                               qy_data, q_data, mask, dqx_data, dqy_data)
+        self.y_bins = []
+        self.x_bins = []
+        self.isSesans=isSesans
+
         if len(self.detector) > 0:
             raise RuntimeError, "Data2D: Detector bank already filled at init"
@@ -1265,4 +1182,5 @@
     final_dataset.xmin = data.xmin
     final_dataset.ymin = data.ymin
+    final_dataset.isSesans = datainfo.isSesans
     final_dataset.title = datainfo.title
     final_dataset.run = datainfo.run
Index: src/sas/sascalc/dataloader/readers/cansas_constants.py
===================================================================
--- src/sas/sascalc/dataloader/readers/cansas_constants.py	(revision 250fec92ea66b0770da33360a90f022e1d674072)
+++ src/sas/sascalc/dataloader/readers/cansas_constants.py	(revision ad4632c3bee7cc6b6d8987a3088e925b98cf41ab)
@@ -133,4 +133,6 @@
                "variable" : None,
                "children" : {"Idata" : SASDATA_IDATA,
+                             "Sesans": {"storeas": "content"},
+                             "zacceptance": {"storeas": "float"},
                              "<any>" : ANY
                             }
Index: src/sas/sascalc/dataloader/readers/cansas_reader.py
===================================================================
--- src/sas/sascalc/dataloader/readers/cansas_reader.py	(revision bcabf4e59bfdf2b9bf9651d0b19f9da3055d5773)
+++ src/sas/sascalc/dataloader/readers/cansas_reader.py	(revision bcabf4e59bfdf2b9bf9651d0b19f9da3055d5773)
@@ -261,10 +261,18 @@
                 # I and Q - 1D data
                 elif tagname == 'I' and isinstance(self.current_dataset, plottable_1D):
-                    self.current_dataset.yaxis("Intensity", unit)
+                    unit_list = unit.split(" | ")
+                    if len(unit_list) > 1:
+                        self.current_dataset.yaxis(unit_list[0], unit_list[1])
+                    else:
+                        self.current_dataset.yaxis("Intensity", unit)
                     self.current_dataset.y = np.append(self.current_dataset.y, data_point)
                 elif tagname == 'Idev' and isinstance(self.current_dataset, plottable_1D):
                     self.current_dataset.dy = np.append(self.current_dataset.dy, data_point)
                 elif tagname == 'Q':
-                    self.current_dataset.xaxis("Q", unit)
+                    unit_list = unit.split(" | ")
+                    if len(unit_list) > 1:
+                        self.current_dataset.xaxis(unit_list[0], unit_list[1])
+                    else:
+                        self.current_dataset.xaxis("Q", unit)
                     self.current_dataset.x = np.append(self.current_dataset.x, data_point)
                 elif tagname == 'Qdev':
@@ -278,4 +286,8 @@
                 elif tagname == 'Shadowfactor':
                     pass
+                elif tagname == 'Sesans':
+                    self.current_datainfo.isSesans = bool(data_point)
+                elif tagname == 'zacceptance':
+                    self.current_datainfo.sample.zacceptance = (data_point, unit)
 
                 # I and Qx, Qy - 2D data
@@ -1020,20 +1032,27 @@
             node.append(point)
             self.write_node(point, "Q", datainfo.x[i],
-                            {'unit': datainfo.x_unit})
+                            {'unit': datainfo._xaxis + " | " + datainfo._xunit})
             if len(datainfo.y) >= i:
                 self.write_node(point, "I", datainfo.y[i],
-                                {'unit': datainfo.y_unit})
+                                {'unit': datainfo._yaxis + " | " + datainfo._yunit})
             if datainfo.dy is not None and len(datainfo.dy) > i:
                 self.write_node(point, "Idev", datainfo.dy[i],
-                                {'unit': datainfo.y_unit})
+                                {'unit': datainfo._yaxis + " | " + datainfo._yunit})
             if datainfo.dx is not None and len(datainfo.dx) > i:
                 self.write_node(point, "Qdev", datainfo.dx[i],
-                                {'unit': datainfo.x_unit})
+                                {'unit': datainfo._xaxis + " | " + datainfo._xunit})
             if datainfo.dxw is not None and len(datainfo.dxw) > i:
                 self.write_node(point, "dQw", datainfo.dxw[i],
-                                {'unit': datainfo.x_unit})
+                                {'unit': datainfo._xaxis + " | " + datainfo._xunit})
             if datainfo.dxl is not None and len(datainfo.dxl) > i:
                 self.write_node(point, "dQl", datainfo.dxl[i],
-                                {'unit': datainfo.x_unit})
+                                {'unit': datainfo._xaxis + " | " + datainfo._xunit})
+        if datainfo.isSesans:
+            sesans = self.create_element("Sesans")
+            sesans.text = str(datainfo.isSesans)
+            node.append(sesans)
+            self.write_node(node, "zacceptance", datainfo.sample.zacceptance[0],
+                             {'unit': datainfo.sample.zacceptance[1]})
+
 
     def _write_data_2d(self, datainfo, entry_node):
Index: src/sas/sascalc/dataloader/readers/sesans_reader.py
===================================================================
--- src/sas/sascalc/dataloader/readers/sesans_reader.py	(revision 345e7e4a8c6f5977c8c07032553b5ab00bdf837d)
+++ src/sas/sascalc/dataloader/readers/sesans_reader.py	(revision b5db35da412b2109056fc5155ed97d80875bb756)
@@ -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,5 @@
                 Pvals=[]
                 dPvals=[]
-#                print x
-#                print zvals
+
                 for line in lines:
                     # Initial try for CSV (split on ,)
@@ -122,9 +95,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 +113,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 +136,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 added
                 output.dx, output.dx_unit = self._unit_conversion(dx, lam_unit, default_z_unit)
                 output.dy = dy
@@ -166,17 +142,17 @@
                 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)
-                output.vars=varheader
+                output.vars = varheader
 
                 if len(output.x) < 1:
Index: src/sas/sascalc/fit/AbstractFitEngine.py
===================================================================
--- src/sas/sascalc/fit/AbstractFitEngine.py	(revision d3911e3cf881d888113c59010d5c63db40c0181b)
+++ src/sas/sascalc/fit/AbstractFitEngine.py	(revision a9f579c8400c480f42c42445e1ff4dab09a6baa4)
@@ -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/sasgui/guiframe/dataFitting.py
===================================================================
--- src/sas/sasgui/guiframe/dataFitting.py	(revision 345e7e4a8c6f5977c8c07032553b5ab00bdf837d)
+++ src/sas/sasgui/guiframe/dataFitting.py	(revision 68adf86632754e28ed4e1600ebe337656f349a2b)
@@ -17,5 +17,6 @@
     """
     """
-    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 +25,8 @@
         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 = []
@@ -32,5 +35,9 @@
         self.path = None
         self.xtransform = None
+        if self.isSesans:
+            self.xtransform = "x"
         self.ytransform = None
+        if self.isSesans:
+            self.ytransform = "y"
         self.title = ""
         self.scale = None
@@ -68,5 +75,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 +122,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 +152,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 +276,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 +305,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 345e7e4a8c6f5977c8c07032553b5ab00bdf837d)
+++ src/sas/sasgui/guiframe/data_manager.py	(revision 20522e12c1673e2938cba2e95b8857993da746ce)
@@ -61,8 +61,14 @@
         
         if issubclass(Data2D, data.__class__):
-            new_plot = Data2D(image=None, err_image=None) 
-        else: 
-            new_plot = Data1D(x=[], y=[], dx=None, dy=None)
-           
+            new_plot = Data2D(image=None, err_image=None, isSesans=data.isSesans) # For now, isSesans for 2D data is always false
+        else:
+            new_plot = Data1D(x=[], y=[], dx=None, dy=None, lam=None, dlam=None, isSesans=data.isSesans)
+
+
+        #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)
         data.clone_without_data(clone=new_plot)
Index: src/sas/sasgui/plottools/plottables.py
===================================================================
--- src/sas/sasgui/plottools/plottables.py	(revision 345e7e4a8c6f5977c8c07032553b5ab00bdf837d)
+++ src/sas/sasgui/plottools/plottables.py	(revision a9f579c8400c480f42c42445e1ff4dab09a6baa4)
@@ -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
