Index: src/sas/sasgui/perspectives/corfunc/corfunc.py
===================================================================
--- src/sas/sasgui/perspectives/corfunc/corfunc.py	(revision 9c90cf398fa23af60dae518398661c8afcd6c774)
+++ src/sas/sasgui/perspectives/corfunc/corfunc.py	(revision 3b8efecd51cd7dcd542c1acb2b003aa48d3951db)
@@ -5,4 +5,5 @@
 import sys
 import logging
+import copy
 from sas.sasgui.guiframe.plugin_base import PluginBase
 from sas.sasgui.guiframe.gui_manager import MDIFrame
@@ -18,6 +19,7 @@
 
 
-GROUP_ID_IQ_DATA = r"$I_{obs}(q)$"
+GROUP_ID_IQ_DATA = r"$I(q)$"
 IQ_DATA_LABEL = r"$I_{obs}(q)$"
+IQ_EXTRAPOLATED_DATA_LABEL = r"$I_{extrap}(q)$"
 
 
@@ -117,5 +119,5 @@
                         info='error'))
 
-    def show_data(self, path=None, data=None, reset=False):
+    def show_data(self, data, label, path=None, reset=False):
         """
         Show data read from a file
@@ -125,15 +127,15 @@
         :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 = Data1D(data.x, data.y, dy=data.dy)
+
+        if label == IQ_DATA_LABEL or label == IQ_EXTRAPOLATED_DATA_LABEL:
+            new_plot.xaxis("\\rm{Q}", 'A^{-1}')
+            new_plot.yaxis("\\rm{Intensity} ", "cm^{-1}")
+
         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.id = label
+        new_plot.name = label
         new_plot.interactive = True
         new_plot.group_id = GROUP_ID_IQ_DATA
-        new_plot.id = self.data_id
         new_plot.title = "I(q)"
         # Show data on a linear scale
Index: src/sas/sasgui/perspectives/corfunc/corfunc_panel.py
===================================================================
--- src/sas/sasgui/perspectives/corfunc/corfunc_panel.py	(revision b564ea28db39ecabf52c988a0732542db49dc322)
+++ src/sas/sasgui/perspectives/corfunc/corfunc_panel.py	(revision 3b8efecd51cd7dcd542c1acb2b003aa48d3951db)
@@ -6,8 +6,11 @@
 from sas.sasgui.guiframe.panel_base import PanelBase
 from sas.sasgui.guiframe.utils import check_float
+from sas.sasgui.guiframe.dataFitting import Data1D
 from sas.sasgui.perspectives.invariant.invariant_widgets import OutputTextCtrl
 from sas.sasgui.perspectives.invariant.invariant_widgets import InvTextCtrl
 from sas.sasgui.perspectives.fitting.basepage import ModelTextCtrl
 from sas.sasgui.perspectives.corfunc.corfunc_state import CorfuncState
+import sas.sasgui.perspectives.corfunc.corfunc
+from sas.sascalc.corfunc.corfunc_calculator import CorfuncCalculator
 
 if sys.platform.count("win32") > 0:
@@ -36,4 +39,5 @@
         self._manager = manager
         self._data = data # The data to be analysed
+        self._extrapolated_data = None # The extrapolated data set
         self._data_name_box = None # Text box to show name of file
         self._background_input = None
@@ -52,4 +56,5 @@
         self._qmax1_input.Bind(wx.EVT_TEXT, self._on_enter_input)
         self._qmax2_input.Bind(wx.EVT_TEXT, self._on_enter_input)
+        self._background_input.Bind(wx.EVT_TEXT, self._on_enter_input)
 
     def set_state(self, state=None, data=None):
@@ -67,5 +72,5 @@
         if data is not None:
             self.state.data = data
-        self.set_data(self.state.data, set_qrange=False)
+        self.set_data(data, set_qrange=False)
         if self.state.qmin is not None:
             self.set_qmin(self.state.qmin)
@@ -107,5 +112,6 @@
         self._data = data
         if self._manager is not None:
-            self._manager.show_data(data=data, reset=True)
+            from sas.sasgui.perspectives.corfunc.corfunc import IQ_DATA_LABEL
+            self._manager.show_data(data, IQ_DATA_LABEL, reset=True)
         if set_qrange:
             lower = data.x[-1]*0.05
@@ -118,4 +124,29 @@
     def get_data(self):
         return self._data
+
+    def compute_extrapolation(self, event=None):
+        if self._data is None:
+            msg = "Data must be loaded in order to perform an extrapolation."
+            wx.PostEvent(self.parent.parent, StatusEvent(status=msg))
+            return
+        if not self._validate_inputs:
+            msg = "Invalid Q range entered."
+            wx.PostEvent(self.parent.parent, StatusEvent(status=msg))
+            return
+        calculator = CorfuncCalculator(self._data, self.qmin, self.qmax,
+            background=self.background)
+        self._extrapolated_data = calculator.compute_extrapolation()
+        # TODO: Find way to set xlim and ylim so full range of data can be
+        # plotted
+        maxq = self._data.x.max()
+        mask = self._extrapolated_data.x <= maxq
+        numpts = len(self._extrapolated_data.x[mask]) + 250
+        plot_x = self._extrapolated_data.x[0:numpts]
+        plot_y = self._extrapolated_data.y[0:numpts]
+        to_plot = Data1D(plot_x, plot_y)
+        from sas.sasgui.perspectives.corfunc.corfunc import\
+            IQ_EXTRAPOLATED_DATA_LABEL
+        self._manager.show_data(to_plot, IQ_EXTRAPOLATED_DATA_LABEL)
+
 
     def save_project(self, doc=None):
@@ -165,11 +196,11 @@
         self.qmax = (new_qmax1, new_qmax2)
         self.background = float(self._background_input.GetValue())
-        data_id = self._manager.data_id
-        from sas.sasgui.perspectives.corfunc.corfunc import GROUP_ID_IQ_DATA
+        from sas.sasgui.perspectives.corfunc.corfunc import GROUP_ID_IQ_DATA,\
+            IQ_DATA_LABEL
         group_id = GROUP_ID_IQ_DATA
         if event is not None:
             wx.PostEvent(self._manager.parent, PlotQrangeEvent(
                 ctrl=[self._qmin_input, self._qmax1_input, self._qmax2_input],
-                active=event.GetEventObject(), id=data_id, group_id=group_id,
+                active=event.GetEventObject(), id=IQ_DATA_LABEL, group_id=group_id,
                 leftdown=False))
 
@@ -201,5 +232,5 @@
                 qmin_valid = False
             elif background < 0 or background > self._data.y.max():
-                msg = "background must be positive and less than highest I value"
+                msg = "background must be positive and less than highest I"
                 background_valid = False
         if not qmin_valid:
@@ -365,4 +396,6 @@
         compute_btn = wx.Button(self, wx.NewId(), "Compute Measuments")
 
+        extrapolate_btn.Bind(wx.EVT_BUTTON, self.compute_extrapolation)
+
         controls_sizer.Add(extrapolate_btn, wx.CENTER | wx.EXPAND)
         controls_sizer.Add(transform_btn, wx.CENTER | wx.EXPAND)
