Index: src/sas/sasgui/perspectives/file_converter/converter_panel.py
===================================================================
--- src/sas/sasgui/perspectives/file_converter/converter_panel.py	(revision 3ea9371b30ee79788350664fb39f696be74d9b39)
+++ src/sas/sasgui/perspectives/file_converter/converter_panel.py	(revision 503cc34b502c3f05fdb6c33ae937635a66cf94ce)
@@ -56,16 +56,15 @@
         self.data_type = "ascii"
 
-        self.metadata = {
-            'title': None,
-            'run': None,
-            'run_name': None,
-            'instrument': None,
-            'detector': [Detector()],
-            'sample': Sample(),
-            'source': Source()
-        }
-
-        self.metadata['detector'][0].name = ''
-        self.metadata['source'].radiation = 'neutron'
+        self.title = None
+        self.run = None
+        self.run_name = None
+        self.instrument = None
+        self.detector = Detector()
+        self.sample = Sample()
+        self.source = Source()
+        self.properties = ['title', 'run', 'run_name', 'instrument']
+
+        self.detector.name = ''
+        self.source.radiation = 'neutron'
 
         self._do_layout()
@@ -106,5 +105,5 @@
             return
 
-        self.metadata['sample'].ID = self.metadata['title']
+        self.sample.ID = self.title
 
         try:
@@ -128,10 +127,10 @@
         data.filename = output_path.split('\\')[-1]
 
-        if self.metadata['run'] is not None:
-            run = self.metadata['run']
-            run_name = self.metadata['run_name']
+        if self.run is not None:
+            run = self.run
+            run_name = self.run_name
 
             if not isinstance(run, list) and run is not None:
-                self.metadata['run'] = [run]
+                self.run = [run]
             else:
                 run = run[0]
@@ -139,16 +138,25 @@
             if not isinstance(run_name, dict):
                 if run_name is not None:
-                    self.metadata['run_name'] = { run: run_name }
+                    self.run_name = { run: run_name }
                 else:
-                    self.metadata['run_name'] = {}
+                    self.run_name = {}
             elif run_name != {}:
-                self.metadata['run_name'][run] = run_name.values()[0]
+                self.run_name[run] = run_name.values()[0]
         else:
-            self.metadata['run'] = []
-            self.metadata['run_name'] = {}
-
-        for attr, value in self.metadata.iteritems():
-            if value is not None:
-                setattr(data, attr, value)
+            self.run = []
+            self.run_name = {}
+
+        metadata = {
+            'title': self.title,
+            'run': self.run,
+            'run_name': self.run_name,
+            'intrument': self.instrument,
+            'detector': [self.detector],
+            'sample': self.sample,
+            'source': self.source
+        }
+
+        for key, value in metadata.iteritems():
+            setattr(data, key, value)
 
         self.convert_to_cansas(data, output_path)
@@ -183,5 +191,5 @@
         detector_frame = MetadataWindow(DetectorPanel,
             parent=self.parent.manager.parent, manager=self,
-            metadata=self.metadata['detector'][0], title='Detector Metadata')
+            metadata=self.detector, title='Detector Metadata')
         self.meta_frames.append(detector_frame)
         self.parent.manager.put_icon(detector_frame)
@@ -194,5 +202,5 @@
         sample_frame = MetadataWindow(SamplePanel,
             parent=self.parent.manager.parent, manager=self,
-            metadata=self.metadata['sample'], title='Sample Metadata')
+            metadata=self.sample, title='Sample Metadata')
         self.meta_frames.append(sample_frame)
         self.parent.manager.put_icon(sample_frame)
@@ -205,5 +213,5 @@
         source_frame = MetadataWindow(SourcePanel,
             parent=self.parent.manager.parent, manager=self,
-            metadata=self.metadata['source'], title="Source Metadata")
+            metadata=self.source, title="Source Metadata")
         self.meta_frames.append(source_frame)
         self.parent.manager.put_icon(source_frame)
@@ -224,5 +232,5 @@
         event.Skip()
         rtype = event.GetEventObject().GetValue().lower()
-        self.metadata['source'].radiation = rtype
+        self.source.radiation = rtype
 
     def metadata_changed(self, event):
@@ -232,8 +240,7 @@
         value = textbox.GetValue().strip()
 
-        if value == '':
-            self.metadata[attr] = None
-        else:
-            self.metadata[attr] = value
+        if value == '': value = None
+
+        setattr(self, attr, value)
 
 
@@ -332,8 +339,5 @@
 
         y = 0
-        windows = ['detector', 'sample', 'source']
-        for item in self.metadata.keys():
-            # Don't make fields for properties that have their own windows
-            if item in windows: continue
+        for item in self.properties:
             label_txt = item.replace('_', ' ').capitalize()
             label = wx.StaticText(metadata_pane, -1, label_txt,
Index: src/sas/sasgui/perspectives/file_converter/meta_panels.py
===================================================================
--- src/sas/sasgui/perspectives/file_converter/meta_panels.py	(revision 91807fce2ade46ec9cc3723c0eebc6dee7c226c5)
+++ src/sas/sasgui/perspectives/file_converter/meta_panels.py	(revision 503cc34b502c3f05fdb6c33ae937635a66cf94ce)
@@ -92,5 +92,5 @@
             return
 
-        self.parent.manager.metadata['detector'] = [self.metadata]
+        self.parent.manager.detector = self.metadata
         self.parent.on_close(event)
 
@@ -194,5 +194,5 @@
             return
 
-        self.parent.manager.metadata['sample'] = self.metadata
+        self.parent.manager.sample = self.metadata
         self.parent.on_close(event)
 
@@ -305,5 +305,5 @@
             return
 
-        self.parent.manager.metadata['source'] = self.metadata
+        self.parent.manager.source = self.metadata
         self.parent.on_close(event)
 
