Index: src/sas/sasgui/perspectives/fitting/basepage.py
===================================================================
--- src/sas/sasgui/perspectives/fitting/basepage.py	(revision a1b8fee73528559155793dd74cda07d0c32e9d72)
+++ src/sas/sasgui/perspectives/fitting/basepage.py	(revision b76e65abd61ba91ec2f10fe99c1e0df6f102becb)
@@ -2929,4 +2929,39 @@
             return False
 
+
+    def _get_copy_params_details(self):
+        """
+        Combines polydisperse parameters with self.parameters so that they can
+        be written to the clipboard (for Excel or LaTeX). Also returns a list of
+        the names of parameters that have been fitted
+
+        :returns: all_params - A list of all parameters, in the format of 
+        self.parameters
+        :returns: fitted_par_names - A list of the names of parameters that have
+        been fitted
+        """
+        # Names of params that are being fitted
+        fitted_par_names = [param[1] for param in self.param_toFit]
+        # Names of params with associated polydispersity
+        disp_params = [param[1].split('.')[0] for param in self.fittable_param]
+
+        # Create array of all parameters
+        all_params = copy.copy(self.parameters)
+        for param in self.parameters:
+            if param[1] in disp_params:
+                # Polydisperse params aren't in self.parameters, so need adding
+                # to all_params
+                name = param[1] + ".width"
+                index = all_params.index(param) + 1
+                to_insert = []
+                if name in fitted_par_names:
+                    # Param is fitted, so already has a param list in self.param_toFit
+                    to_insert = self.param_toFit[fitted_par_names.index(name)]
+                else:
+                    # Param isn't fitted, so mockup a param list
+                    to_insert = [None, name, self.model.getParam(name), None, None]
+                all_params.insert(index, to_insert)
+        return all_params, fitted_par_names
+
     def get_copy_excel(self):
         """
@@ -2942,30 +2977,43 @@
         Get the string copies of the param names and values in the tap
         """
+        if not self.parameters:
+            # Do nothing if parameters doesn't exist
+            return False
+
         content = ''
-
         crlf = chr(13) + chr(10)
         tab = chr(9)
 
-        # Do it if params exist
-        if self.parameters:
-
-            for param in self.parameters:
-                content += param[1]  # parameter name
+        all_params, fitted_param_names = self._get_copy_params_details()
+
+        # Construct row of parameter names
+        for param in all_params:
+            name = param[1] # Parameter name
+            content += name
+            content += tab
+            if name in fitted_param_names:
+                # Only print errors for fitted parameters
+                content += name + "_err"
                 content += tab
-                content += param[1] + "_err"
-                content += tab
-
-            content += crlf
-
-            # row of values and errors...
-            for param in self.parameters:
-                content += param[2].GetValue()  # value
-                content += tab
-                content += param[4].GetValue()  # error
-                content += tab
-
-            return content
-        else:
-            return False
+
+        content += crlf
+
+        # Construct row of parameter values and errors
+        for param in all_params:
+            value = param[2]
+            if hasattr(value, 'GetValue'):
+                # param[2] is a text box
+                value = value.GetValue()
+            else:
+                # param[2] is a float (from our self._get_copy_params_details)
+                value = str(value)
+            content += value
+            content += tab
+            if param[1] in fitted_param_names:
+                # Only print errors for fitted parameters
+                content += param[4].GetValue()
+                content += tab 
+
+        return content
 
     def get_copy_latex(self):
@@ -2982,4 +3030,8 @@
         Get the string copies of the param names and values in the tap
         """
+        if not self.parameters:
+            # Do nothing if self.parameters doesn't exist
+            return False
+        
         content = '\\begin{table}'
         content += '\\begin{tabular}[h]'
@@ -2988,37 +3040,49 @@
         tab = chr(9)
 
-        # Do it if params exist
-        if self.parameters:
-
-            content += '{|'
-            for param in self.parameters:
-                content += 'l|l|'
-            content += '}\hline'
-            content += crlf
-
-            for index, param in enumerate(self.parameters):
-                content += param[1].replace('_', '\_')  # parameter name
+        all_params, fitted_param_names = self._get_copy_params_details()
+
+        content += '{|'
+        for param in all_params:
+            content += 'l|l|'
+        content += '}\hline'
+        content += crlf
+
+        # Construct row of parameter names
+        for index, param in enumerate(all_params):
+            name = param[1] # Parameter name
+            content += name.replace('_', '\_')  # Escape underscores
+            if name in fitted_param_names:
+                # Only print errors for fitted parameters
                 content += ' & '
-                content += param[1].replace('_', '\_') + "\_err"
-                if index < len(self.parameters) - 1:
-                    content += ' & '
-            content += '\\\\ \\hline'
-            content += crlf
-
-            # row of values and errors...
-            for index, param in enumerate(self.parameters):
-                content += param[2].GetValue()  # parameter value
+                content += name.replace('_', '\_') + "\_err"
+            if index < len(all_params) - 1:
                 content += ' & '
-                content += param[4].GetValue()  # parameter error
-                if index < len(self.parameters) - 1:
-                    content += ' & '
-            content += '\\\\ \\hline'
-            content += crlf
-
-            content += '\\end{tabular}'
-            content += '\\end{table}'
-            return content
-        else:
-            return False
+
+        content += '\\\\ \\hline'
+        content += crlf
+
+        # Construct row of values and errors
+        for index, param in enumerate(all_params):
+            value = param[2]
+            if hasattr(value, "GetValue"):
+                # value is a text box
+                value = value.GetValue()
+            else:
+                # value is a float (from self._get_copy_params_details)
+                value = str(value)
+            content += value
+            if param[1] in fitted_param_names:
+                # Only print errors for fitted params
+                content += ' & '
+                content += param[4].GetValue()
+            if index < len(all_params) - 1:
+                content += ' & '
+        
+        content += '\\\\ \\hline'
+        content += crlf
+        content += '\\end{tabular}'
+        content += '\\end{table}'
+
+        return content
 
     def set_clipboard(self, content=None):
Index: src/sas/sasgui/perspectives/fitting/fitpage.py
===================================================================
--- src/sas/sasgui/perspectives/fitting/fitpage.py	(revision 9a5097cd1c76689d1f997b85ba43d12a95d8f243)
+++ src/sas/sasgui/perspectives/fitting/fitpage.py	(revision 0b6f83c0e7fff116d33509fda7ae72742e228d86)
@@ -289,5 +289,5 @@
         self.btFitHelp.SetToolTipString("General fitting help.")
         self.btFitHelp.Bind(wx.EVT_BUTTON, self._onFitHelp)
-        
+
         # Resolution Smearing Help button (for now use same technique as
         # used for dI help to get tiniest possible button that works
@@ -303,5 +303,5 @@
         self.btSmearHelp.SetToolTipString("Resolution smearing help.")
         self.btSmearHelp.Bind(wx.EVT_BUTTON, self._onSmearHelp)
-        
+
         # textcntrl for custom resolution
         self.smear_pinhole_percent = ModelTextCtrl(self, wx.ID_ANY,
@@ -564,5 +564,5 @@
         sizer.Add(self.draw_button, 0, 0)
         sizer.Add((-1, 5))
-        
+
         sizer.Add(self.tcChi, 0, 0)
         sizer.Add(self.Npts_fit, 0, 0)
@@ -570,5 +570,5 @@
         sizer.Add(self.btFit, 0, 0)
         sizer.Add(self.btFitHelp, 0, 0)
-        
+
         boxsizer_range.Add(sizer_chi2)
         boxsizer_range.Add(sizer)
@@ -2181,4 +2181,7 @@
         self.save_current_state()
 
+        if not self.is_mac:
+            self.Layout()
+            self.Refresh()
         # plot model ( when drawing, do not update chisqr value again)
         self._draw_model(update_chisqr=False, source='fit')
@@ -2775,5 +2778,5 @@
             else:
                 return cmp(a.lower(), b.lower())
-        
+
         # keys obtained now from ordered dict, so commenting alphabetical
         # ordering keys.sort(custom_compare)
Index: src/sas/sasgui/perspectives/fitting/fitpanel.py
===================================================================
--- src/sas/sasgui/perspectives/fitting/fitpanel.py	(revision 67b0a99ce9f69a9dfef035e8e4a06588c9f1602f)
+++ src/sas/sasgui/perspectives/fitting/fitpanel.py	(revision 6f9abd39b6d696038bf298ef8e8b277439a2cb9c)
@@ -501,8 +501,13 @@
             if data is None:
                 return None
+        focused_page = self.GetPage(self.GetSelection())
         for page in self.opened_pages.values():
             # check if the selected data existing in the fitpanel
             pos = self.GetPageIndex(page)
             if not check_data_validity(page.get_data()) and not page.batch_on:
+                if page.model is not None and page != focused_page:
+                    # Page has an active theory and is in background - don't
+                    # send data here.
+                    continue
                 # make sure data get placed in 1D empty tab if data is 1D
                 # else data get place on 2D tab empty tab
Index: src/sas/sasgui/perspectives/fitting/fitting.py
===================================================================
--- src/sas/sasgui/perspectives/fitting/fitting.py	(revision 2d9526dfda3bdfe3c9159ab7d9db8399b4a00848)
+++ src/sas/sasgui/perspectives/fitting/fitting.py	(revision 2d9526dfda3bdfe3c9159ab7d9db8399b4a00848)
@@ -1326,5 +1326,5 @@
 
                 is_data2d = issubclass(data.__class__, Data2D)
-                #check consistency of arrays
+                # Check consistency of arrays
                 if not is_data2d:
                     if len(res.theory) == len(res.index[res.index]) and \
@@ -1337,8 +1337,14 @@
                     new_theory[res.index == False] = np.nan
                     correct_result = True
-                #get all fittable parameters of the current model
+                # Get all fittable parameters of the current model
                 param_list = model.getParamList()
                 for param in model.getDispParamList():
-                    if not model.is_fittable(param) and \
+                    if '.' in param and param in param_list:
+                        # Ensure polydispersity results are displayed
+                        p1, p2 = param.split('.')
+                        if not model.is_fittable(p1) and not (p2 == 'width' and param in res.param_list)\
+                            and param in param_list:
+                            param_list.remove(param)
+                    elif not model.is_fittable(param) and \
                         param in param_list:
                         param_list.remove(param)
@@ -1361,9 +1367,9 @@
                     batch_outputs["Chi2"].append(ERROR)
                     for param in param_list:
-                        # save value of  fixed parameters
+                        # Save value of  fixed parameters
                         if param not in res.param_list:
                             batch_outputs[str(param)].append(ERROR)
                         else:
-                            #save only fitted values
+                            # Save only fitted values
                             batch_outputs[param].append(ERROR)
                             batch_inputs["error on %s" % str(param)].append(ERROR)
Index: test/corfunc/test/utest_corfunc.py
===================================================================
--- test/corfunc/test/utest_corfunc.py	(revision 253eb6c67e1e6610e872a17727530be787222114)
+++ test/corfunc/test/utest_corfunc.py	(revision 968d67eb06632439a618b7f827d0677fd83f2f44)
@@ -17,4 +17,5 @@
             upperq=(0.15, 0.24))
         self.extrapolation = None
+        self.transformation = None
 
     def extrapolate(self):
