Index: src/sas/sasgui/perspectives/file_converter/converter_panel.py
===================================================================
--- src/sas/sasgui/perspectives/file_converter/converter_panel.py	(revision a027549357d0197bd605207028a3ae4123e27579)
+++ src/sas/sasgui/perspectives/file_converter/converter_panel.py	(revision 55bc56bc3fc0183b327b5e34411cbde6b66ad683)
@@ -13,4 +13,5 @@
 from sas.sasgui.perspectives.file_converter.meta_panels import DetectorPanel
 from sas.sasgui.perspectives.file_converter.meta_panels import SamplePanel
+from sas.sasgui.perspectives.file_converter.meta_panels import SourcePanel
 from sas.sasgui.guiframe.events import StatusEvent
 from sas.sasgui.guiframe.dataFitting import Data1D
@@ -20,4 +21,5 @@
 from sas.sascalc.dataloader.data_info import Detector
 from sas.sascalc.dataloader.data_info import Sample
+from sas.sascalc.dataloader.data_info import Source
 from sas.sascalc.dataloader.data_info import Vector
 
@@ -59,5 +61,6 @@
             'instrument': None,
             'detector': [Detector()],
-            'sample': Sample()
+            'sample': Sample(),
+            'source': Source()
         }
 
@@ -186,4 +189,15 @@
         sample_frame.Show(True)
 
+    def show_source_window(self, event):
+        if self.meta_frames != []:
+            for frame in self.meta_frames:
+                frame.panel.on_close()
+        source_frame = MetadataWindow(SourcePanel,
+            parent=self.parent.manager.parent, manager=self,
+            metadata=self.metadata['source'], title="Source Metadata")
+        self.meta_frames.append(source_frame)
+        self.parent.manager.put_icon(source_frame)
+        source_frame.Show(True)
+
     def on_collapsible_pane(self, event):
         self.Freeze()
@@ -289,6 +303,7 @@
 
         y = 0
+        windows = ['detector', 'sample', 'source']
         for item in self.metadata.keys():
-            if item == 'detector' or item == 'sample': continue
+            if item in windows: continue
             label_txt = item.replace('_', ' ').capitalize()
             label = wx.StaticText(metadata_pane, -1, label_txt,
@@ -317,4 +332,11 @@
         y += 1
 
+        source_label = wx.StaticText(metadata_pane, -1, "Source: ")
+        metadata_grid.Add(source_label, (y,0), (1,1), wx.ALL | wx.EXPAND, 5)
+        source_btn = wx.Button(metadata_pane, -1, "Enter Source Metadata")
+        source_btn.Bind(wx.EVT_BUTTON, self.show_source_window)
+        metadata_grid.Add(source_btn, (y,1), (1,1), wx.ALL | wx.EXPAND, 5)
+        y += 1
+
         metadata_pane.SetSizer(metadata_grid)
 
Index: src/sas/sasgui/perspectives/file_converter/meta_panels.py
===================================================================
--- src/sas/sasgui/perspectives/file_converter/meta_panels.py	(revision 9318c4ec3e18d2d26af108429935fa374719b8b0)
+++ src/sas/sasgui/perspectives/file_converter/meta_panels.py	(revision 55bc56bc3fc0183b327b5e34411cbde6b66ad683)
@@ -297,4 +297,123 @@
         self.SetSizer(vbox)
 
+class SourcePanel(MetadataPanel):
+
+    def __init__(self, parent, source, base=None, *args, **kwargs):
+        MetadataPanel.__init__(self, parent, source, base, *args, **kwargs)
+        if source.name is None:
+            source.name = ''
+        source.wavelength_unit = 'nm'
+
+        self._do_layout()
+        self.SetAutoLayout(True)
+        self.Layout()
+
+    def on_close(self, event=None):
+        if not MetadataPanel.on_close(self, event):
+            return
+
+        self.parent.manager.metadata['source'] = self.metadata
+        self.parent.on_close(event)
+
+    def _do_layout(self):
+        vbox = wx.BoxSizer(wx.VERTICAL)
+
+        section = wx.StaticBox(self, -1, "Source")
+        section_sizer = wx.StaticBoxSizer(section, wx.VERTICAL)
+        section_sizer.SetMinSize((_STATICBOX_WIDTH, -1))
+
+        input_grid = wx.GridBagSizer(5, 5)
+
+        y = 0
+        name_label = wx.StaticText(self, -1, "Name: ")
+        input_grid.Add(name_label, (y,0), (1,1), wx.ALL, 5)
+        name_input = wx.TextCtrl(self, -1, name="name")
+        input_grid.Add(name_input, (y,1), (1,1))
+        name_input.Bind(wx.EVT_TEXT, self.on_change)
+        y += 1
+
+        radiation_label = wx.StaticText(self, -1, "Radiation: ")
+        input_grid.Add(radiation_label, (y,0), (1,1), wx.ALL, 5)
+        radiation_input = wx.ComboBox(self, -1,
+            choices=["neutron", "x-ray", "muon", "electron"],
+            name="radiation", style=wx.CB_READONLY)
+        radiation_input.Bind(wx.EVT_COMBOBOX, self.on_change)
+        input_grid.Add(radiation_input, (y,1), (1,1))
+        y += 1
+
+        size_label = wx.StaticText(self, -1, "Beam Size (mm): ")
+        input_grid.Add(size_label, (y,0), (1,1), wx.ALL, 5)
+        size_input = VectorInput(self, "beam_size")
+        self._vectors.append(size_input)
+        input_grid.Add(size_input.GetSizer(), (y,1), (1,1))
+        y += 1
+
+        shape_label = wx.StaticText(self, -1, "Beam Shape: ")
+        input_grid.Add(shape_label, (y,0), (1,1), wx.ALL, 5)
+        shape_input = wx.TextCtrl(self, -1, name="beam_shape")
+        shape_input.Bind(wx.EVT_TEXT, self.on_change)
+        input_grid.Add(shape_input, (y,1), (1,1))
+        y += 1
+
+        wavelength_label = wx.StaticText(self, -1, "Wavelength (nm): ")
+        input_grid.Add(wavelength_label, (y,0), (1,1), wx.ALL, 5)
+        wavelength_input = wx.TextCtrl(self, -1, name="wavelength",
+            size=(50,-1))
+        wavelength_input.Bind(wx.EVT_TEXT, self.on_change)
+        self._to_validate.append(wavelength_input)
+        input_grid.Add(wavelength_input, (y,1), (1,1))
+        y += 1
+
+        min_wavelength_label = wx.StaticText(self, -1, "Min. Wavelength (nm): ")
+        input_grid.Add(min_wavelength_label, (y,0), (1,1), wx.ALL, 5)
+        min_wavelength_input = wx.TextCtrl(self, -1, name="wavelength_min",
+            size=(50,-1))
+        min_wavelength_input.Bind(wx.EVT_TEXT, self.on_change)
+        self._to_validate.append(min_wavelength_input)
+        input_grid.Add(min_wavelength_input, (y,1), (1,1))
+        y += 1
+
+        max_wavelength_label = wx.StaticText(self, -1, "Max. Wavelength (nm): ")
+        input_grid.Add(max_wavelength_label, (y,0), (1,1), wx.ALL, 5)
+        max_wavelength_input = wx.TextCtrl(self, -1, name="wavelength_max",
+            size=(50,-1))
+        max_wavelength_input.Bind(wx.EVT_TEXT, self.on_change)
+        self._to_validate.append(max_wavelength_input)
+        input_grid.Add(max_wavelength_input, (y,1), (1,1))
+        y += 1
+
+        wavelength_spread_label = wx.StaticText(self, -1,
+            "Wavelength Spread (%): ")
+        input_grid.Add(wavelength_spread_label, (y,0), (1,1), wx.ALL, 5)
+        wavelength_spread_input = wx.TextCtrl(self, -1,
+            name="wavelength_spread", size=(50,-1))
+        wavelength_spread_input.Bind(wx.EVT_TEXT, self.on_change)
+        self._to_validate.append(wavelength_spread_input)
+        input_grid.Add(wavelength_spread_input, (y,1), (1,1))
+        y += 1
+
+
+        name_input.SetValue(self.get_property_string("name"))
+        radiation_input.SetValue(self.get_property_string("radiation"))
+        size_input.SetValue(self.metadata.beam_size)
+        shape_input.SetValue(self.get_property_string("beam_shape"))
+        wavelength_input.SetValue(
+            self.get_property_string("wavelength", is_float=True))
+        min_wavelength_input.SetValue(
+            self.get_property_string("wavelength_min", is_float=True))
+        max_wavelength_input.SetValue(
+            self.get_property_string("wavelength_max", is_float=True))
+
+        done_btn = wx.Button(self, -1, "Done")
+        input_grid.Add(done_btn, (y,0), (1,1), wx.ALL, 5)
+        done_btn.Bind(wx.EVT_BUTTON, self.on_close)
+
+        section_sizer.Add(input_grid)
+        vbox.Add(section_sizer, flag=wx.ALL, border=10)
+
+        vbox.Fit(self)
+        self.SetSizer(vbox)
+
+
 class MetadataWindow(widget.CHILD_FRAME):
 
