Index: src/sas/sasgui/perspectives/corfunc/corfunc.py
===================================================================
--- src/sas/sasgui/perspectives/corfunc/corfunc.py	(revision c23f303448cfceb9e5a58e5d7da46258cdb3cbd8)
+++ src/sas/sasgui/perspectives/corfunc/corfunc.py	(revision 785857594ca8f4e34f5d4656d5e541efa00540f6)
@@ -3,8 +3,19 @@
 """
 import wx
+import sys
 import logging
 from sas.sasgui.guiframe.plugin_base import PluginBase
 from sas.sasgui.guiframe.gui_manager import MDIFrame
+from sas.sasgui.guiframe.events import StatusEvent
+from sas.sasgui.guiframe.events import NewPlotEvent
+from sas.sasgui.guiframe.gui_style import GUIFRAME_ID
 from sas.sasgui.perspectives.corfunc.corfunc_panel import CorfuncPanel
+from sas.sasgui.guiframe.dataFitting import Data1D
+from sas.sasgui.perspectives.pr.pr_widgets import DataDialog
+
+
+GROUP_ID_IQ_DATA = r"$I_{obs}(q)$"
+IQ_DATA_LABEL = r"$I_{obs}(q)$"
+
 
 class Plugin(PluginBase):
@@ -25,8 +36,5 @@
         self.parent = parent
         self.frame = MDIFrame(self.parent, None, 'None', (100,200))
-        # self.test_panel = PanelBase(parent=self.frame)
-        # self.test_panel.set_manager(self)
-        # self.frame.set_panel(self.test_panel)
-        # self.perspective.append("testwindow")
+        self.data_id = IQ_DATA_LABEL
         self.corfunc_panel = CorfuncPanel(parent=self.frame)
         self.frame.set_panel(self.corfunc_panel)
@@ -35,2 +43,84 @@
 
         return [self.corfunc_panel]
+
+    def set_data(self, data_list=None):
+        """
+        Load the data that's been selected
+
+        :param data_list: The data to load in
+        """
+        if data_list is None:
+            data_list = []
+        if len(data_list) >= 1:
+            if len(data_list) == 1:
+                data = data_list[0]
+            else:
+                data_1d_list = []
+                data_2d_list = []
+                err_msg = ""
+
+                for data in data_list:
+                    if data is not None:
+                        if issubclass(data.__class__, Data1D):
+                            data_1d_list.append(data)
+                        else:
+                            err_msg += "{} type {} \n".format(str(data.name),
+                                str(data.__class__))
+                            data_2d_list.append(data)
+                if len(data_2d_list) > 0:
+                    msg = "Corfunc doesn't support the following data types:\n"
+                    msg += err_msg
+                if len(data_1d_list) == 0:
+                    msg += "No data recieved"
+                    wx.PostEvent(self.parent, StatusEvent(status=msg,
+                                                info='error'))
+                    return
+                elif len(data_list) > 1:
+                    msg = "Corfunc does not allow multiple data\n"
+                    msg += "Please select one.\n"
+                    dlg = DataDialog(data_list=data_1d_list, text=msg)
+                    if dlg.ShowModal() == wx.ID_OK:
+                        data = dlg.get_data()
+                    else:
+                        data = None
+                    dlg.Destroy()
+
+            if data is None:
+                msg += "Corfunc recieved no data\n"
+                wx.PostEvent(self.parent, StatusEvent(status=msg,
+                                            info='error'))
+                return
+            if issubclass(data.__class__, Data1D):
+                try:
+                    wx.PostEvent(self.parent, NewPlotEvent(action='remove',
+                                                group_id=GROUP_ID_IQ_DATA,
+                                                id=self.data_id))
+                    self.data_id = data.id
+                    self.corfunc_panel._set_data(data)
+                except:
+                    msg = "Corfunc set_data: " + str(sys.exc_value)
+                    wx.PostEvent(self.parent, StatusEvent(status=msg,
+                        info='error'))
+
+    def show_data(self, path=None, data=None, reset=False):
+        """
+        Show data read from a file
+
+        :param path: The path to the file
+        :param data: The data to plot (Data1D)
+        :param reset: If True, all other plottables will be cleared
+        """
+        if data.dy is not None:
+            new_plot = Data1D(data.x, data.y, dy=data.dy)
+        else:
+            new_plot = Data1D(data.x, data.y)
+        new_plot.symbol = GUIFRAME_ID.CURVE_SYMBOL_NUM
+        new_plot.name = IQ_DATA_LABEL
+        new_plot.xaxis("\\rm{Q}", 'A^{-1}')
+        new_plot.yaxis("\\rm{Intensity} ", "cm^{-1}")
+        new_plot.interactive = True
+        new_plot.group_id = GROUP_ID_IQ_DATA
+        new_plot.id = self.data_id
+        new_plot.title = "I(q)"
+        wx.PostEvent(self.parent,
+                     NewPlotEvent(plot=new_plot, title="I(q)", reset=reset))
Index: src/sas/sasgui/perspectives/corfunc/corfunc_panel.py
===================================================================
--- src/sas/sasgui/perspectives/corfunc/corfunc_panel.py	(revision c23f303448cfceb9e5a58e5d7da46258cdb3cbd8)
+++ src/sas/sasgui/perspectives/corfunc/corfunc_panel.py	(revision 785857594ca8f4e34f5d4656d5e541efa00540f6)
@@ -3,14 +3,15 @@
 from wx.lib.scrolledpanel import ScrolledPanel
 from sas.sasgui.guiframe.panel_base import PanelBase
+from sas.sasgui.perspectives.invariant.invariant_widgets import OutputTextCtrl
 
 BACKGROUND = 0.0
 if sys.platform.count("win32") > 0:
-    _STATICBOX_WIDTH = 450
-    PANEL_WIDTH = 500
+    _STATICBOX_WIDTH = 350
+    PANEL_WIDTH = 400
     PANEL_HEIGHT = 700
     FONT_VARIANT = 0
 else:
-    _STATICBOX_WIDTH = 490
-    PANEL_WIDTH = 530
+    _STATICBOX_WIDTH = 390
+    PANEL_WIDTH = 430
     PANEL_HEIGHT = 700
     FONT_VARIANT = 1
@@ -32,7 +33,4 @@
         self._background = BACKGROUND
         self.state = None
-
-        self._main_sizer = None
-
         self.set_state()
         self._do_layout()
@@ -41,12 +39,40 @@
         return False
 
+    def _set_data(self, data=None):
+        """
+        Update the GUI to reflect new data that has been loaded in
+
+        :param data: The data that has been loaded
+        """
+        self.data_name_box.SetValue(str(data.name))
+        if self._manager is not None:
+            self._manager.show_data(data=data, reset=True)
+
+
     def _do_layout(self):
         """
         Draw the window content
         """
-        self._main_sizer = wx.BoxSizer(wx.HORIZONTAL)
-        txt = wx.StaticText(self, id=wx.NewId(), label="TODO: Add GUI",
-            style=wx.ALIGN_CENTRE_HORIZONTAL)
-        self._main_sizer.Add(txt, 1, wx.EXPAND)
-        self.SetSizer(self._main_sizer)
-        self.SetAutoLayout(True)
+        vbox = wx.GridBagSizer(0,0)
+
+        # I(q) data box
+        databox = wx.StaticBox(self, -1, "I(q) data source")
+
+        pars_sizer = wx.GridBagSizer(5, 5)
+
+        box_sizer1 = wx.StaticBoxSizer(databox, wx.VERTICAL)
+        box_sizer1.SetMinSize((350, 50))
+
+        file_name_label = wx.StaticText(self, -1, "Name:")
+        pars_sizer.Add(file_name_label, (0, 0), (1, 1),
+            wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
+
+        self.data_name_box = OutputTextCtrl(self, -1, size=(350,20))
+        pars_sizer.Add(self.data_name_box, (0, 1), (1, 1),
+            wx.EXPAND | wx.LEFT | wx.RIGHT | wx.ADJUST_MINSIZE, 15)
+
+        box_sizer1.Add(pars_sizer, 0, wx.EXPAND)
+        vbox.Add(box_sizer1, (0, 0), (1, 1),
+            wx.LEFT | wx.RIGHT | wx.EXPAND | wx.ADJUST_MINSIZE | wx.TOP, 5)
+
+        self.SetSizer(vbox)
