Index: src/sas/qtgui/Perspectives/Fitting/FittingPerspective.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingPerspective.py	(revision 811bec19d50f449dd2af46130143530ec1d535db)
+++ src/sas/qtgui/Perspectives/Fitting/FittingPerspective.py	(revision b1e36a387414e3a8dc9726bbef5c0651364e2b64)
@@ -42,5 +42,29 @@
         self.tabCloseRequested.connect(self.tabCloses)
 
+        # Perspective window not allowed to close by default
+        self._allow_close = False
+
         self.setWindowTitle('Fit panel - Active Fitting Optimizer: %s' % self.optimizer)
+
+    def setClosable(self, value=True):
+        """
+        Allow outsiders close this widget
+        """
+        assert isinstance(value, bool)
+
+        self._allow_close = value
+
+    def closeEvent(self, event):
+        """
+        Overwrite QDialog close method to allow for custom widget close
+        """
+        if self._allow_close:
+            # reset the closability flag
+            self.setClosable(value=False)
+            event.accept()
+        else:
+            event.ignore()
+            # Maybe we should just minimize
+            self.setWindowState(QtCore.Qt.WindowMinimized)
 
     def addFit(self, data):
Index: src/sas/qtgui/Perspectives/Fitting/FittingUtilities.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingUtilities.py	(revision 7248d75d0e91daa6e6c6163bb53fa76c1c8898e3)
+++ src/sas/qtgui/Perspectives/Fitting/FittingUtilities.py	(revision b1e36a387414e3a8dc9726bbef5c0651364e2b64)
@@ -39,5 +39,6 @@
         item_name = param.name
         if param in multishell_parameters:
-            item_name = replaceShellName(param.name, 1)
+            continue
+        #    item_name = replaceShellName(param.name, 1)
 
         item1 = QtGui.QStandardItem(item_name)
@@ -127,5 +128,6 @@
     for i in xrange(index):
         for par in multishell_parameters:
-            param_name = replaceShellName(par.name, i+2)
+            # Create the name: <param>[<i>], e.g. "sld1" for parameter "sld[n]"
+            param_name = replaceShellName(par.name, i+1)
             item1 = QtGui.QStandardItem(param_name)
             item1.setCheckable(True)
Index: src/sas/qtgui/Perspectives/Fitting/FittingWidget.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision 29eb9478bc719b304d48973c0134e96ca30a39bb)
+++ src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision b1e36a387414e3a8dc9726bbef5c0651364e2b64)
@@ -79,4 +79,13 @@
         self.communicate = self.parent.communicate
 
+        # Define bold font for use in various controls
+        self.boldFont=QtGui.QFont()
+        self.boldFont.setBold(True)
+
+        # Set data label
+        self.label.setFont(self.boldFont)
+        self.label.setText("No data loaded")
+        self.lblFilename.setText("")
+
         # Set the main models
         # We can't use a single model here, due to restrictions on flattening
@@ -116,5 +125,5 @@
         self.cbCategory.setCurrentIndex(0)
 
-        self._index = data
+        self._index = None
         if data is not None:
             self.data = data
@@ -136,4 +145,5 @@
         # _index contains the QIndex with data
         self._index = value
+
         # Update logics with data items
         self.logic.data = GuiUtils.dataFromItem(value[0])
@@ -141,4 +151,6 @@
         self.data_is_loaded = True
         # Tag along functionality
+        self.label.setText("Data loaded from: ")
+        self.lblFilename.setText(self.logic.data.title)
         self.updateQRange()
         self.cmdFit.setEnabled(True)
@@ -151,20 +163,20 @@
         """ Disable the combobox """
         self.cbModel.setEnabled(False)
-        self.label_3.setEnabled(False)
+        self.lblModel.setEnabled(False)
 
     def enableModelCombo(self):
         """ Enable the combobox """
         self.cbModel.setEnabled(True)
-        self.label_3.setEnabled(True)
+        self.lblModel.setEnabled(True)
 
     def disableStructureCombo(self):
         """ Disable the combobox """
         self.cbStructureFactor.setEnabled(False)
-        self.label_4.setEnabled(False)
+        self.lblStructure.setEnabled(False)
 
     def enableStructureCombo(self):
         """ Enable the combobox """
         self.cbStructureFactor.setEnabled(True)
-        self.label_4.setEnabled(True)
+        self.lblStructure.setEnabled(True)
 
     def updateQRange(self):
@@ -271,5 +283,5 @@
         models = []
         # Populate the models combobox
-        self.cbModel.addItems(sorted([model for (model,_) in model_list]))
+        self.cbModel.addItems(sorted([model for (model, _) in model_list]))
 
     def createDefaultDataset(self):
@@ -303,5 +315,5 @@
             self.createDefaultDataset()
         else:
-            self.calculateDataForModel()
+            self.calculateQGridForModel()
 
     def onSelectStructureFactor(self):
@@ -427,5 +439,10 @@
             value = item.checkState()
         else:
-            value = float(item.text())
+            try:
+                value = float(item.text())
+            except ValueError:
+                # Can't be converted properly, bring back the old value and exit
+                return
+
         parameter_name = str(self._poly_model.data(name_index).toPyObject()) # "distribution of sld" etc.
         if "Distribution of" in parameter_name:
@@ -506,5 +523,5 @@
         if self.data is None or not self.data.is_data:
             self.createDefaultDataset()
-        self.calculateDataForModel()
+        self.calculateQGridForModel()
 
     def onNpts(self, text):
@@ -515,5 +532,8 @@
         try:
             self.npts = int(text)
-        except:
+        except ValueError:
+            # TODO
+            # This will return the old value to model/view and return
+            # notifying the user about format available.
             pass
 
@@ -525,6 +545,9 @@
         try:
             self.q_range_min = float(text)
-        except:
-            pass
+        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))
@@ -550,5 +573,5 @@
         return self.complete1D if isinstance(self.data, Data1D) else self.complete2D
 
-    def calculateDataForModel(self):
+    def calculateQGridForModel(self):
         """
         Prepare the fitting data object, based on current ModelModel
@@ -603,8 +626,7 @@
     def calcException(self, etype, value, tb):
         """
-        Something horrible happened in the deferred. Cry me a river.
+        Something horrible happened in the deferred.
         """
         logging.error("".join(traceback.format_exception(etype, value, tb)))
-        msg = traceback.format_exception(etype, value, tb, limit=1)
 
     def setTableProperties(self, table):
@@ -624,4 +646,5 @@
 
         header.ResizeMode(QtGui.QHeaderView.Interactive)
+        # Resize column 0 and 6 to content
         header.setResizeMode(0, QtGui.QHeaderView.ResizeToContents)
         header.setResizeMode(6, QtGui.QHeaderView.ResizeToContents)
@@ -694,5 +717,7 @@
 
         func = QtGui.QComboBox()
-        func.addItems([str(i+1) for i in xrange(param_length)])
+        # Available range of shells displayed in the combobox
+        func.addItems([str(i) for i in xrange(param_length+1)])
+        # Respond to index change
         func.currentIndexChanged.connect(self.modifyShellsInList)
 
Index: src/sas/qtgui/Perspectives/Fitting/UI/FittingWidgetUI.ui
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/UI/FittingWidgetUI.ui	(revision 5236449e83a334d07863f099c063375d8b54b4c2)
+++ src/sas/qtgui/Perspectives/Fitting/UI/FittingWidgetUI.ui	(revision b1e36a387414e3a8dc9726bbef5c0651364e2b64)
@@ -74,5 +74,5 @@
             </item>
             <item row="0" column="1">
-             <widget class="QLabel" name="label_3">
+             <widget class="QLabel" name="lblModel">
               <property name="text">
                <string>Model name</string>
@@ -81,5 +81,5 @@
             </item>
             <item row="0" column="2">
-             <widget class="QLabel" name="label_4">
+             <widget class="QLabel" name="lblStructure">
               <property name="text">
                <string>Structure factor</string>
Index: src/sas/qtgui/Perspectives/Fitting/UnitTesting/FittingUtilitiesTest.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/UnitTesting/FittingUtilitiesTest.py	(revision 7248d75d0e91daa6e6c6163bb53fa76c1c8898e3)
+++ src/sas/qtgui/Perspectives/Fitting/UnitTesting/FittingUtilitiesTest.py	(revision b1e36a387414e3a8dc9726bbef5c0651364e2b64)
@@ -114,14 +114,9 @@
 
         # Test the resulting model
-        self.assertEqual(model.rowCount(), 5)
+        self.assertEqual(model.rowCount(), 3)
         self.assertTrue(model.item(0).isCheckable())
         self.assertEqual(model.item(0).text(), "sld_core")
-        self.assertFalse(model.item(3).hasChildren())
         self.assertEqual(model.item(1).text(), "radius")
         self.assertEqual(model.item(2).text(), "sld_solvent")
-        self.assertEqual(model.item(3).text(), "sld1")
-
-        self.assertEqual(model.item(4).text(), "thickness1")
-        self.assertTrue(model.item(4).hasChildren())
 
     def testAddSimpleParametersToModel(self):
@@ -139,5 +134,5 @@
 
         # Test the resulting model
-        self.assertEqual(model.rowCount(), 5)
+        self.assertEqual(model.rowCount(), 3)
         self.assertTrue(model.item(0).isCheckable())
         self.assertEqual(model.item(0).text(), "sld_core")
Index: src/sas/qtgui/Perspectives/Fitting/UnitTesting/FittingWidgetTest.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/UnitTesting/FittingWidgetTest.py	(revision 351b53ec7df03f611b0f054c0dde289dc8a5089f)
+++ src/sas/qtgui/Perspectives/Fitting/UnitTesting/FittingWidgetTest.py	(revision b1e36a387414e3a8dc9726bbef5c0651364e2b64)
@@ -165,5 +165,6 @@
 
         # invoke the method by changing the index
-        self.widget.cbCategory.setCurrentIndex(1)
+        category_index = self.widget.cbCategory.findText("Shape-Independent")
+        self.widget.cbCategory.setCurrentIndex(category_index)
 
         # test the model combo content
@@ -190,5 +191,6 @@
         self.widget.show()
         # Change the category index so we have some models
-        self.widget.cbCategory.setCurrentIndex(1)
+        category_index = self.widget.cbCategory.findText("Shape-Independent")
+        self.widget.cbCategory.setCurrentIndex(category_index)
 
         # check the enablement of controls
@@ -202,5 +204,5 @@
         self.widget.SASModelToQModel = MagicMock()
         self.widget.createDefaultDataset = MagicMock()
-        self.widget.calculateDataForModel = MagicMock()
+        self.widget.calculateQGridForModel = MagicMock()
         # 
         # Now change the model
@@ -211,5 +213,5 @@
         self.assertTrue(self.widget.createDefaultDataset.called)
         self.assertTrue(self.widget.SASModelToQModel.called)
-        self.assertFalse(self.widget.calculateDataForModel.called)
+        self.assertFalse(self.widget.calculateQGridForModel.called)
 
         # Let's set a dummy index on widget
@@ -219,6 +221,6 @@
         self.assertEqual(self.widget.cbModel.currentText(),'be_polyelectrolyte')
 
-        # Observe calculateDataForModel called
-        self.assertTrue(self.widget.calculateDataForModel.called)
+        # Observe calculateQGridForModel called
+        self.assertTrue(self.widget.calculateQGridForModel.called)
 
     def testSelectFactor(self):
@@ -228,5 +230,6 @@
         self.widget.show()
         # Change the category index so we have some models
-        self.widget.cbCategory.setCurrentIndex(1)
+        category_index = self.widget.cbCategory.findText("Shape-Independent")
+        self.widget.cbCategory.setCurrentIndex(category_index)
         # Change the model to one that supports structure factors
         model_index = self.widget.cbModel.findText('fractal_core_shell')
@@ -296,5 +299,5 @@
         # Check the index
 
-    def testCalculateDataForModel(self):
+    def testCalculateQGridForModel(self):
         """
         Check that the fitting 1D data object is ready
@@ -303,5 +306,5 @@
         threads.deferToThread = MagicMock()
         # Call the tested method
-        self.widget.calculateDataForModel()
+        self.widget.calculateQGridForModel()
         # Test the mock
         self.assertTrue(threads.deferToThread.called)
@@ -328,5 +331,6 @@
         self.widget.show()
         # Change the category index so we have a model with no poly
-        self.widget.cbCategory.setCurrentIndex(1)
+        category_index = self.widget.cbCategory.findText("Shape-Independent")
+        self.widget.cbCategory.setCurrentIndex(category_index)
         # Check the poly model
         self.assertEqual(self.widget._poly_model.rowCount(), 0)
@@ -356,5 +360,6 @@
         self.widget.show()
         # Change the category index so we have a model available
-        self.widget.cbCategory.setCurrentIndex(2)
+        category_index = self.widget.cbCategory.findText("Shapes")
+        self.widget.cbCategory.setCurrentIndex(category_index)
 
         # Check the magnetic model
@@ -384,6 +389,8 @@
         self.widget.show()
         # Change the model to multi shell
-        self.widget.cbCategory.setCurrentIndex(2)
-        self.widget.cbModel.setCurrentIndex(4)
+        category_index = self.widget.cbCategory.findText("Shapes")
+        self.widget.cbCategory.setCurrentIndex(category_index)
+        model_index = self.widget.cbModel.findText("core_multi_shell")
+        self.widget.cbModel.setCurrentIndex(model_index)
 
         # Assure we have the combobox available
