Index: src/sas/qtgui/Perspectives/PrInversion/PrInversionPerspective.py
===================================================================
--- src/sas/qtgui/Perspectives/PrInversion/PrInversionPerspective.py	(revision 406f420c8b758f2de3953a9edfc3a63d56fc25bd)
+++ src/sas/qtgui/Perspectives/PrInversion/PrInversionPerspective.py	(revision bde1a6b94f658489f375a768964ba8ea946b571c)
@@ -8,5 +8,11 @@
 # pr inversion gui elements
 from PrInversionUtils import WIDGETS
+import UI.TabbedPrInversionUI
 from UI.TabbedPrInversionUI import Ui_PrInversion
+
+# pr inversion calculation elements
+from sas.sascalc.pr.invertor import Invertor
+from sas.sasgui.perspectives.pr import pr_thread as pr_thread
+
 
 class PrInversionWindow(QtGui.QTabWidget, Ui_PrInversion):
@@ -27,46 +33,32 @@
         self._helpView = QtWebKit.QWebView()
 
+        self.communicate = GuiUtils.Communicate()
+
+        # The window should not close
+        self._allow_close = False
+
+        # is there data
+        self._has_data = False
+
+        # Current data object in view
+        self._data_index = 0
+        # list mapping data to p(r) calculation
+        self._data_list = []
         if not isinstance(data, list):
             data = [data]
-        self._data = data
-
-        # The tabs need to be closeable
-        self._allow_close = False
-
-        # Set initial values
-        self._data_index = 0
-        self._path = ""
-        self._background = 0.0
-        self._qmin = 0.0
-        self._qmax = 1.0
-        self._slit_height = 0.0
-        self._slit_width = 0.0
-        self._terms = 10
-        self._regularization = 0.0001
-        self._max_distance = 140
-        self._bgd_input = False
-        self._terms_button = False
-        self._reg_button = False
-        self._terms_label = ""
-        self._reg_label = ""
-        # Set results
-        self._rg = 0.0
-        self._i_0 = 0.0
-        self._comp_time = 0.0
-        self._chi_dof = 0.0
-        self._oscillations = 0.0
-        self._pos_fraction = 0.0
-        self._sigma_pos_fraction = 0.0
-
-        # Let's choose the Standard Item Model.
+        for datum in data:
+            self._data_list.append({datum : None})
+
+        # p(r) calculator
+        self._calculator = Invertor()
+
         self.model = QtGui.QStandardItemModel(self)
+        self.mapper = QtGui.QDataWidgetMapper(self)
+        # Link user interactions with methods
+        self.setupLinks()
+        # Set values
+        self.setupModel()
         # Set up the Widget Map
         self.setupMapper()
-        # Set values
-        self.setupModel()
-        # Link user interactions with methods
-        self.setupLinks()
-
-        self.communicate = GuiUtils.Communicate()
 
     ######################################################################
@@ -74,5 +66,5 @@
 
     def allowBatch(self):
-        return True
+        return False
 
     def setClosable(self, value=True):
@@ -100,6 +92,12 @@
 
     def setupLinks(self):
-        self.dataList.currentIndexChanged.connect(self.displayChange)
-        self.calculateButton.clicked.connect(self.calculatePrInversion)
+        """Connect the use controls to their appropriate methods"""
+        self.enableButtons()
+        self.checkBgdClicked(False)
+        # TODO: enable the drop down box once batch is working
+        self.dataList.setEnabled(False)
+        # TODO: enable displayChange once batch is working
+        # self.dataList.currentIndexChanged.connect(self.displayChange)
+        self.calculateButton.clicked.connect(self._calculation)
         self.statusButton.clicked.connect(self.status)
         self.helpButton.clicked.connect(self.help)
@@ -107,9 +105,8 @@
         self.manualBgd.toggled.connect(self.toggleBgd)
         self.explorerButton.clicked.connect(self.openExplorerWindow)
-        pass
+        self.model.itemChanged.connect(self.model_changed)
 
     def setupMapper(self):
         # Set up the mapper.
-        self.mapper = QtGui.QDataWidgetMapper(self)
         self.mapper.setOrientation(QtCore.Qt.Vertical)
         self.mapper.setModel(self.model)
@@ -118,5 +115,5 @@
         self.mapper.addMapping(self.dataList, WIDGETS.W_FILENAME)
         # Background
-        self.mapper.addMapping(self.backgroundInput, WIDGETS.W_BACKGROUND)
+        self.mapper.addMapping(self.backgroundInput, WIDGETS.W_BACKGROUND_INPUT)
         self.mapper.addMapping(self.estimateBgd, WIDGETS.W_ESTIMATE)
         self.mapper.addMapping(self.manualBgd, WIDGETS.W_MANUAL_INPUT)
@@ -144,5 +141,5 @@
         self.mapper.addMapping(self.rgValue, WIDGETS.W_RG)
         self.mapper.addMapping(self.iQ0Value, WIDGETS.W_I_ZERO)
-        self.mapper.addMapping(self.backgroundValue, WIDGETS.W_BACKGROUND)
+        self.mapper.addMapping(self.backgroundValue, WIDGETS.W_BACKGROUND_OUTPUT)
         self.mapper.addMapping(self.computationTimeValue, WIDGETS.W_COMP_TIME)
         self.mapper.addMapping(self.chiDofValue, WIDGETS.W_CHI_SQUARED)
@@ -159,107 +156,89 @@
         self.mapper.toFirst()
 
+    def setupModel(self):
+        """
+        Update boxes with initial values
+        """
+        item = QtGui.QStandardItem("")
+        self.model.setItem(WIDGETS.W_FILENAME, item)
+        item = QtGui.QStandardItem('0.0')
+        self.model.setItem(WIDGETS.W_BACKGROUND_INPUT, item)
+        item = QtGui.QStandardItem("")
+        self.model.setItem(WIDGETS.W_QMIN, item)
+        item = QtGui.QStandardItem("")
+        self.model.setItem(WIDGETS.W_QMAX, item)
+        item = QtGui.QStandardItem("")
+        self.model.setItem(WIDGETS.W_SLIT_WIDTH, item)
+        item = QtGui.QStandardItem("")
+        self.model.setItem(WIDGETS.W_SLIT_HEIGHT, item)
+        item = QtGui.QStandardItem("10")
+        self.model.setItem(WIDGETS.W_NO_TERMS, item)
+        item = QtGui.QStandardItem("0.0001")
+        self.model.setItem(WIDGETS.W_REGULARIZATION, item)
+        item = QtGui.QStandardItem("140.0")
+        self.model.setItem(WIDGETS.W_MAX_DIST, item)
+        item = QtGui.QStandardItem("")
+        self.model.setItem(WIDGETS.W_RG, item)
+        item = QtGui.QStandardItem("")
+        self.model.setItem(WIDGETS.W_I_ZERO, item)
+        item = QtGui.QStandardItem("")
+        self.model.setItem(WIDGETS.W_BACKGROUND_OUTPUT, item)
+        item = QtGui.QStandardItem("")
+        self.model.setItem(WIDGETS.W_COMP_TIME, item)
+        item = QtGui.QStandardItem("")
+        self.model.setItem(WIDGETS.W_CHI_SQUARED, item)
+        item = QtGui.QStandardItem("")
+        self.model.setItem(WIDGETS.W_OSCILLATION, item)
+        item = QtGui.QStandardItem("")
+        self.model.setItem(WIDGETS.W_POS_FRACTION, item)
+        item = QtGui.QStandardItem("")
+        self.model.setItem(WIDGETS.W_SIGMA_POS_FRACTION, item)
+
     ######################################################################
     # Methods for updating GUI
 
-    def setupModel(self):
-        """
-        Update boxes with latest values
-        """
-        item = QtGui.QStandardItem(self._path)
-        self.model.setItem(WIDGETS.W_FILENAME, item)
-        item = QtGui.QStandardItem(self._background)
-        self.model.setItem(WIDGETS.W_BACKGROUND, item)
-        self.checkBgdClicked(self._bgd_input)
-        item = QtGui.QStandardItem(self._qmin)
-        self.model.setItem(WIDGETS.W_QMIN, item)
-        item = QtGui.QStandardItem(self._qmax)
-        self.model.setItem(WIDGETS.W_QMAX, item)
-        item = QtGui.QStandardItem(self._slit_width)
-        self.model.setItem(WIDGETS.W_SLIT_WIDTH, item)
-        item = QtGui.QStandardItem(self._slit_height)
-        self.model.setItem(WIDGETS.W_SLIT_HEIGHT, item)
-        item = QtGui.QStandardItem(self._terms)
-        self.model.setItem(WIDGETS.W_NO_TERMS, item)
-        item = QtGui.QStandardItem(self._regularization)
-        self.model.setItem(WIDGETS.W_REGULARIZATION, item)
-        item = QtGui.QStandardItem(self._max_distance)
-        self.model.setItem(WIDGETS.W_MAX_DIST, item)
-        item = QtGui.QStandardItem(self._rg)
-        self.model.setItem(WIDGETS.W_RG, item)
-        item = QtGui.QStandardItem(self._i_0)
-        self.model.setItem(WIDGETS.W_I_ZERO, item)
-        item = QtGui.QStandardItem(self._background)
-        self.model.setItem(WIDGETS.W_BACKGROUND, item)
-        item = QtGui.QStandardItem(self._comp_time)
-        self.model.setItem(WIDGETS.W_COMP_TIME, item)
-        item = QtGui.QStandardItem(self._chi_dof)
-        self.model.setItem(WIDGETS.W_CHI_SQUARED, item)
-        item = QtGui.QStandardItem(self._oscillations)
-        self.model.setItem(WIDGETS.W_OSCILLATION, item)
-        item = QtGui.QStandardItem(self._pos_fraction)
-        self.model.setItem(WIDGETS.W_POS_FRACTION, item)
-        item = QtGui.QStandardItem(self._sigma_pos_fraction)
-        self.model.setItem(WIDGETS.W_SIGMA_POS_FRACTION, item)
-        self.enableButtons()
-
     def enableButtons(self):
         """
-        Disable buttons when no data present, else enable them
-        """
-        if self._path == "" and len(self._data) == 1:
+        Enable buttons when data is present, else disable them
+        """
+        if self._has_data:
+            self.statusButton.setEnabled(True)
+            self.explorerButton.setEnabled(True)
+            self.calculateButton.setEnabled(True)
+        else:
             self.calculateButton.setEnabled(False)
             self.explorerButton.setEnabled(False)
             self.statusButton.setEnabled(False)
-        else:
-            self.statusButton.setEnabled(True)
-            self.explorerButton.setEnabled(True)
-            self.calculateButton.setEnabled(True)
-
-    def reDraw(self):
-        """
-        Redraws the window with any and all necessary updates.
-        """
-        self.populateDataComboBox()
-        self.dataList.setCurrentIndex(self._data_index)
-        self._get_data_from_data_set()
-
-    def populateDataComboBox(self):
-        string_list = QtCore.QStringList()
-        for item in self._path:
-            qt_item = QtCore.QString.fromUtf8(item)
-            string_list.append(qt_item)
-        self.dataList.addItems(string_list)
-
-    def _addPr(self, data_list):
-        """
-        Add a new data set to the P(r) window and updates as needed.
-        :param data_list: List of data sent from the data manager
-        """
-        assert data_list is not None
-        for data in data_list:
-            # TODO: Get get object via GuiUtils
-            self._data.append(None)
-        self.reDraw()
-
-    def _get_data_from_data_set(self):
-        data = self._data[self._data_index]
-        # TODO: Get all items from data
-        # self._qmin = data.qmin
-        # self._qmax = data.qmax
-        self.setupModel()
+
+    def populateDataComboBox(self, filename):
+        """
+        Append a new file name to the data combobox
+        :param data: Data1D object
+        """
+        qt_item = QtCore.QString.fromUtf8(filename)
+        self.dataList.addItem(qt_item)
 
     ######################################################################
     # GUI Actions
 
-    def calculatePrInversion(self):
+    def _calculation(self):
         """
         Calculate the P(r) for every data set in the data list
         """
+        # TODO: Run the calculations
         pass
 
+    def model_changed(self):
+        """Update the values when user makes changes"""
+        if not self.mapper:
+            return
+        self.mapper.toFirst()
+        # TODO: Update plots, etc.
+
     def status(self):
         """
         Show the status of the calculations
         """
+        # TODO: Status - is this even needed/wanted?
         pass
 
@@ -281,9 +260,7 @@
             self.manualBgd.setChecked(True)
             self.toggleBgd(self.manualBgd)
-            self._bgd_input = True
         else:
             self.estimateBgd.setChecked(True)
             self.toggleBgd(self.estimateBgd)
-            self._bgd_input = False
 
     def toggleBgd(self, item=None):
@@ -307,11 +284,4 @@
         pass
 
-    def displayChange(self):
-        """
-        Display the values of the data set selected from the data combo box
-        """
-        self._data_index = self.dataList.currentIndex()
-        self.setupModel()
-
     ######################################################################
     # Response Actions
@@ -333,3 +303,24 @@
             raise AttributeError, msg
 
-        self._addPr(data_item)
+        for data in data_item:
+            data_object = GuiUtils.dataFromItem(data)
+            self._data_list.append({data_object: None})
+            self._has_data = True
+            self.enableButtons()
+            self.populateDataComboBox(data_object.filename)
+            self.model.setItem(WIDGETS.W_QMIN,
+                               QtGui.QStandardItem(str(data_object.x.min())))
+            self.model.setItem(WIDGETS.W_QMAX,
+                               QtGui.QStandardItem(str(data_object.x.max())))
+
+            # TODO: Get value estimates
+            no_terms, alpha, _ = self._calculator.estimate_numterms(
+                self._calculator)
+            self.noOfTermsSuggestionButton.setText(
+                QtCore.QString(str(no_terms)))
+            self.noOfTermsSuggestionButton.setEnabled(True)
+            self.regConstantSuggestionButton.setText(QtCore.QString(str(alpha)))
+            self.regConstantSuggestionButton.setEnabled(True)
+
+            # TODO: Only load in the 1st data until batch mode is working
+            break
Index: src/sas/qtgui/Perspectives/PrInversion/PrInversionUtils.py
===================================================================
--- src/sas/qtgui/Perspectives/PrInversion/PrInversionUtils.py	(revision e32b120ba1336ca42c470a629176b3acb1ad62d0)
+++ src/sas/qtgui/Perspectives/PrInversion/PrInversionUtils.py	(revision bde1a6b94f658489f375a768964ba8ea946b571c)
@@ -4,5 +4,5 @@
 
 WIDGETS = enum( 'W_FILENAME',               #0
-                'W_BACKGROUND',             #1
+                'W_BACKGROUND_INPUT',             #1
                 'W_ESTIMATE',               #2
                 'W_MANUAL_INPUT',           #3
@@ -20,5 +20,5 @@
                 'W_RG',
                 'W_I_ZERO',
-                'W_BACKGROUND',
+                'W_BACKGROUND_OUTPUT',
                 'W_COMP_TIME',
                 'W_CHI_SQUARED',
Index: src/sas/qtgui/Perspectives/PrInversion/UI/TabbedPrInversionUI.ui
===================================================================
--- src/sas/qtgui/Perspectives/PrInversion/UI/TabbedPrInversionUI.ui	(revision 8045572f06640452d0f8823ee84faf6b072bd0bc)
+++ src/sas/qtgui/Perspectives/PrInversion/UI/TabbedPrInversionUI.ui	(revision bde1a6b94f658489f375a768964ba8ea946b571c)
@@ -131,5 +131,5 @@
       <layout class="QVBoxLayout" name="verticalLayout_6" stretch="0,1,1,0">
        <item>
-        <widget class="QGroupBox" name="groupBox">
+        <widget class="QGroupBox" name="dataSourceGroupBox">
          <property name="title">
           <string>I(q) data source</string>
@@ -197,5 +197,5 @@
        </item>
        <item>
-        <widget class="QGroupBox" name="groupBox_3">
+        <widget class="QGroupBox" name="qRangeGroupBox">
          <property name="title">
           <string>Total Q range</string>
@@ -254,5 +254,5 @@
        </item>
        <item>
-        <widget class="QGroupBox" name="groupBox_2">
+        <widget class="QGroupBox" name="slitParamsGroupBox">
          <property name="title">
           <string>Slit Parameters</string>
@@ -311,5 +311,5 @@
        </item>
        <item>
-        <widget class="QGroupBox" name="groupBox_5">
+        <widget class="QGroupBox" name="paramGroupBox">
          <property name="sizePolicy">
           <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
@@ -410,5 +410,5 @@
       <layout class="QGridLayout" name="gridLayout_6">
        <item row="0" column="0">
-        <widget class="QGroupBox" name="groupBox_4">
+        <widget class="QGroupBox" name="outputsGroupBox">
          <property name="title">
           <string>Outputs</string>
