Index: src/sas/sascalc/dataloader/readers/cansas_reader.py
===================================================================
--- src/sas/sascalc/dataloader/readers/cansas_reader.py	(revision 654e8e066dda6b98c221cad28e05fa6996e7fc11)
+++ src/sas/sascalc/dataloader/readers/cansas_reader.py	(revision 83c09af62d5011f226defc52e4715b83e6494e0f)
@@ -20,7 +20,10 @@
 import inspect
 # For saving individual sections of data
-from sas.sascalc.dataloader.data_info import Data1D, DataInfo, plottable_1D
-from sas.sascalc.dataloader.data_info import Collimation, TransmissionSpectrum, Detector, Process, Aperture
-from sas.sascalc.dataloader.data_info import combine_data_info_with_plottable as combine_data
+from sas.sascalc.dataloader.data_info import Data1D, Data2D, DataInfo, \
+    plottable_1D
+from sas.sascalc.dataloader.data_info import Collimation, TransmissionSpectrum, \
+    Detector, Process, Aperture
+from sas.sascalc.dataloader.data_info import \
+    combine_data_info_with_plottable as combine_data
 import sas.sascalc.dataloader.readers.xml_reader as xml_reader
 from sas.sascalc.dataloader.readers.xml_reader import XMLreader
@@ -792,6 +795,6 @@
         :param datainfo: Data1D object
         """
-        if not issubclass(datainfo.__class__, Data1D):
-            raise RuntimeError, "The cansas writer expects a Data1D instance"
+        if issubclass(datainfo.__class__, Data2D):
+            is_2d = True
 
         # Get PIs and create root element
@@ -813,5 +816,8 @@
         self._write_run_names(datainfo, entry_node)
         # Add Data info to SASEntry
-        self._write_data(datainfo, entry_node)
+        if is_2d:
+            self._write_data_2d(datainfo, entry_node)
+        else:
+            self._write_data(datainfo, entry_node)
         # Transmission Spectrum Info
         self._write_trans_spectrum(datainfo, entry_node)
@@ -907,5 +913,5 @@
     def _write_data(self, datainfo, entry_node):
         """
-        Writes the I and Q data to the XML file
+        Writes 1D I and Q data to the XML file
 
         :param datainfo: The Data1D object the information is coming from
@@ -935,4 +941,35 @@
                 self.write_node(point, "dQl", datainfo.dxl[i],
                                 {'unit': datainfo.x_unit})
+
+    def _write_data_2d(self, datainfo, entry_node):
+        """
+        Writes 2D data to the XML file
+
+        :param datainfo: The Data2D object the information is coming from
+        :param entry_node: lxml node ElementTree object to be appended to
+        """
+        node = self.create_element("SASdata")
+        self.append(node, entry_node)
+
+        for i in range(len(datainfo.data)):
+            point = self.create_element("Idata")
+            node.append(point)
+            self.write_node(point, "Qx", datainfo.qx_data[i],
+                            {'unit': datainfo._xunit})
+            self.write_node(point, "Qy", datainfo.qy_data[i],
+                            {'unit': datainfo._yunit})
+            self.write_node(point, "I", datainfo.data[i],
+                            {'unit': datainfo._zunit})
+            if datainfo.err_data is not None and len(datainfo.err_data) > i:
+                self.write_node(point, "Idev", datainfo.err_data[i],
+                                {'unit': datainfo._zunit})
+            if datainfo.dqy_data is not None and len(datainfo.dqy_data) > i:
+                self.write_node(point, "Qydev", datainfo.dqy_data[i],
+                                {'unit': datainfo._yunit})
+            if datainfo.dqx_data is not None and len(datainfo.dqx_data) > i:
+                self.write_node(point, "Qxdev", datainfo.dqx_data[i],
+                                {'unit': datainfo._xunit})
+            if datainfo.mask is not None and len(datainfo.mask) > i:
+                self.write_node(point, "Mask", datainfo.err_data[i])
 
     def _write_trans_spectrum(self, datainfo, entry_node):
Index: src/sas/sascalc/dataloader/readers/schema/cansas1d_invalid_v1_0.xsd
===================================================================
--- src/sas/sascalc/dataloader/readers/schema/cansas1d_invalid_v1_0.xsd	(revision 250fec92ea66b0770da33360a90f022e1d674072)
+++ src/sas/sascalc/dataloader/readers/schema/cansas1d_invalid_v1_0.xsd	(revision 83c09af62d5011f226defc52e4715b83e6494e0f)
@@ -24,4 +24,5 @@
 
 	<complexType name="IdataType">
+		<xsd:choice>
 		<sequence>
 			<element name="Q" minOccurs="1" maxOccurs="1"    type="tns:floatUnitType" />
@@ -40,4 +41,14 @@
 			<xsd:any minOccurs="0" maxOccurs="unbounded" processContents="lax" namespace="##other" />
 		</sequence>
+		<sequence>
+			<element name="Qx" minOccurs="1" maxOccurs="1"    type="tns:floatUnitType" />
+			<element name="Qy" minOccurs="1" maxOccurs="1"    type="tns:floatUnitType" />
+			<element name="I" minOccurs="1" maxOccurs="1"    type="tns:floatUnitType" />
+			<element name="Idev" minOccurs="0" maxOccurs="1" type="tns:floatUnitType" default="0" />
+			<element name="Qydev" minOccurs="0" maxOccurs="1" type="tns:floatUnitType" default="0" />
+			<element name="Qxdev" minOccurs="0" maxOccurs="1" type="tns:floatUnitType" default="0" />
+			<element name="Mask" minOccurs="0" maxOccurs="1" type="string" default="0" />
+		</sequence>
+		</xsd:choice>
 	</complexType>
 	
Index: src/sas/sascalc/dataloader/readers/schema/cansas1d_invalid_v1_1.xsd
===================================================================
--- src/sas/sascalc/dataloader/readers/schema/cansas1d_invalid_v1_1.xsd	(revision 250fec92ea66b0770da33360a90f022e1d674072)
+++ src/sas/sascalc/dataloader/readers/schema/cansas1d_invalid_v1_1.xsd	(revision 83c09af62d5011f226defc52e4715b83e6494e0f)
@@ -24,4 +24,5 @@
 
 	<complexType name="IdataType">
+		<xsd:choice>
 		<sequence>
 			<element name="Q" minOccurs="1" maxOccurs="1"    type="tns:floatUnitType" />
@@ -40,4 +41,14 @@
 			<xsd:any minOccurs="0" maxOccurs="unbounded" processContents="lax" namespace="##other" />
 		</sequence>
+		<sequence>
+			<element name="Qx" minOccurs="1" maxOccurs="1"    type="tns:floatUnitType" />
+			<element name="Qy" minOccurs="1" maxOccurs="1"    type="tns:floatUnitType" />
+			<element name="I" minOccurs="1" maxOccurs="1"    type="tns:floatUnitType" />
+			<element name="Idev" minOccurs="0" maxOccurs="1" type="tns:floatUnitType" default="0" />
+			<element name="Qydev" minOccurs="0" maxOccurs="1" type="tns:floatUnitType" default="0" />
+			<element name="Qxdev" minOccurs="0" maxOccurs="1" type="tns:floatUnitType" default="0" />
+			<element name="Mask" minOccurs="0" maxOccurs="1" type="string" default="0" />
+		</sequence>
+		</xsd:choice>
 	</complexType>
 	
