Index: src/sas/qtgui/Perspectives/Fitting/FittingLogic.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingLogic.py	(revision 4ff5e35d00b160c5d5bf2b130c80b30fd4119335)
+++ src/sas/qtgui/Perspectives/Fitting/FittingLogic.py	(revision 180bd545166c0e0d674354e554dec53998b492c6)
@@ -27,4 +27,8 @@
         self._data = value
         self.data_is_loaded = True
+
+    def isLoadedData(self):
+        """ accessor """
+        return self.data_is_loaded
 
     def createDefault1dData(self, interval, tab_id=0):
Index: src/sas/qtgui/Perspectives/Fitting/FittingUtilities.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingUtilities.py	(revision 1970780bb41fa72bf4fc9e750008667278c2f7b8)
+++ src/sas/qtgui/Perspectives/Fitting/FittingUtilities.py	(revision 180bd545166c0e0d674354e554dec53998b492c6)
@@ -231,5 +231,5 @@
         res = (fn - gn) / en
     except ValueError:
-        print "Chi2 calculations: Unmatched lengths %s, %s, %s" % (len(fn), len(gn), len(en))
+        #print "Chi2 calculations: Unmatched lengths %s, %s, %s" % (len(fn), len(gn), len(en))
         return None
 
@@ -248,11 +248,8 @@
 
     # 1d theory from model_thread is only in the range of index
-    if current_data.dy == None or current_data.dy == []:
+    if current_data.dy is None or current_data.dy == []:
         dy = numpy.ones(len(current_data.y))
     else:
-        if weight == None:
-            dy = numpy.ones(len(current_data.y))
-        else:
-            dy = weight
+        dy = weight if weight is not None else numpy.ones(len(current_data.y))
         dy[dy == 0] = 1
     fn = current_data.y[index][0]
@@ -261,12 +258,19 @@
     # build residuals
     residuals = Data1D()
-    try:
+    if len(fn) == len(gn):
         y = (fn - gn)/en
         residuals.y = -y
-    except:
-        msg = "ResidualPlot Error: different # of data points in theory"
-        print msg
+    else:
         y = (fn - gn[index][0]) / en
         residuals.y = y
+
+    #try:
+    #    y = (fn - gn)/en
+    #    residuals.y = -y
+    #except ValueError:
+    #    msg = "ResidualPlot Error: different number of data points in theory"
+    #    print msg
+    #    y = (fn - gn[index][0]) / en
+    #    residuals.y = y
     residuals.x = current_data.x[index][0]
     residuals.dy = numpy.ones(len(residuals.y))
@@ -296,8 +300,5 @@
     fn = current_data.data
     gn = reference_data.data
-    if weight == None:
-        en = current_data.err_data
-    else:
-        en = weight
+    en = current_data.err_data if weight is None else weight
     residuals.data = (fn - gn) / en
     residuals.qx_data = current_data.qx_data
Index: src/sas/qtgui/Perspectives/Fitting/FittingWidget.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision 98b13f724cd11fc1ebdf8d5b128ac77e665d8380)
+++ src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision 180bd545166c0e0d674354e554dec53998b492c6)
@@ -2,5 +2,5 @@
 import json
 import os
-import numpy
+import numpy as np
 from collections import defaultdict
 from itertools import izip
@@ -31,4 +31,5 @@
 from sas.qtgui.Perspectives.Fitting import FittingUtilities
 from SmearingWidget import SmearingWidget
+from OptionsWidget import OptionsWidget
 
 TAB_MAGNETISM = 4
@@ -37,7 +38,4 @@
 CATEGORY_STRUCTURE = "Structure Factor"
 STRUCTURE_DEFAULT = "None"
-QMIN_DEFAULT = 0.0005
-QMAX_DEFAULT = 0.5
-NPTS_DEFAULT = 50
 
 class FittingWidget(QtGui.QWidget, Ui_FittingWidgetUI):
@@ -69,6 +67,10 @@
         # Parameters to fit
         self.parameters_to_fit = None
-        # Weight radio box group
-        self.weightingGroup = QtGui.QButtonGroup()
+        # Fit options
+        self.q_range_min = 0.005
+        self.q_range_max = 0.1
+        self.npts = 25
+        self.log_points = False
+        self.weighting = 0
 
         # Which tab is this widget displayed in?
@@ -78,9 +80,4 @@
         self.current_shell_displayed = 0
         self.has_error_column = False
-
-        # Range parameters
-        self.q_range_min = QMIN_DEFAULT
-        self.q_range_max = QMAX_DEFAULT
-        self.npts = NPTS_DEFAULT
 
         # Main Data[12]D holder
@@ -92,10 +89,15 @@
         self.communicate = self.parent.communicate
 
+        # Options widget
+        layout = QtGui.QGridLayout()
+        self.options_widget = OptionsWidget(self, self.logic)
+        layout.addWidget(self.options_widget) 
+        self.tabOptions.setLayout(layout)
+
         # Smearing widget
         layout = QtGui.QGridLayout()
         self.smearing_widget = SmearingWidget(self)
         layout.addWidget(self.smearing_widget) 
-        #self.tabFitting.removeTab(2)
-        self.tabFitting.insertTab(2, self.smearing_widget, "Resolution")
+        self.tabResolution.setLayout(layout)
 
         # Define bold font for use in various controls
@@ -186,34 +188,10 @@
         self.updateQRange()
         self.cmdFit.setEnabled(True)
-        self.boxWeighting.setEnabled(True)
-        self.cmdMaskEdit.setEnabled(True)
-        # Switch off txtNpts related controls
-        self.txtNpts.setEnabled(False)
-        self.txtNptsFit.setEnabled(False)
-        self.chkLogData.setEnabled(False)
         # Switch off Data2D control
         self.chk2DView.setEnabled(False)
         self.chk2DView.setVisible(False)
         self.chkMagnetism.setEnabled(True)
-
-        # Weighting controls
-        if self.is2D:
-            if self.logic.data.err_data is None or\
-                    numpy.all(err == 1 for err in self.logic.data.err_data) or \
-                    not numpy.any(self.logic.data.err_data):
-                self.rbWeighting2.setEnabled(False)
-                self.rbWeighting1.setChecked(True)
-            else:
-                self.rbWeighting2.setEnabled(True)
-                self.rbWeighting2.setChecked(True)
-        else:
-            if self.logic.data.dy is None or\
-                    numpy.all(self.logic.data.dy == 1) or\
-                    not numpy.any(self.logic.data.dy):
-                self.rbWeighting2.setEnabled(False)
-                self.rbWeighting1.setChecked(True)
-            else:
-                self.rbWeighting2.setEnabled(True)
-                self.rbWeighting2.setChecked(True)
+        # Similarly on other tabs
+        self.options_widget.setEnablementOnDataLoad()
 
         # Smearing tab
@@ -260,8 +238,4 @@
             self.onSelectModel()
 
-    def toggleLogData(self, isChecked):
-        """ Toggles between log and linear data sets """
-        pass
-
     def initializeControls(self):
         """
@@ -270,5 +244,5 @@
         self.cmdFit.setEnabled(False)
         self.cmdPlot.setEnabled(True)
-        self.cmdComputePoints.setVisible(False) # probably redundant
+        self.options_widget.cmdComputePoints.setVisible(False) # probably redundant
         self.chkPolydispersity.setEnabled(True)
         self.chkPolydispersity.setCheckState(False)
@@ -281,14 +255,8 @@
         self.tabFitting.setTabEnabled(TAB_MAGNETISM, False)
         self.lblChi2Value.setText("---")
-        # Group boxes
-        self.boxWeighting.setEnabled(False)
-        self.cmdMaskEdit.setEnabled(False)
-        # Button groups
-        self.weightingGroup.addButton(self.rbWeighting1)
-        self.weightingGroup.addButton(self.rbWeighting2)
-        self.weightingGroup.addButton(self.rbWeighting3)
-        self.weightingGroup.addButton(self.rbWeighting4)
         # Smearing tab
         self.smearing_widget.updateSmearing(self.data)
+        # Line edits in the option tab
+        self.updateQRange()
 
     def initializeSignals(self):
@@ -304,16 +272,7 @@
         self.chkPolydispersity.toggled.connect(self.togglePoly)
         self.chkMagnetism.toggled.connect(self.toggleMagnetism)
-        self.chkLogData.toggled.connect(self.toggleLogData)
         # Buttons
         self.cmdFit.clicked.connect(self.onFit)
         self.cmdPlot.clicked.connect(self.onPlot)
-        self.cmdMaskEdit.clicked.connect(self.onMaskEdit)
-        self.cmdReset.clicked.connect(self.onReset)
-        # Line edits
-        self.txtNpts.editingFinished.connect(self.onNpts)
-        self.txtMinRange.editingFinished.connect(self.onMinRange)
-        self.txtMaxRange.editingFinished.connect(self.onMaxRange)
-        # Button groups
-        self.weightingGroup.buttonClicked.connect(self.onWeightingChoice)
 
         # Respond to change in parameters from the UI
@@ -322,4 +281,7 @@
         # TODO after the poly_model prototype accepted
         #self._magnet_model.itemChanged.connect(self.onMagneticModelChange)
+
+        # Signals from separate tabs asking for replot
+        self.options_widget.plot_signal.connect(self.onOptionsUpdate)
 
     def onSelectModel(self):
@@ -391,13 +353,4 @@
         # Populate the models combobox
         self.cbModel.addItems(sorted([model for (model, _) in model_list]))
-
-    def onWeightingChoice(self, button):
-        """
-        Update weighting in the fit state
-        """
-        button_id = button.group().checkedId()
-        button_id = abs(button_id + 2)
-        #self.fitPage.weighting = button_id
-        print button_id
 
     def onPolyModelChange(self, item):
@@ -448,8 +401,10 @@
         params_to_fit = self.parameters_to_fit
 
-        # Potential weights added
+        # Potential weights added directly to data
         self.addWeightingToData(data)
 
         # Potential smearing added
+        # Remember that smearing_min/max can be None ->
+        # deal with it until Python gets discriminated unions
         smearing, accuracy, smearing_min, smearing_max = self.smearing_widget.state()
 
@@ -512,7 +467,7 @@
         res = res_list[0]
         if res.fitness is None or \
-            not numpy.isfinite(res.fitness) or \
-            numpy.any(res.pvec == None) or \
-            not numpy.all(numpy.isfinite(res.pvec)):
+            not np.isfinite(res.fitness) or \
+            np.any(res.pvec == None) or \
+            not np.all(np.isfinite(res.pvec)):
             msg = "Fitting did not converge!!!"
             self.communicate.statusBarUpdateSignal.emit(msg)
@@ -607,66 +562,15 @@
         Plot the current set of data
         """
-        if self.data is None :
+        if not self.data_is_loaded:
             self.createDefaultDataset()
         self.calculateQGridForModel()
 
-    def onNpts(self):
-        """
-        Callback for number of points line edit update
-        """
-        # assumes type/value correctness achieved with QValidator
-        try:
-            self.npts = int(self.txtNpts.text())
-        except ValueError:
-            # TODO
-            # This will return the old value to model/view and return
-            # notifying the user about format available.
-            pass
-        # Force redisplay
-        if self.model_is_loaded:
-            self.onPlot()
-
-    def onMinRange(self):
-        """
-        Callback for minimum range of points line edit update
-        """
-        # assumes type/value correctness achieved with QValidator
-        try:
-            self.q_range_min = float(self.txtMinRange.text())
-        except ValueError:
-            # TODO
-            # This will return the old value to model/view and return
-            # notifying the user about format available.
-            return
-        # set Q range labels on the main tab
-        #self.lblMinRangeDef.setText(str(self.q_range_min))
-        if self.model_is_loaded:
-            self.onPlot()
-
-    def onMaxRange(self):
-        """
-        Callback for maximum range of points line edit update
-        """
-        # assumes type/value correctness achieved with QValidator
-        try:
-            self.q_range_max = float(self.txtMaxRange.text())
-        except:
-            pass
-        # set Q range labels on the main tab
-        self.lblMaxRangeDef.setText(str(self.q_range_max))
-        if self.model_is_loaded:
-            self.onPlot()
-
-    def onMaskEdit(self):
-        """
-        Callback for running the mask editor
-        """
-        pass
-
-    def onReset(self):
-        """
-        Callback for resetting qmin/qmax
-        """
-        pass
+    def onOptionsUpdate(self):
+        """
+        Update local option values and replot
+        """
+        self.q_range_min, self.q_range_max, self.npts, self.log_points, self.weighting = \
+            self.options_widget.state()
+        self.onPlot()
 
     def setDefaultStructureCombo(self):
@@ -686,11 +590,16 @@
         # Create default datasets if no data passed
         if self.is2D:
-            qmax = self.q_range_max/numpy.sqrt(2)
+            qmax = self.q_range_max/np.sqrt(2)
             qstep = self.npts
             self.logic.createDefault2dData(qmax, qstep, self.tab_id)
+            return
+        elif self.log_points:
+            qmin = -10.0 if self.q_range_min < 1.e-10 else np.log10(self.q_range_min)
+            qmax =  10.0 if self.q_range_max > 1.e10 else np.log10(self.q_range_max)
+            interval = np.logspace(start=qmin, stop=qmax, num=self.npts, endpoint=True, base=10.0)
         else:
-            interval = numpy.linspace(start=self.q_range_min, stop=self.q_range_max,
-                        num=self.npts, endpoint=True)
-            self.logic.createDefault1dData(interval, self.tab_id)
+            interval = np.linspace(start=self.q_range_min, stop=self.q_range_max,
+                    num=self.npts, endpoint=True)
+        self.logic.createDefault1dData(interval, self.tab_id)
 
     def readCategoryInfo(self):
@@ -745,18 +654,9 @@
         """
         Adds weighting contribution to fitting data
-        """
-        # Check the state of the Weighting radio buttons
-        button_id = self.weightingGroup.checkedId()
-        # Cast the id to a valid index
-        button_id = abs(button_id + 2)
-        if button_id == 0:
-            # No weight added
-            return
+        #"""
         # Send original data for weighting
-        weight = get_weight(data=data, is2d=self.is2D, flag=button_id)
-        if self.is2D:
-            data.err_data = weight
-        else:
-            data.dy = weight
+        weight = get_weight(data=data, is2d=self.is2D, flag=self.weighting)
+        update_module = data.err_data if self.is2D else data.dy
+        update_module = weight
 
     def updateQRange(self):
@@ -770,8 +670,5 @@
         self.lblMaxRangeDef.setText(str(self.q_range_max))
         # set Q range labels on the options tab
-        self.txtMaxRange.setText(str(self.q_range_max))
-        self.txtMinRange.setText(str(self.q_range_min))
-        self.txtNpts.setText(str(self.npts))
-        self.txtNptsFit.setText(str(self.npts))
+        self.options_widget.updateQRange(self.q_range_min, self.q_range_max, self.npts)
 
     def SASModelToQModel(self, model_name, structure_factor=None):
@@ -959,4 +856,6 @@
         Prepare the fitting data object, based on current ModelModel
         """
+        if self.kernel_module is None:
+            return
         # Awful API to a backend method.
         method = self.methodCalculateForData()(data=self.data,
Index: src/sas/qtgui/Perspectives/Fitting/OptionsWidget.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/OptionsWidget.py	(revision 180bd545166c0e0d674354e554dec53998b492c6)
+++ src/sas/qtgui/Perspectives/Fitting/OptionsWidget.py	(revision 180bd545166c0e0d674354e554dec53998b492c6)
@@ -0,0 +1,194 @@
+"""
+Widget/logic for smearing data.
+"""
+import numpy as np
+from PyQt4 import QtGui
+from PyQt4 import QtCore
+
+from sas.sasgui.guiframe.dataFitting import Data1D
+from sas.sasgui.guiframe.dataFitting import Data2D
+
+# Local UI
+from UI.OptionsWidgetUI import Ui_tabOptions
+
+QMIN_DEFAULT = 0.0005
+QMAX_DEFAULT = 0.5
+NPTS_DEFAULT = 50
+
+MODEL = [
+    'MIN_RANGE',
+    'MAX_RANGE',
+    'NPTS',
+    'LOG_SPACED']
+
+class DataWidgetMapper(QtGui.QDataWidgetMapper):
+    """
+    Custom version of the standard QDataWidgetMapper allowing for proper
+    response to index change in comboboxes
+    """
+    def addMapping(self, widget, section, propertyName=None):
+        if propertyName is None:
+            super(DataWidgetMapper, self).addMapping(widget, section)
+        else:
+            super(DataWidgetMapper, self).addMapping(widget, section, propertyName)
+
+        if isinstance(widget, QtGui.QComboBox):
+            delegate = self.itemDelegate()
+            widget.currentIndexChanged.connect(lambda: delegate.commitData.emit(widget))
+
+        elif isinstance(widget, QtGui.QCheckBox):
+            delegate = self.itemDelegate()
+            widget.stateChanged.connect(lambda: delegate.commitData.emit(widget))
+
+class OptionsWidget(QtGui.QWidget, Ui_tabOptions):
+    plot_signal = QtCore.pyqtSignal()
+    def __init__(self, parent=None, logic=None):
+        super(OptionsWidget, self).__init__()
+
+        self.setupUi(self)
+
+        # Logic component
+        self.logic = logic
+
+        # Weight radio box group
+        self.weightingGroup = QtGui.QButtonGroup()
+        self.weighting = 0
+
+        # Group boxes
+        self.boxWeighting.setEnabled(False)
+        self.cmdMaskEdit.setEnabled(False)
+        # Button groups
+        self.weightingGroup.addButton(self.rbWeighting1)
+        self.weightingGroup.addButton(self.rbWeighting2)
+        self.weightingGroup.addButton(self.rbWeighting3)
+        self.weightingGroup.addButton(self.rbWeighting4)
+
+        # Let only floats in the range edits
+        self.txtMinRange.setValidator(QtGui.QDoubleValidator())
+        self.txtMaxRange.setValidator(QtGui.QDoubleValidator())
+        # Let only ints in the number of points edit
+        self.txtNpts.setValidator(QtGui.QIntValidator())
+
+        # Attach slots
+        self.cmdReset.clicked.connect(self.onRangeReset)
+        self.cmdMaskEdit.clicked.connect(self.onMaskEdit)
+        self.chkLogData.stateChanged.connect(self.toggleLogData)
+        # Button groups
+        self.weightingGroup.buttonClicked.connect(self.onWeightingChoice)
+
+        self.initModel()
+        self.initMapper()
+        self.model.blockSignals(True)
+        self.updateQRange(QMIN_DEFAULT, QMAX_DEFAULT, NPTS_DEFAULT)
+        self.txtMaxRange.setText(str(QMAX_DEFAULT))
+        self.txtMinRange.setText(str(QMIN_DEFAULT))
+        self.txtNpts.setText(str(NPTS_DEFAULT))
+        self.model.blockSignals(False)
+
+    def initModel(self):
+        """
+        Initialize the state
+        """
+        self.model = QtGui.QStandardItemModel()
+        for model_item in xrange(len(MODEL)):
+            self.model.setItem(model_item, QtGui.QStandardItem())
+        # Attach slot
+        self.model.dataChanged.connect(self.onModelChange)
+
+    def initMapper(self):
+        """
+        Initialize model item <-> UI element mapping
+        """
+        self.mapper = DataWidgetMapper(self)
+
+        self.mapper.setModel(self.model)
+        self.mapper.setOrientation(QtCore.Qt.Vertical)
+
+        self.mapper.addMapping(self.txtMinRange,  MODEL.index('MIN_RANGE'))
+        self.mapper.addMapping(self.txtMaxRange,  MODEL.index('MAX_RANGE'))
+        self.mapper.addMapping(self.txtNpts,      MODEL.index('NPTS'))
+        self.mapper.addMapping(self.chkLogData,   MODEL.index('LOG_SPACED'))
+        self.mapper.toFirst()
+
+    def toggleLogData(self, isChecked):
+        """ Toggles between log and linear data sets """
+        pass
+
+    def onMaskEdit(self):
+        """
+        Callback for running the mask editor
+        """
+        pass
+
+    def onRangeReset(self):
+        """
+        Callback for resetting qmin/qmax
+        """
+        pass
+
+    def onWeightingChoice(self, button):
+        """
+        Update weighting in the fit state
+        """
+        button_id = button.group().checkedId()
+        self.weighting = abs(button_id + 2)
+        #self.fitPage.weighting = button_id
+
+    def onModelChange(self, top, bottom):
+        """
+        Respond to model change by updating
+        """
+        #print "MODEL CHANGED for property: %s. The value is now: %s" % \
+        #    (MODEL[top.row()], str(self.model.item(top.row()).text()))
+        # update if there's something to update
+        if str(self.model.item(top.row()).text()): #and 'RANGE' in MODEL[top.row()]:
+            self.plot_signal.emit()
+
+    def setEnablementOnDataLoad(self):
+        """
+        Enable/disable various UI elements based on data loaded
+        """
+        self.boxWeighting.setEnabled(True)
+        self.cmdMaskEdit.setEnabled(True)
+        # Switch off txtNpts related controls
+        self.txtNpts.setEnabled(False)
+        self.txtNptsFit.setEnabled(False)
+        self.chkLogData.setEnabled(False)
+        # Weighting controls
+        if isinstance(self.logic.data, Data2D):
+            if self.logic.data.err_data is None or\
+                    np.all(err == 1 for err in self.logic.data.err_data) or \
+                    not np.any(self.logic.data.err_data):
+                self.rbWeighting2.setEnabled(False)
+                self.rbWeighting1.setChecked(True)
+            else:
+                self.rbWeighting2.setEnabled(True)
+                self.rbWeighting2.setChecked(True)
+        else:
+            if self.logic.data.dy is None or\
+                    np.all(self.logic.data.dy == 1) or\
+                    not np.any(self.logic.data.dy):
+                self.rbWeighting2.setEnabled(False)
+                self.rbWeighting1.setChecked(True)
+            else:
+                self.rbWeighting2.setEnabled(True)
+                self.rbWeighting2.setChecked(True)
+
+    def updateQRange(self, q_range_min, q_range_max, npts):
+        """
+        Update the local model based on calculated values
+        """
+        self.model.item(MODEL.index('MIN_RANGE')).setText(str(q_range_min))
+        self.model.item(MODEL.index('MAX_RANGE')).setText(str(q_range_max))
+        self.model.item(MODEL.index('NPTS')).setText(str(npts))
+
+    def state(self):
+        """
+        Returns current state of controls
+        """
+        q_range_min = float(self.model.item(MODEL.index('MIN_RANGE')).text())
+        q_range_max = float(self.model.item(MODEL.index('MAX_RANGE')).text())
+        npts        = int(self.model.item(MODEL.index('NPTS')).text())
+        log_points  = str(self.model.item(MODEL.index('LOG_SPACED')).text()) == 'true'
+
+        return (q_range_min, q_range_max, npts, log_points, self.weighting)
Index: src/sas/qtgui/Perspectives/Fitting/SmearingWidget.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/SmearingWidget.py	(revision 98b13f724cd11fc1ebdf8d5b128ac77e665d8380)
+++ src/sas/qtgui/Perspectives/Fitting/SmearingWidget.py	(revision 180bd545166c0e0d674354e554dec53998b492c6)
@@ -42,5 +42,5 @@
 
         # Have we loaded data yet? If so, what kind
-        self.is_data = None
+        self.have_data = None
         # Local model for holding data
         self.model = None
@@ -96,8 +96,8 @@
         elif isinstance(data, Data1D):
             self.cbSmearing.addItems(SMEARING_1D)
-            self.is_data = Data1D
+            self.have_data = Data1D
         else:
             self.cbSmearing.addItems(SMEARING_2D)
-            self.is_data = Data2D
+            self.have_data = Data2D
         self.cbSmearing.setCurrentIndex(0)
 
@@ -120,6 +120,6 @@
         Respond to model change by updating
         """
-        print "MODEL CHANGED for property: %s. The value is now: %s" % \
-            (MODEL[top.row()], str(self.model.item(top.row()).text()))
+        #print "MODEL CHANGED for property: %s. The value is now: %s" % \
+        #    (MODEL[top.row()], str(self.model.item(top.row()).text()))
         pass
 
@@ -140,5 +140,5 @@
         Accuracy combobox visibility
         """
-        if self.is_data == Data2D and self.cbSmearing.currentIndex() == 1:
+        if self.have_data == Data2D and self.cbSmearing.currentIndex() == 1:
             self.cbAccuracy.setVisible(True)
         else:
@@ -165,7 +165,17 @@
         # or model-held values
         smearing = str(self.model.item(MODEL.index('SMEARING')).text())
-        accuracy = str(self.model.item(MODEL.index('ACCURACY')).text())
-        d_down = float(self.model.item(MODEL.index('PINHOLE_MIN')).text())
-        d_up = float(self.model.item(MODEL.index('PINHOLE_MAX')).text())
+        accuracy = ""
+        d_down = None
+        d_up = None
+        if smearing != "None":
+            accuracy = str(self.model.item(MODEL.index('ACCURACY')).text())
+            try:
+                d_down = float(self.model.item(MODEL.index('PINHOLE_MIN')).text())
+            except ValueError:
+                d_down = None
+            try:
+                d_up = float(self.model.item(MODEL.index('PINHOLE_MAX')).text())
+            except ValueError:
+                d_up = None
 
         return (smearing, accuracy, d_down, d_up)
Index: src/sas/qtgui/Perspectives/Fitting/UI/FittingWidgetUI.ui
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/UI/FittingWidgetUI.ui	(revision e1e3e09a03e38fca76bc8ef51c8bfcc5d6441d3c)
+++ src/sas/qtgui/Perspectives/Fitting/UI/FittingWidgetUI.ui	(revision 180bd545166c0e0d674354e554dec53998b492c6)
@@ -351,213 +351,13 @@
       </layout>
      </widget>
-     <widget class="QWidget" name="QRanges">
+     <widget class="QWidget" name="tabOptions">
       <attribute name="title">
        <string>Fit Options</string>
       </attribute>
-      <layout class="QGridLayout" name="gridLayout_7">
-       <item row="0" column="0">
-        <widget class="QGroupBox" name="groupBox">
-         <property name="title">
-          <string>Fitting range</string>
-         </property>
-         <layout class="QGridLayout" name="gridLayout_4">
-          <item row="0" column="0" rowspan="2">
-           <layout class="QGridLayout" name="gridLayout_3">
-            <item row="0" column="0">
-             <widget class="QLabel" name="label_5">
-              <property name="text">
-               <string>Min range</string>
-              </property>
-             </widget>
-            </item>
-            <item row="0" column="1">
-             <widget class="QLineEdit" name="txtMinRange"/>
-            </item>
-            <item row="0" column="2">
-             <widget class="QLabel" name="label_7">
-              <property name="text">
-               <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Ã
-&lt;span style=&quot; vertical-align:super;&quot;&gt;-1&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-              </property>
-             </widget>
-            </item>
-            <item row="1" column="0">
-             <widget class="QLabel" name="label_6">
-              <property name="text">
-               <string>Max range</string>
-              </property>
-             </widget>
-            </item>
-            <item row="1" column="1">
-             <widget class="QLineEdit" name="txtMaxRange"/>
-            </item>
-            <item row="1" column="2">
-             <widget class="QLabel" name="label_8">
-              <property name="text">
-               <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Ã
-&lt;span style=&quot; vertical-align:super;&quot;&gt;-1&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-              </property>
-             </widget>
-            </item>
-           </layout>
-          </item>
-          <item row="0" column="1" rowspan="2">
-           <spacer name="horizontalSpacer_5">
-            <property name="orientation">
-             <enum>Qt::Horizontal</enum>
-            </property>
-            <property name="sizeHint" stdset="0">
-             <size>
-              <width>217</width>
-              <height>20</height>
-             </size>
-            </property>
-           </spacer>
-          </item>
-          <item row="0" column="2">
-           <widget class="QPushButton" name="cmdReset">
-            <property name="text">
-             <string>Reset</string>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="2">
-           <widget class="QPushButton" name="cmdMaskEdit">
-            <property name="text">
-             <string>Mask Editor</string>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </widget>
-       </item>
-       <item row="1" column="0">
-        <widget class="QGroupBox" name="groupBox_2">
-         <property name="title">
-          <string>Data points</string>
-         </property>
-         <layout class="QGridLayout" name="gridLayout_6">
-          <item row="0" column="0">
-           <layout class="QGridLayout" name="gridLayout_5">
-            <item row="0" column="0">
-             <widget class="QLabel" name="label_10">
-              <property name="text">
-               <string>Npts</string>
-              </property>
-             </widget>
-            </item>
-            <item row="0" column="1">
-             <widget class="QLineEdit" name="txtNpts"/>
-            </item>
-            <item row="0" column="2">
-             <widget class="QCheckBox" name="chkLogData">
-              <property name="text">
-               <string>Log spaced points</string>
-              </property>
-             </widget>
-            </item>
-            <item row="1" column="0">
-             <widget class="QLabel" name="label_11">
-              <property name="text">
-               <string>Npts(Fit)</string>
-              </property>
-             </widget>
-            </item>
-            <item row="1" column="1">
-             <widget class="QLineEdit" name="txtNptsFit"/>
-            </item>
-            <item row="2" column="0">
-             <widget class="QLabel" name="label_12">
-              <property name="text">
-               <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Ï&lt;span style=&quot; vertical-align:super;&quot;&gt;2&lt;/span&gt;/Npts&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-              </property>
-             </widget>
-            </item>
-            <item row="2" column="1">
-             <widget class="QLineEdit" name="txtChi2"/>
-            </item>
-            <item row="2" column="3">
-             <widget class="QPushButton" name="cmdComputePoints">
-              <property name="text">
-               <string>Compute</string>
-              </property>
-             </widget>
-            </item>
-            <item row="1" column="2">
-             <spacer name="horizontalSpacer_7">
-              <property name="orientation">
-               <enum>Qt::Horizontal</enum>
-              </property>
-              <property name="sizeHint" stdset="0">
-               <size>
-                <width>40</width>
-                <height>20</height>
-               </size>
-              </property>
-             </spacer>
-            </item>
-           </layout>
-          </item>
-         </layout>
-        </widget>
-       </item>
-       <item row="2" column="0">
-        <widget class="QGroupBox" name="boxWeighting">
-         <property name="title">
-          <string>Weighting</string>
-         </property>
-         <layout class="QGridLayout" name="gridLayout_12">
-          <item row="0" column="0">
-           <layout class="QVBoxLayout" name="verticalLayout">
-            <item>
-             <widget class="QRadioButton" name="rbWeighting1">
-              <property name="text">
-               <string>None</string>
-              </property>
-              <property name="checked">
-               <bool>true</bool>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <widget class="QRadioButton" name="rbWeighting2">
-              <property name="text">
-               <string>Use dI Data</string>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <widget class="QRadioButton" name="rbWeighting3">
-              <property name="text">
-               <string>Use |sqrt(I Data)|</string>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <widget class="QRadioButton" name="rbWeighting4">
-              <property name="text">
-               <string>Use |I Data|</string>
-              </property>
-             </widget>
-            </item>
-           </layout>
-          </item>
-         </layout>
-        </widget>
-       </item>
-       <item row="3" column="0">
-        <spacer name="verticalSpacer">
-         <property name="orientation">
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeHint" stdset="0">
-          <size>
-           <width>20</width>
-           <height>347</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-      </layout>
+     </widget>
+     <widget class="QWidget" name="tabResolution">
+      <attribute name="title">
+       <string>Resolution</string>
+      </attribute>
      </widget>
      <widget class="QWidget" name="tab_4">
Index: src/sas/qtgui/Perspectives/Fitting/UI/OptionsWidgetUI.ui
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/UI/OptionsWidgetUI.ui	(revision 180bd545166c0e0d674354e554dec53998b492c6)
+++ src/sas/qtgui/Perspectives/Fitting/UI/OptionsWidgetUI.ui	(revision 180bd545166c0e0d674354e554dec53998b492c6)
@@ -0,0 +1,232 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>tabOptions</class>
+ <widget class="QWidget" name="tabOptions">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>522</width>
+    <height>667</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Fit Options</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout_23">
+   <item row="0" column="0">
+    <widget class="QGroupBox" name="groupBox_4">
+     <property name="title">
+      <string>Fitting range</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_11">
+      <item row="0" column="0" rowspan="2">
+       <layout class="QGridLayout" name="gridLayout_13">
+        <item row="0" column="0">
+         <widget class="QLabel" name="label_9">
+          <property name="text">
+           <string>Min range</string>
+          </property>
+         </widget>
+        </item>
+        <item row="0" column="1">
+         <widget class="QLineEdit" name="txtMinRange"/>
+        </item>
+        <item row="0" column="2">
+         <widget class="QLabel" name="label_13">
+          <property name="text">
+           <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Ã
+&lt;span style=&quot; vertical-align:super;&quot;&gt;-1&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="0">
+         <widget class="QLabel" name="label_14">
+          <property name="text">
+           <string>Max range</string>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="1">
+         <widget class="QLineEdit" name="txtMaxRange"/>
+        </item>
+        <item row="1" column="2">
+         <widget class="QLabel" name="label_15">
+          <property name="text">
+           <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Ã
+&lt;span style=&quot; vertical-align:super;&quot;&gt;-1&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+      <item row="0" column="1" rowspan="2">
+       <spacer name="horizontalSpacer_8">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>217</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item row="0" column="2">
+       <widget class="QPushButton" name="cmdReset">
+        <property name="text">
+         <string>Reset</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="2">
+       <widget class="QPushButton" name="cmdMaskEdit">
+        <property name="text">
+         <string>Mask Editor</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="1" column="0">
+    <widget class="QGroupBox" name="groupBox_5">
+     <property name="title">
+      <string>Data points</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_14">
+      <item row="0" column="0">
+       <layout class="QGridLayout" name="gridLayout_15">
+        <item row="0" column="0">
+         <widget class="QLabel" name="label_21">
+          <property name="text">
+           <string>Npts</string>
+          </property>
+         </widget>
+        </item>
+        <item row="0" column="1">
+         <widget class="QLineEdit" name="txtNpts"/>
+        </item>
+        <item row="0" column="2">
+         <widget class="QCheckBox" name="chkLogData">
+          <property name="text">
+           <string>Log spaced points</string>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="0">
+         <widget class="QLabel" name="label_22">
+          <property name="text">
+           <string>Npts(Fit)</string>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="1">
+         <widget class="QLineEdit" name="txtNptsFit">
+          <property name="readOnly">
+           <bool>true</bool>
+          </property>
+         </widget>
+        </item>
+        <item row="2" column="0">
+         <widget class="QLabel" name="label_24">
+          <property name="text">
+           <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Ï&lt;span style=&quot; vertical-align:super;&quot;&gt;2&lt;/span&gt;/Npts&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+          </property>
+         </widget>
+        </item>
+        <item row="2" column="1">
+         <widget class="QLineEdit" name="txtChi2">
+          <property name="readOnly">
+           <bool>true</bool>
+          </property>
+         </widget>
+        </item>
+        <item row="2" column="3">
+         <widget class="QPushButton" name="cmdComputePoints">
+          <property name="text">
+           <string>Compute</string>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="2">
+         <spacer name="horizontalSpacer_9">
+          <property name="orientation">
+           <enum>Qt::Horizontal</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>40</width>
+            <height>20</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+       </layout>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="2" column="0">
+    <widget class="QGroupBox" name="boxWeighting">
+     <property name="title">
+      <string>Weighting</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_20">
+      <item row="0" column="0">
+       <layout class="QVBoxLayout" name="verticalLayout">
+        <item>
+         <widget class="QRadioButton" name="rbWeighting1">
+          <property name="text">
+           <string>None</string>
+          </property>
+          <property name="checked">
+           <bool>true</bool>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QRadioButton" name="rbWeighting2">
+          <property name="text">
+           <string>Use dI Data</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QRadioButton" name="rbWeighting3">
+          <property name="text">
+           <string>Use |sqrt(I Data)|</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QRadioButton" name="rbWeighting4">
+          <property name="text">
+           <string>Use |I Data|</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="3" column="0">
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>312</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
