Index: sasview/local_config.py
===================================================================
--- sasview/local_config.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
+++ sasview/local_config.py	(revision 96d293da534f3cca2a15c8160c381c865d9f7239)
@@ -90,8 +90,9 @@
 GUIFRAME_WIDTH = 1150
 GUIFRAME_HEIGHT = 840
-PLUGIN_STATE_EXTENSIONS = ['.fitv', '.inv', '.prv']
+PLUGIN_STATE_EXTENSIONS = ['.fitv', '.inv', '.prv', '.cor']
 PLUGINS_WLIST = ['Fitting files (*.fitv)|*.fitv',
                  'Invariant files (*.inv)|*.inv',
-                 'P(r) files (*.prv)|*.prv']
+                 'P(r) files (*.prv)|*.prv',
+                 'Corfunc files (*.cor)|*.cor']
 PLOPANEL_WIDTH = 415
 PLOPANEL_HEIGTH = 370
Index: src/sas/sasgui/perspectives/corfunc/corfunc.py
===================================================================
--- src/sas/sasgui/perspectives/corfunc/corfunc.py	(revision 5a525e10b628727086fa823b3a72aa53f50611a0)
+++ src/sas/sasgui/perspectives/corfunc/corfunc.py	(revision 96d293da534f3cca2a15c8160c381c865d9f7239)
@@ -33,6 +33,4 @@
         self.state_reader = Reader(self.set_state)
         self._extensions = '.cor'
-        l = Loader()
-        l.associate_file_reader('.cor', self.state_reader)
 
     def get_panels(self, parent):
@@ -48,4 +46,7 @@
         self._frame_set_helper()
         self.perspective.append(self.corfunc_panel.window_name)
+
+        l = Loader()
+        l.associate_file_reader('.cor', self.state_reader)
 
         return [self.corfunc_panel]
@@ -82,5 +83,12 @@
         Callback for CorfuncState reader. Called when a .cor file is loaded
         """
-        self.corfunc_panel.set_state(state=state, data=datainfo)
+        if isinstance(datainfo, list):
+            data = datainfo[0]
+        else:
+            data = datainfo
+        self.corfunc_panel.set_state(state=state, data=data)
+        self.on_perspective(event=None)
+        data = self.parent.create_gui_data(data, None)
+        self.parent.add_data({ data.id: data })
 
     def set_data(self, data_list=None):
Index: src/sas/sasgui/perspectives/corfunc/corfunc_panel.py
===================================================================
--- src/sas/sasgui/perspectives/corfunc/corfunc_panel.py	(revision 204f6281f19b7b45418b031066db5c5ec846cef1)
+++ src/sas/sasgui/perspectives/corfunc/corfunc_panel.py	(revision 96d293da534f3cca2a15c8160c381c865d9f7239)
@@ -1,8 +1,10 @@
 import wx
 import sys
+import os
 import numpy as np
 from wx.lib.scrolledpanel import ScrolledPanel
 from sas.sasgui.guiframe.events import PlotQrangeEvent
 from sas.sasgui.guiframe.events import StatusEvent
+from sas.sasgui.guiframe.events import PanelOnFocusEvent
 from sas.sasgui.guiframe.panel_base import PanelBase
 from sas.sasgui.guiframe.utils import check_float
@@ -299,4 +301,41 @@
         doc_viewer = DocumentationWindow(self, -1, tree_location, "",
                                           "Correlation Function Help")
+
+    def get_save_flag(self):
+        if self._data is not None:
+            return True
+        return False
+
+    def on_set_focus(self, event=None):
+        if self._manager.parent is not None:
+            wx.PostEvent(self._manager.parent, PanelOnFocusEvent(panel=self))
+
+    def on_save(self, event=None):
+        """
+        Save corfunc state into a file
+        """
+        # Ask the user the location of the file to write to.
+        path = None
+        default_save_location = os.getcwd()
+        if self._manager.parent != None:
+            default_save_location = self._manager.parent.get_save_location()
+
+        dlg = wx.FileDialog(self, "Choose a file",
+                            default_save_location, \
+                            self.window_caption, "*.cor", wx.SAVE)
+        if dlg.ShowModal() == wx.ID_OK:
+            path = dlg.GetPath()
+            default_save_location = os.path.dirname(path)
+            if self._manager.parent != None:
+                self._manager.parent._default_save_location = default_save_location
+        else:
+            return None
+
+        dlg.Destroy()
+        # MAC always needs the extension for saving
+        extens = ".cor"
+        # Make sure the ext included in the file name
+        f_name = os.path.splitext(path)[0] + extens
+        self._manager.state_reader.write(f_name, self._data, self.get_state())
 
     def save_project(self, doc=None):
Index: src/sas/sasgui/perspectives/corfunc/corfunc_state.py
===================================================================
--- src/sas/sasgui/perspectives/corfunc/corfunc_state.py	(revision caeb3829c1512d0cacbd5fa7103bd46f2ec391d0)
+++ src/sas/sasgui/perspectives/corfunc/corfunc_state.py	(revision 96d293da534f3cca2a15c8160c381c865d9f7239)
@@ -10,4 +10,5 @@
 from sas.sasgui.guiframe.gui_style import GUIFRAME_ID
 from sas.sasgui.guiframe.dataFitting import Data1D
+from sas.sascalc.dataloader.data_info import Data1D as LoaderData1D
 from sas.sascalc.dataloader.loader import Loader
 
@@ -250,5 +251,5 @@
     type_name = "Corfunc"
 
-    type = ["Invariant file (*.inv)|*.inv",
+    type = ["Corfunc file (*.cor)|*.cor",
             "SASView file (*.svs)|*.svs"]
 
@@ -312,6 +313,6 @@
         if datainfo is None:
             datainfo = Data1D(x=[], y=[])
-        elif not issubclass(datainfo.__class__, Data1D):
-            msg = ("The CanSAS writer expects a Data1D instance. {} was ",
+        elif not (isinstance(datainfo, Data1D) or isinstance(datainfo, LoaderData1D)):
+            msg = ("The CanSAS writer expects a Data1D instance. {} was "
                 "provided").format(datainfo.__class__.__name__)
             raise RuntimeError, msg
