diff --git a/Code/Mantid/scripts/HFIRPowderReduction/HfirPDReductionControl.py b/Code/Mantid/scripts/HFIRPowderReduction/HfirPDReductionControl.py
index 88226ad34a11c22924985cfd96d86437d97978f3..66472f471e51b83bbfd123d47791bef53c82f482 100644
--- a/Code/Mantid/scripts/HFIRPowderReduction/HfirPDReductionControl.py
+++ b/Code/Mantid/scripts/HFIRPowderReduction/HfirPDReductionControl.py
@@ -70,6 +70,32 @@ class PDRManager(object):
 
         return
 
+    def getAverageMonitorCounts(self):
+        """ Return the average monitor counts
+        """
+        # Check
+        if self._rawSpiceTableWS is None:
+            raise NotImplementedError('Raw SPICE TableWorkspace is None for scan %d, exp %d' % (
+                self.exp, self.scan
+            ))
+
+        # Get the column index for monitor counts
+        colnames = self._rawSpiceTableWS.getColumnNames()
+        try:
+            imonitor = colnames.index("monitor")
+        except ValueError:
+            raise RuntimeError("monitor is not a column name in SPICE table workspace.")
+
+        # Sum and average
+        numpts = self._rawSpiceTableWS.rowCount()
+        totalcounts = 0
+        for irow in xrange(numpts):
+            moncounts = self._rawSpiceTableWS.cell(irow, imonitor)
+            totalcounts += moncounts
+
+        return float(totalcounts)/float(numpts)
+
+
     def getProcessedVanadiumWS(self):
         """
         """
@@ -110,7 +136,7 @@ class PDRManager(object):
         return self._applySmoothVan
 
     def setup(self, datamdws, monitormdws, reducedws=None, unit=None, binsize=None):
-        """ Set up
+        """ Set up MDEventWorkspaces and reduction parameters
         """
         self.datamdws = datamdws
         self.monitormdws = monitormdws
@@ -125,15 +151,15 @@ class PDRManager(object):
 
         return
 
-    def setRawWorkspaces(self, spicetablews, logmatrixws):
+    def set_raw_workspaces(self, spice_table_ws, log_matrix_ws):
         """ Set 2 raw SPICE workspaces
         """
         # Validate
-        if  spicetablews.id() != 'TableWorkspace' or logmatrixws.id() != 'Workspace2D':
+        if  spice_table_ws.id() != 'TableWorkspace' or log_matrix_ws.id() != 'Workspace2D':
             raise NotImplementedError("Input workspaces for setRawWorkspaces() are not of correct types.")
 
-        self._rawSpiceTableWS =  spicetablews
-        self._rawLogInfoWS = logmatrixws
+        self._rawSpiceTableWS = spice_table_ws
+        self._rawLogInfoWS = log_matrix_ws
 
         return
 
@@ -223,9 +249,14 @@ class HFIRPDRedControl(object):
 
         return
 
-
-    def getIndividualDetCounts(self, exp, scan, detid, xlabel):
+    def getIndividualDetCounts(self, exp, scan, detid, xlabel, normalized=True):
         """ Get individual detector counts
+        :param exp:
+        :param scan:
+        :param detid:
+        :param xlabel:
+        :param normalized:
+        :return:
         """
         # Check and get data
         exp = int(exp)
@@ -252,20 +283,22 @@ class HFIRPDRedControl(object):
                     api.GetSpiceDataRawCountsFromMD(InputWorkspace=datamdws,
                                                     MonitorWorkspace=monitormdws,
                                                     Mode='Detector',
-                                                    DetectorID = detid)
+                                                    DetectorID = detid,
+                                                    NormalizeByMonitorCounts=normalized)
         else:
+            print "Plot detector %d's counts vs. sample log %s."%(detid, xlabel)
             tempoutws = \
                     api.GetSpiceDataRawCountsFromMD(InputWorkspace=datamdws,
                                                     MonitorWorkspace=monitormdws,
                                                     Mode='Detector',
                                                     DetectorID = detid,
-                                                    XLabel=xlabel)
+                                                    XLabel=xlabel,
+                                                    NormalizeByMonitorCounts=normalized)
 
         vecx = tempoutws.readX(0)[:]
         vecy = tempoutws.readY(0)[:]
 
-        return (vecx, vecy)
-
+        return vecx, vecy
 
     def getRawDetectorCounts(self, exp, scan, ptnolist=None):
         """ Return raw detector counts as a list of 3-tuples
@@ -355,6 +388,7 @@ class HFIRPDRedControl(object):
         # ptnolist = self._getRunNumberList(datamdws=rmanager.datamdws)
 
         # get data
+        print "[DB] Plot sample log: XLabel = %s" % (xlabel)
         tempoutws = api.GetSpiceDataRawCountsFromMD(InputWorkspace=datamdws,
                                                     MonitorWorkspace=monitormdws,
                                                     Mode='Sample Log',
@@ -541,11 +575,14 @@ class HFIRPDRedControl(object):
 
         tablews = AnalysisDataService.retrieve(tablewsname)
         infows  = AnalysisDataService.retrieve(infowsname)
+        if tablews is None or infows is None:
+            raise NotImplementedError('Unable to retrieve either spice table workspace %s or log workspace %s' % (
+                tablewsname, infowsname))
 
         # Create a reduction manager and add workspaces to it
         wsmanager = PDRManager(expno, scanno)
-        wsmanager.setRawWorkspaces(tablews, infows)
-        self._myWorkspaceDict[ (int(expno), int(scanno) )] = wsmanager
+        wsmanager.set_raw_workspaces(tablews, infows)
+        self._myWorkspaceDict[(int(expno), int(scanno))] = wsmanager
 
         return
 
@@ -646,7 +683,7 @@ class HFIRPDRedControl(object):
 
 
     def parseSpiceData(self, expno, scanno, detefftablews=None):
-        """ Load SPICE data to MDWorkspaces
+        """ Load SPICE data to MDWorkspaces from raw table workspace
         """
         # Get reduction manager
         try:
@@ -681,24 +718,99 @@ class HFIRPDRedControl(object):
 
         return True
 
+    def reset_to_normalized(self, exp, scan_list, min_x, max_x, bin_size):
+        """ Reset the scaled up data to normalized data
+        :param exp:
+        :param scan_list:
+        :param min_x:
+        :param max_x:
+        :param bin_size:
+        :return:
+        """
+        try:
+            exp = int(exp)
+        except ValueError as e:
+            return False, str(e)
 
-    def reduceSpicePDData(self, exp, scan, unit, xmin, xmax, binsize, wavelength=None, excludeddetlist=None,scalefactor=None):
-        """ Reduce SPICE powder diffraction data.
-        Return - Boolean as reduction is successful or not
+        for scan in scan_list:
+            try:
+                scan = int(scan)
+                wsmanager = self._myWorkspaceDict[(exp, scan)]
+            except ValueError:
+                # type error, return with false
+                return False, 'Scan number %s is not integer.'%(str(scan))
+            except KeyError:
+                # data has not been reduced yet. Reduce dat
+                self.reduceSpicePDData(exp, scan, unit='2theta',
+                                       xmin=min_x, xmax=max_x, binsize=bin_size)
+                wsmanager = self._myWorkspaceDict[(exp, scan)]
+            # END_TRY_EXCEPT
+
+            # Reduce data if it is not reduced
+            if wsmanager.reducedws is None:
+                self.reduceSpicePDData(exp, scan, unit='2theta', xmin=min_x, xmax=max_x, binsize=bin_size)
+
+            monitorcounts = wsmanager.getAverageMonitorCounts()
+            print '[DB] Exp %d Scan %d: average monitor counts = %.5f' % (exp, scan, monitorcounts)
+            # FUTURE: implement method ws_manager.reset_to_normalized() instead
+            wsmanager.reducedws = wsmanager.reducedws / monitorcounts
+        # END_FOR(scan)
+
+        return True, ''
+
+    def scale_to_raw_monitor_counts(self, exp, scan_list, min_x, max_x, bin_size):
+        """ Scale up the reduced powder spectrum to its average monitor counts
+        :param exp:
+        :param scan_list:
+        :param min_x:
+        :param max_x:
+        :param bin_size:
+        :return:
         """
-        # Default
-        if excludeddetlist is None:
-            excludeddetlist = None
+        try:
+            exp = int(exp)
+        except ValueError as e:
+            return False, str(e)
+
+        for scan in scan_list:
+            try:
+                scan = int(scan)
+                wsmanager = self._myWorkspaceDict[(exp, scan)]
+            except ValueError:
+                # type error, return with false
+                return False, 'Scan number %s is not integer.'%(str(scan))
+            except KeyError:
+                # data has not been reduced yet. Reduce dat
+                self.reduceSpicePDData(exp, scan, unit='2theta',
+                                       xmin=min_x, xmax=max_x, binsize=bin_size)
+                wsmanager = self._myWorkspaceDict[(exp, scan)]
+            # END_TRY_EXCEPT
+
+            # Reduce data if it is not reduced
+            if wsmanager.reducedws is None:
+                self.reduceSpicePDData(exp, scan, unit='2theta', xmin=min_x, xmax=max_x, binsize=bin_size)
 
+            monitorcounts = wsmanager.getAverageMonitorCounts()
+            print '[DB] Exp %d Scan %d: average monitor counts = %.5f' % (exp, scan, monitorcounts)
+            wsmanager.reducedws = wsmanager.reducedws * monitorcounts
+        # END_FOR(scan)
+
+        return True, ''
+
+    def reduceSpicePDData(self, exp, scan, unit, xmin, xmax, binsize, wavelength=None,
+                          excludeddetlist=None,scalefactor=None):
+        """ Reduce SPICE powder diffraction data from MDEventWorkspaces
+        Return - Boolean as reduction is successful or not
+        """
         # Get reduction manager
         try:
-            wsmanager = self._myWorkspaceDict[(int(exp), int(scan))]
+            ws_manager = self._myWorkspaceDict[(int(exp), int(scan))]
         except KeyError:
             raise NotImplementedError("SPICE data for Exp %d Scan %d has not been loaded." % (
                 int(exp), int(scan)))
 
-        datamdws = wsmanager.datamdws
-        monitormdws = wsmanager.monitormdws
+        datamdws = ws_manager.datamdws
+        monitormdws = ws_manager.monitormdws
 
         # binning from MD to single spectrum ws
         # set up binning parameters
@@ -712,10 +824,17 @@ class HFIRPDRedControl(object):
             scalefactor = 1.
         else:
             scalefactor = float(scalefactor)
+            print "[DB] Scale factor is %f." % (scalefactor)
+
+        # Excluded detectors
+        if excludeddetlist is None:
+            excludeddetlist = []
+        else:
+            print "[DB] Excluded detectors: %s"%(excludeddetlist), "Convert to numpy array", \
+                numpy.array(excludeddetlist)
 
         basewsname = datamdws.name().split("_DataMD")[0]
         outwsname = basewsname + "_Reduced"
-        print "[DB]", numpy.array(excludeddetlist)
         api.ConvertCWPDMDToSpectra(InputWorkspace=datamdws,
                 InputMonitorWorkspace=monitormdws,
                 OutputWorkspace=outwsname,
@@ -733,11 +852,14 @@ class HFIRPDRedControl(object):
             raise NotImplementedError("Failed to bin the MDEventWorkspaces to MatrixWorkspace.")
 
         # Manager:
-        wsmanager = PDRManager(exp, scan)
-        wsmanager.setup(datamdws, monitormdws, outws, unit, binsize)
-        wsmanager.setWavelength(wavelength)
+        if self._myWorkspaceDict.has_key((exp, scan)) is False:
+            raise NotImplementedError('Exp %d Scan %d has not been initialized.  ' % (exp, scan))
+        # wsmanager = PDRManager(exp, scan)
+        ws_manager = self._myWorkspaceDict[(exp, scan)]
+        ws_manager.setup(datamdws, monitormdws, outws, unit, binsize)
+        ws_manager.setWavelength(wavelength)
 
-        self._myWorkspaceDict[(exp, scan)] = wsmanager
+        # self._myWorkspaceDict[(exp, scan)] = wsmanager
 
         return True
 
diff --git a/Code/Mantid/scripts/HFIRPowderReduction/HfirPDReductionGUI.py b/Code/Mantid/scripts/HFIRPowderReduction/HfirPDReductionGUI.py
index 07334976ce7d6154efad574c8cec4687f2f9193a..706ae01a4a4392bb2f96ef853544ba7eccc0032b 100644
--- a/Code/Mantid/scripts/HFIRPowderReduction/HfirPDReductionGUI.py
+++ b/Code/Mantid/scripts/HFIRPowderReduction/HfirPDReductionGUI.py
@@ -1,4 +1,4 @@
-#pylint: disable=invalid-name, relative-import, too-many-lines,too-many-instance-attributes
+#pylint: disable=invalid-name, relative-import, too-many-lines,too-many-instance-attributes,too-many-arguments
 ################################################################################
 # Main class for HFIR powder reduction GUI
 # Key word for future developing: FUTURE, NEXT, REFACTOR, RELEASE 2.0
@@ -36,7 +36,88 @@ class EmptyError(Exception):
     def __str__(self):
         return repr(self.value)
 
-#pylint: disable=too-many-public-methods,too-many-branches,too-many-locals,too-many-arguments
+
+class MultiScanTabState(object):
+    """ Description of the state of the multi-scan-tab is in
+    """
+    NO_OPERATION = 0
+    RELOAD_DATA = 1
+    REDUCE_DATA = 2
+
+    def __init__(self):
+        """ Initialization
+        :return:
+        """
+        self._expNo = -1
+        self._scanList = []
+        self._xMin = None
+        self._xMax = None
+        self._binSize = 0
+        self._unit = ''
+        self._plotRaw = False
+        self._useDetEfficiencyCorrection = False
+        self._excludeDetectors = []
+
+    def compare_state(self, tab_state):
+        """ Compare this tab state and another tab state
+        :param tab_state:
+        :return:
+        """
+        if isinstance(tab_state, MultiScanTabState) is False:
+            raise NotImplementedError('compare_state must have MultiScanTabStatus as input.')
+
+        if self._expNo != tab_state.getExpNumber() or self._scanList != tab_state.getScanList:
+            return self.RELOAD_DATA
+
+        for attname in self.__dict__.keys():
+            if self.__getattribute__(attname) != tab_state.__getattribute__(attname):
+                return self.REDUCE_DATA
+
+        return self.NO_OPERATION
+
+    def getExpNumber(self):
+        """ Get experiment number
+        :return:
+        """
+        return self._expNo
+
+    def getScanList(self):
+        """ Get the list of scans
+        :return:
+        """
+        return self._scanList[:]
+
+    #pyline: disable=too-many-arguments
+    def setup(self, exp_no, scan_list, min_x, max_x, bin_size, unit, raw, correct_det_eff, exclude_dets):
+        """
+        Set up the object
+        :param exp_no:
+        :param scan_list:
+        :param min_x:
+        :param max_x:
+        :param bin_size:
+        :param unit:
+        :param raw:
+        :param correct_det_eff:
+        :param exclude_dets:
+        :return:
+        """
+        self._expNo = int(exp_no)
+        if isinstance(scan_list, list) is False:
+            raise NotImplementedError('Scan_List must be list!')
+        self._scanList = scan_list
+        self._xMin = min_x
+        self._xMax = max_x
+        self._binSize = float(bin_size)
+        self._unit = str(unit)
+        self._plotRaw = raw
+        self._useDetEfficiencyCorrection = correct_det_eff
+        self._excludeDetectors = exclude_dets
+
+        return
+
+
+#pylint: disable=too-many-public-methods,too-many-branches,too-many-locals,too-many-statements
 class MainWindow(QtGui.QMainWindow):
     """ Class of Main Window (top)
     """
@@ -50,7 +131,7 @@ class MainWindow(QtGui.QMainWindow):
     #     self.mainplot = self.graphicsView.getPlot()
 
     def __init__(self, parent=None):
-        """ Intialization and set up
+        """ Initialization and set up
         """
         # Base class
         QtGui.QMainWindow.__init__(self,parent)
@@ -63,37 +144,39 @@ class MainWindow(QtGui.QMainWindow):
 
         # menu
         self.connect(self.ui.actionQuit, QtCore.SIGNAL('triggered()'),
-                self.doExist)
+                     self.doExist)
         self.connect(self.ui.actionFind_Help, QtCore.SIGNAL('triggered()'),
                 self.doHelp)
 
         # main
         self.connect(self.ui.comboBox_wavelength, QtCore.SIGNAL('currentIndexChanged(int)'),
-                self.doUpdateWavelength)
-        self.connect(self.ui.pushButton_browseExcludedDetFile, QtCore.SIGNAL('clicked'),
-                self.doBrowseExcludedDetetorFile)
+                     self.doUpdateWavelength)
+        self.connect(self.ui.pushButton_browseExcludedDetFile, QtCore.SIGNAL('clicked()'),
+                     self.doBrowseExcludedDetetorFile)
+        self.connect(self.ui.checkBox_useDetExcludeFile, QtCore.SIGNAL('stateChanged(int)'),
+                     self.do_enable_excluded_dets)
 
         # tab 'Raw Detectors'
         self.connect(self.ui.pushButton_plotRaw, QtCore.SIGNAL('clicked()'),
-                self.doPlotRawPtMain)
+                     self.doPlotRawPtMain)
         self.connect(self.ui.pushButton_ptUp, QtCore.SIGNAL('clicked()'),
-                self.doPlotRawPtPrev)
+                     self.do_plot_raw_pt_prev)
         self.connect(self.ui.pushButton_ptDown, QtCore.SIGNAL('clicked()'),
-                self.doPlotRawPtNext)
+                     self.doPlotRawPtNext)
         self.connect(self.ui.pushButton_clearRawDets, QtCore.SIGNAL('clicked()'),
-                self.doClearRawDetCanvas)
+                     self.doClearRawDetCanvas)
 
         # tab 'Individual Detectors'
         self.connect(self.ui.pushButton_plotIndvDet, QtCore.SIGNAL('clicked()'),
-                self.doPlotIndvDetMain)
+                     self.doPlotIndvDetMain)
         self.connect(self.ui.pushButton_plotPrevDet, QtCore.SIGNAL('clicked()'),
-                self.doPlotIndvDetPrev)
+                     self.doPlotIndvDetPrev)
         self.connect(self.ui.pushButton_plotNextDet, QtCore.SIGNAL('clicked()'),
-                self.doPlotIndvDetNext)
+                     self.doPlotIndvDetNext)
         self.connect(self.ui.pushButton_clearCanvasIndDet, QtCore.SIGNAL('clicked()'),
-                self.doClearIndDetCanvas)
+                     self.doClearIndDetCanvas)
         self.connect(self.ui.pushButton_plotLog , QtCore.SIGNAL('clicked()'),
-                self.doPlotSampleLog)
+                     self.do_plot_sample_log)
 
         # tab 'Normalized'
         self.connect(self.ui.pushButton_loadData, QtCore.SIGNAL('clicked()'),
@@ -115,7 +198,7 @@ class MainWindow(QtGui.QMainWindow):
 
         # tab 'Multiple Scans'
         self.connect(self.ui.pushButton_loadMultData, QtCore.SIGNAL('clicked()'),
-                self.doLoadSetData)
+                     self.doLoadSetData)
         self.connect(self.ui.pushButton_mscanBin, QtCore.SIGNAL('clicked()'),
                 self.doReduceSetData)
         self.connect(self.ui.pushButton_mergeScans, QtCore.SIGNAL('clicked()'),
@@ -132,6 +215,8 @@ class MainWindow(QtGui.QMainWindow):
                 self.doSaveMultipleScans)
         self.connect(self.ui.pushButton_saveMerge, QtCore.SIGNAL('clicked()'),
                 self.doSaveMergedScan)
+        self.connect(self.ui.pushButton_plotRawMultiScans, QtCore.SIGNAL('clicked()'),
+                     self.do_convert_plot_multi_scans)
 
         # tab 'Vanadium'
         self.connect(self.ui.pushButton_stripVanPeaks, QtCore.SIGNAL('clicked()'),
@@ -247,6 +332,7 @@ class MainWindow(QtGui.QMainWindow):
         # RELEASE 2.0 : Need to disable some widgets... consider to refactor the code
         self.ui.radioButton_useServer.setChecked(True)
         self.ui.radioButton_useLocal.setChecked(False)
+        self.ui.checkBox_useDetExcludeFile.setChecked(True)
 
         self.ui.comboBox_wavelength.setCurrentIndex(0)
         self.ui.lineEdit_wavelength.setText('2.41')
@@ -294,6 +380,10 @@ class MainWindow(QtGui.QMainWindow):
 
         self._indvDetCanvasMode = 'samplelog'
 
+        # Multiple scan tab
+        self._multiScanExp = None
+        self._multiScanList = []
+
         #help
         self.assistantProcess = QtCore.QProcess(self)
         # pylint: disable=protected-access
@@ -302,6 +392,33 @@ class MainWindow(QtGui.QMainWindow):
         self.qtUrl='qthelp://org.sphinx.mantidproject.'+version+'/doc/interfaces/HFIRPowderReduction.html'
         self.externalUrl='http://docs.mantidproject.org/nightly/interfaces/HFIRPowderReduction.html'
 
+        # Initial setup for tab
+        self.ui.tabWidget.setCurrentIndex(0)
+        cache_dir = str(self.ui.lineEdit_cache.text()).strip()
+        if len(cache_dir) == 0 or os.path.exists(cache_dir) is False:
+            invalid_cache = cache_dir
+            if False:
+                cache_dir = os.path.expanduser('~')
+            else:
+                cache_dir = os.getcwd()
+            self.ui.lineEdit_cache.setText(cache_dir)
+            self._logWarning("Cache directory %s is not valid. "
+                             "Using current workspace directory %s as cache." %
+                             (invalid_cache, cache_dir))
+
+        # Get on hold of raw data file
+        useserver = self.ui.radioButton_useServer.isChecked()
+        uselocal = self.ui.radioButton_useLocal.isChecked()
+        if useserver == uselocal:
+            self._logWarning("It is logically wrong to set up (1) neither server or local dir to "
+                             "access data or (2) both server and local dir to retrieve data. "
+                             "As default, it is set up to download data from server.")
+            useserver = True
+            uselocal = False
+            self.ui.radioButton_useServer.setChecked(True)
+            self.ui.radioButton_useLocal.setChecked(False)
+        # ENDIF
+
         return
 
 
@@ -360,8 +477,8 @@ class MainWindow(QtGui.QMainWindow):
     def doBrowseLocalDataSrc(self):
         """ Browse local data storage
         """
-        print "Browse local data storage location."
-
+        msg = "Browse local data storage location. Implement ASAP"
+        QtGui.QMessageBox.information(self, "Click!", msg)
         return
 
 
@@ -399,8 +516,8 @@ class MainWindow(QtGui.QMainWindow):
     def doCheckSrcServer(self):
         """" Check source data server's availability
         """
-
-        print "Check source data server!"
+        msg = "Check source data server! Implement ASAP"
+        QtGui.QMessageBox.information(self, "Click!", msg)
 
         return
 
@@ -418,9 +535,13 @@ class MainWindow(QtGui.QMainWindow):
         """ Clear the canvas in tab 'Individual Detector' and current plotted lines
         in managing dictionary
         """
+        # Clear all lines on canvas
         self.ui.graphicsView_indvDet.clearAllLines()
+        # Remove their references in dictionary
         if self._tabLineDict.has_key(self.ui.graphicsView_indvDet):
             self._tabLineDict[self.ui.graphicsView_indvDet] = []
+        # Reset colur schedule
+        self.ui.graphicsView_indvDet.resetLineColorStyle()
 
         return
 
@@ -488,7 +609,7 @@ class MainWindow(QtGui.QMainWindow):
 
     def doLoadData(self, exp=None, scan=None):
         """ Load and reduce data
-        It does not support for tab 'Multiple Scans' and 'Advanced Setup'
+        It does not support for tab 'Advanced Setup'
         For tab 'Raw Detector' and 'Individual Detector', this method will load data to MDEventWorkspaces
         For tab 'Normalized' and 'Vanadium', this method will load data to MDEVentWorkspaces but NOT reduce to single spectrum
         """
@@ -497,14 +618,11 @@ class MainWindow(QtGui.QMainWindow):
         tabtext = str(self.ui.tabWidget.tabText(itab))
         print "[DB] Current active tab is No. %d as %s." % (itab, tabtext)
 
-        #if itab == 3:
-        #    # 'multiple scans'
-        #    self._logNotice("Tab %s does not support 'Load Data'.  Use 'Load All' instead." % (tabtext))
-        #    return
-
+        # Rule out unsupported tab
         if itab == 5:
             # 'advanced'
-            self._logNotice("Tab %s does not support 'Load Data'. Request is ambiguous." % (tabtext))
+            msg = "Tab %s does not support 'Load Data'. Request is ambiguous." % tabtext
+            QtGui.QMessageBox.information(self, "Click!", msg)
             return
 
         # Get exp number and scan number
@@ -559,8 +677,8 @@ class MainWindow(QtGui.QMainWindow):
         localdir = os.path.dirname(datafilename)
         try:
             status, returnbody = self._myControl.retrieveCorrectionData(instrument='HB2A',
-                                                                    exp=expno, scan=scanno,
-                                                                    localdatadir=localdir)
+                                                                        exp=expno, scan=scanno,
+                                                                        localdatadir=localdir)
         except NotImplementedError as e:
             errmsg = str(e)
             if errmsg.count('m1') > 0:
@@ -648,7 +766,7 @@ class MainWindow(QtGui.QMainWindow):
 
         # Parse SPICE data to MDEventWorkspaces
         try:
-            print "Det EFF Table WS: ", str(detefftablews)
+            print "Det Efficiency Table WS: ", str(detefftablews)
             execstatus = self._myControl.parseSpiceData(expno, scanno, detefftablews)
             if execstatus is False:
                 cause = "Parse data failed."
@@ -680,6 +798,7 @@ class MainWindow(QtGui.QMainWindow):
         if itab != 3:
             floatsamplelognamelist = self._myControl.getSampleLogNames(expno, scanno)
             self.ui.comboBox_indvDetXLabel.clear()
+            self.ui.comboBox_indvDetXLabel.addItem("2theta/Scattering Angle")
             self.ui.comboBox_indvDetXLabel.addItems(floatsamplelognamelist)
             self.ui.comboBox_indvDetYLabel.clear()
             self.ui.comboBox_indvDetYLabel.addItems(floatsamplelognamelist)
@@ -946,7 +1065,13 @@ class MainWindow(QtGui.QMainWindow):
 
         # Get detector ID and x-label option
         try:
-            detid = self._getInteger(self.ui.lineEdit_detID)
+            status, detidlist = self._getIntArray(self.ui.lineEdit_detID.text())
+            if status is False:
+                errmsg = detidlist
+                print "Unable to parse detector IDs due to %s."%(errmsg)
+                return
+            else:
+                print "[DB] Detectors to plot: %s"%(detidlist)
         except EmptyError:
             self._logError("Detector ID must be specified for plotting individual detector.")
             return
@@ -957,21 +1082,27 @@ class MainWindow(QtGui.QMainWindow):
             self.doClearIndDetCanvas()
 
         xlabel = str(self.ui.comboBox_indvDetXLabel.currentText()).strip()
-        if xlabel != "" and xlabel != "Pt.":
-            self._logNotice("X-label %s is not supported for plotting individual detector's counts.  Set to detector angle." % (xlabel))
-            xlabel = ""
+        if xlabel != "" and xlabel != "Pt." and xlabel != "2theta/Scattering Angle":
+            # Plot with sample logs other than Pt.
+            self._logNotice("New Feature: X-label %s is supported for plotting individual detector's counts. "
+                            " Set to detector angle." % xlabel)
+            xlabel = xlabel
         else:
-            self._logNotice("X-label for individual detectror is %s." % (xlabel))
+            # Plot with Pt. or detector angles
+            if xlabel != "Pt.":
+                xlabel = ""
+            self._logNotice("X-label for individual detectror is '%s'." % (xlabel))
 
         # plot
-        try:
-            self._plotIndividualDetCounts(expno, scanno, detid, xlabel)
-            self._expNo = expno
-            self._scanNo = scanno
-            self._detID = detid
-            self._indvXLabel = xlabel
-        except NotImplementedError as e:
-            self._logError(str(e))
+        for detid in sorted(detidlist):
+            try:
+                self._plot_individual_detector_counts(expno, scanno, detid, xlabel, resetboundary=not overplot)
+                self._expNo = expno
+                self._scanNo = scanno
+                self._detID = detid
+                self._indvXLabel = xlabel
+            except NotImplementedError as e:
+                self._logError(str(e))
 
         return
 
@@ -987,7 +1118,7 @@ class MainWindow(QtGui.QMainWindow):
             if overplot is False:
                 self.doClearIndDetCanvas()
 
-            self._plotIndividualDetCounts(self._expNo, self._scanNo, currdetid,
+            self._plot_individual_detector_counts(self._expNo, self._scanNo, currdetid,
                     self._indvXLabel)
         except KeyError as e:
             self._logError(str(e))
@@ -1011,7 +1142,7 @@ class MainWindow(QtGui.QMainWindow):
             if overplot is False:
                 self.doClearIndDetCanvas()
 
-            self._plotIndividualDetCounts(self._expNo, self._scanNo, currdetid,
+            self._plot_individual_detector_counts(self._expNo, self._scanNo, currdetid,
                     self._indvXLabel)
         except KeyError as e:
             self._logError(str(e))
@@ -1023,6 +1154,66 @@ class MainWindow(QtGui.QMainWindow):
 
         return
 
+    def do_convert_plot_multi_scans(self):
+        """ Convert individual plots from normalized to raw or vice verse
+        """
+        # Identify the mode
+        if str(self.ui.pushButton_plotRawMultiScans.text()) == 'Plot Raw':
+            new_mode = 'Plot Raw'
+        else:
+            new_mode = 'Plot Normalized'
+
+        # Get information
+        try:
+            min_x = self._getFloat(self.ui.lineEdit_mergeMinX)
+        except EmptyError:
+            min_x = None
+        try:
+            max_x = self._getFloat(self.ui.lineEdit_mergeMaxX)
+        except EmptyError:
+            max_x = None
+        bin_size = self._getFloat(self.ui.lineEdit_mergeBinSize)
+
+        # Process input experiment number and scan list
+        try:
+            r = self._uiGetExpScanTabMultiScans()
+            exp_no = r[0]
+            scan_list = r[1]
+        except NotImplementedError as e:
+            self._logError(str(e))
+            return False
+
+        # Re-process the data
+        if new_mode == 'Plot Raw':
+            if self._multiScanList is None or self._multiScanExp is None:
+                raise NotImplementedError('Experiment and scan list are not set up for plot raw.')
+            self._myControl.scale_to_raw_monitor_counts(self._multiScanExp, self._multiScanList, min_x, max_x, bin_size)
+        else:
+            self._myControl.reset_to_normalized(self._multiScanExp, self._multiScanList, min_x, max_x, bin_size)
+
+        # Clear image
+        canvas = self.ui.graphicsView_mergeRun
+        canvas.clearAllLines()
+        canvas.clearCanvas()
+        canvas.resetLineColorStyle()
+
+        # Plot data
+        unit = str(self.ui.comboBox_mscanUnit.currentText())
+        xlabel = self._getXLabelFromUnit(unit)
+
+        for scan_no in scan_list:
+            label = "Exp %s Scan %s"%(str(exp_no), str(scan_no))
+            self._plotReducedData(exp_no, scan_no, canvas, xlabel, label=label, clearcanvas=False)
+        # END_FOR
+
+        # Change the button name
+        if new_mode == 'Plot Raw':
+            self.ui.pushButton_plotRawMultiScans.setText('Plot Normalized')
+        else:
+            self.ui.pushButton_plotRawMultiScans.setText('Plot Raw')
+
+        return
+
 
     def doPlotRawPtMain(self):
         """ Plot current raw detector signal for a specific Pt.
@@ -1069,7 +1260,7 @@ class MainWindow(QtGui.QMainWindow):
             self._logError("Unable to plot previous raw detector \
                     because Pt. or Detector ID has not been set up yet.")
             return
-        # ENDIFELSE
+        # EndIfElse
 
         # Get plot mode and plot
         plotmode = str(self.ui.comboBox_rawDetMode.currentText())
@@ -1084,8 +1275,18 @@ class MainWindow(QtGui.QMainWindow):
 
         return
 
+    def do_enable_excluded_dets(self):
+        """ Enable or disable the line editor for excluded detectors
+        :return:
+        """
+        if self.ui.checkBox_useDetExcludeFile.isChecked() is True:
+            self.ui.lineEdit_detExcluded.setEnabled(True)
+        else:
+            self.ui.lineEdit_detExcluded.setDisabled(True)
+
+        return
 
-    def doPlotRawPtPrev(self):
+    def do_plot_raw_pt_prev(self):
         """ Plot previous raw detector
         """
         # Validate input
@@ -1109,13 +1310,13 @@ class MainWindow(QtGui.QMainWindow):
 
         return
 
-    def doPlotSampleLog(self):
+    def do_plot_sample_log(self):
         """ Plot sample log vs. Pt. in tab 'Individual Detector'
         """
-        expno =  int(self.ui.lineEdit_expNo.text())
+        expNo =  int(self.ui.lineEdit_expNo.text())
         scanno = int(self.ui.lineEdit_scanNo.text())
         logname = str(self.ui.comboBox_indvDetYLabel.currentText())
-        self._plotSampleLog(expno, scanno, logname)
+        self._plotSampleLog(expNo, scanno, logname)
 
         return
 
@@ -1159,14 +1360,18 @@ class MainWindow(QtGui.QMainWindow):
         except NotImplementedError as e:
             self._logError(str(e))
             return False
+        else:
+            self._multiScanExp = expno
+            self._multiScanList = scanlist
 
         # Reduce and plot data
         unit = str(self.ui.comboBox_mscanUnit.currentText())
         xlabel = self._getXLabelFromUnit(unit)
 
         canvas = self.ui.graphicsView_mergeRun
-        canvas.clearAllLines()
+        # canvas.clearAllLines() NO NEED
         canvas.clearCanvas()
+        canvas.resetLineColorStyle()
 
         for scan in scanlist:
             r = self._uiReduceData(3, unit, expno, scan)
@@ -1420,9 +1625,12 @@ class MainWindow(QtGui.QMainWindow):
 
 
         if x is not None and y is not None:
-
+            # mouse is clicked within graph
             if button == 1:
-                msg = "You've clicked on a bar with coords:\n %f, %f\n and button %d" % (x, y, button)
+                msg = "Mouse 1: You've clicked on a bar with coords:\n %f, %f\n and button %d" % (x, y, button)
+                print msg
+            elif button == 2:
+                msg = "Mouse 2: You've clicked on a bar with coords:\n %f, %f\n and button %d" % (x, y, button)
                 QtGui.QMessageBox.information(self, "Click!", msg)
 
             elif button == 3:
@@ -1444,55 +1652,102 @@ class MainWindow(QtGui.QMainWindow):
 
         return
 
-
-
     def on_mouseMotion(self, event):
+        """ Event handler for mouse being detected to move
         """
-        """
-        #prex = self._viewMerge_X
-        prey = self._viewMerge_Y
+        # prev_x = self._viewMerge_X
+        # prev_y = self._viewMerge_Y
 
         curx = event.xdata
         cury = event.ydata
-        if curx is None or cury  is None:
+        if curx is None or cury is None:
             return
 
         self._viewMerge_X = event.xdata
         self._viewMerge_Y = event.ydata
 
-        if prey is None or int(prey) != int(self._viewMerge_Y):
-            print "Mouse is moving to ", event.xdata, event.ydata
+        #if prey is None or int(prey) != int(self._viewMerge_Y):
+        #    print "Mouse is moving to ", event.xdata, event.ydata
 
         return
 
-
     def addSomething(self):
         """
         """
+        # FUTURE - Need to implement how to deal with this
         print "Add scan back to merge"
 
         return
 
-
     def rmSomething(self):
         """
         """
-        print "Remove a scan from mergin."
+        # FUTURE - Need to implement how to deal with this
+        print "Remove a scan from merged data."
 
         return
 
     #--------------------------------------------------------------------------
     # Private methods to plot data
     #--------------------------------------------------------------------------
+    def _plotIndividualDetCountsVsSampleLog(self, expno, scanno, detid, samplename, raw=True):
+        """ Plot one specific detector's counts vs. one specified sample log's value
+        along with all Pts.
+        For example: detector 11's counts vs. sample_b's value
+        :param expno:
+        :param scanno:
+        :param detid:
+        :param samplename:
+        :param raw: boolean whether the output is normalized by monitor counts
+        :return:
+        """
+        # Validate input
+        try:
+            expno = int(expno)
+            scanno = int(scanno)
+            detid = int(detid)
+            samplename = str(samplename)
+        except ValueError:
+            raise NotImplementedError("ExpNo, ScanNo or DetID is not integer.")
 
-    def _plotIndividualDetCounts(self, expno, scanno, detid, xaxis):
+        # Get the array for detector counts vs. sample log value by mapping Pt.
+        vecx, vecy = self._myControl.getIndividualDetCountsVsSample(expno, scanno,
+                                                                    detid, samplename, raw)
+
+        # Clear canvas
+        self.ui.graphicsView_indvDet.clearCanvas()
+
+        # Plot
+        marker, color = self.ui.graphicsView_indvDet.getNextLineMarkerColorCombo()
+        self.ui.graphicsView_indvDet.add_plot1d(vec_x=vecx,
+                                                vec_y=vecy,
+                                                marker=marker,
+                                                color=color,
+                                                x_label=samplename,
+                                                y_label='Counts',
+                                                label='DetID = %d'%(detid))
+
+        # FUTURE: In future, need to find out how to use self._graphIndDevMode
+        # self._graphIndDevMode = (samplename, 'Counts')
+        return
+
+    def _plot_individual_detector_counts(self, expno, scanno, detid, xaxis, resetboundary=False):
         """ Plot a specific detector's counts along all experiment points (pt)
+        :param expno:
+        :param scanno:
+        :param detid:
+        :param xaxis:
+        :param resetboundary:
+        :return:
         """
         # Validate input
         expno = int(expno)
         scanno = int(scanno)
         detid = int(detid)
 
+        plot_error_bar = self.ui.checkBox_indDetErrorBar.isChecked()
+        plot_normal = self.ui.checkBox_indDetNormByMon.isChecked()
+
         # Reject if data is not loaded
         if self._myControl.hasDataLoaded(expno, scanno) is False:
             self._logError("Data file for Exp %d Scan %d has not been loaded." % (expno, scanno))
@@ -1504,33 +1759,56 @@ class MainWindow(QtGui.QMainWindow):
             self._tabLineDict[canvas] = []
 
         # get data
-        self._logNotice("X-axis is %s."%(xaxis))
-        vecx, vecy = self._myControl.getIndividualDetCounts(expno, scanno, detid, xaxis)
+        self._logNotice("Input x-axis is '%s' for plotting individual detector's counts."%(xaxis))
+        if len(xaxis) == 0:
+            xaxis = None
+        vecx, vecy = self._myControl.getIndividualDetCounts(expno, scanno, detid, xaxis, plot_normal)
+        if isinstance(vecx, numpy.ndarray) is False:
+            raise NotImplementedError('vecx, vecy must be numpy arrays.')
+        if plot_error_bar is True:
+            y_err = numpy.sqrt(vecy)
+        else:
+            y_err = None
 
         # Plot to canvas
         marker, color = canvas.getNextLineMarkerColorCombo()
-        if xaxis == "":
+        if xaxis == "" or xaxis == "2theta/Scattering Angle":
             xlabel = r'$2\theta$'
         else:
-            xlabel = "Pt."
+            #xlabel = "Pt."
+            xlabel = xaxis
+        # FUTURE - If it works with any way of plotting, then refactor Pt. with any other sample names
 
         label = "Detector ID: %d" % (detid)
 
-        if self._tabLineDict[canvas].count( (expno, scanno, detid) ) == 0:
-            canvas.addPlot(vecx, vecy, marker=marker, color=color, xlabel=xlabel, \
-                ylabel='Counts',label=label)
-            self._tabLineDict[canvas].append( (expno, scanno, detid) )
-
-            # auto setup for image boundary
-            xmin = min(min(vecx), canvas.getXLimit()[0])
-            xmax = max(max(vecx), canvas.getXLimit()[1])
-            ymin = min(min(vecy), canvas.getYLimit()[0])
-            ymax = max(max(vecy), canvas.getYLimit()[1])
+        if self._tabLineDict[canvas].count((expno, scanno, detid)) == 0:
+            canvas.add_plot1d(vecx, vecy, marker=marker, color=color, x_label=xlabel,
+                              y_label='Counts', label=label, y_err=y_err)
+            self._tabLineDict[canvas].append((expno, scanno, detid))
+
+            if resetboundary is True:
+                # Set xmin and xmax about the data for first time
+                xmin = min(vecx)
+                xmax = max(vecx)
+                ymin = min(vecy)
+                ymax = max(vecy)
+                resetboundary = False
+            else:
+                # auto setup for image boundary
+                xmin = min(min(vecx), canvas.getXLimit()[0])
+                xmax = max(max(vecx), canvas.getXLimit()[1])
+                ymin = min(min(vecy), canvas.getYLimit()[0])
+                ymax = max(max(vecy), canvas.getYLimit()[1])
+            # ENDIFELSE
 
             dx = xmax-xmin
             dy = ymax-ymin
             canvas.setXYLimit(xmin-dx*0.0001, xmax+dx*0.0001, ymin-dy*0.0001, ymax+dy*0.0001)
 
+        # Set canvas mode
+        # FUTURE: Consider how to use self._graphIndDevMode in future
+        # self._graphIndDevMode = (xlabel, 'Counts')
+
         return True
 
 
@@ -1546,7 +1824,7 @@ class MainWindow(QtGui.QMainWindow):
             if pos >= rangex[0] and pos <= rangex[1]:
                 vecx = numpy.array([pos, pos])
                 vecy = numpy.array([rangey[0], rangey[1]])
-                canvas.addPlot(vecx, vecy, color='black', linestyle='--')
+                canvas.add_plot1d(vecx, vecy, color='black', line_style='--')
         # ENDFOR
 
         return
@@ -1612,8 +1890,8 @@ class MainWindow(QtGui.QMainWindow):
                 continue
 
             marker, color = canvas.getNextLineMarkerColorCombo()
-            canvas.addPlot(vecx, vecy, marker=marker, color=color, xlabel=unit, \
-                    ylabel='intensity',label=label)
+            canvas.add_plot1d(vecx, vecy, marker=marker, color=color, x_label=unit, \
+                    y_label='intensity',label=label)
 
             # set up line tuple
             self._tabLineDict[canvas].append( (expno, scanno, ptno) )
@@ -1654,8 +1932,8 @@ class MainWindow(QtGui.QMainWindow):
         marker, color = canvas.getNextLineMarkerColorCombo()
         xlabel = self._getXLabelFromUnit(self.ui.comboBox_mscanUnit.currentText())
 
-        canvas.addPlot(vecx, vecy, marker=marker, color=color,
-            xlabel=xlabel, ylabel='intensity',label=label)
+        canvas.add_plot1d(vecx, vecy, marker=marker, color=color,
+            x_label=xlabel, y_label='intensity',label=label)
 
         xmax = max(vecx)
         xmin = min(vecx)
@@ -1669,12 +1947,9 @@ class MainWindow(QtGui.QMainWindow):
 
         return
 
-
-
     def _plotReducedData(self, exp, scan, canvas, xlabel, label=None, clearcanvas=True,
-        spectrum=0):
+                         spectrum=0, plot_error=False):
         """ Plot reduced data for exp and scan
-         self._plotReducedData(exp, scan, self.ui.canvas1, clearcanvas, xlabel=self._currUnit, 0, clearcanvas)
         """
         if spectrum != 0:
             raise NotImplementedError("Unable to support spectrum = %d case."%(spectrum))
@@ -1688,12 +1963,18 @@ class MainWindow(QtGui.QMainWindow):
         if clearcanvas is True:
             canvas.clearAllLines()
             canvas.setLineMarkerColorIndex(0)
-            #self.ui.graphicsView_reducedData.clearAllLines()
-            #self._myLineMarkerColorIndex = 0
 
         # plot
-        vecx, vecy = self._myControl.getVectorToPlot(exp, scan)
-
+        vec_x, vec_y = self._myControl.getVectorToPlot(exp, scan)
+        if isinstance(vec_x, numpy.ndarray) is False:
+            vec_x = numpy.array(vec_x)
+            vec_y = numpy.array(vec_y)
+
+        # FUTURE - Should check y_err set up correctly in Mantid or not
+        if plot_error is True:
+            raise RuntimeError('Implement how to return y_err ASAP.')
+        else:
+            y_err = None
 
         # get the marker color for the line
         marker, color = canvas.getNextLineMarkerColorCombo()
@@ -1702,16 +1983,17 @@ class MainWindow(QtGui.QMainWindow):
         if label is None:
             label = "Exp %d Scan %d" % (exp, scan)
 
-        canvas.addPlot(vecx, vecy, marker=marker, color=color,
-            xlabel=xlabel, ylabel='intensity',label=label)
+        canvas.add_plot1d(vec_x, vec_y, marker=marker, color=color,
+                          x_label=xlabel, y_label='intensity',label=label,
+                          y_err=y_err)
 
         if clearcanvas is True:
-            xmax = max(vecx)
-            xmin = min(vecx)
+            xmax = max(vec_x)
+            xmin = min(vec_x)
             dx = xmax-xmin
 
-            ymax = max(vecy)
-            ymin = min(vecy)
+            ymax = max(vec_y)
+            ymin = min(vec_y)
             dy = ymax-ymin
 
             canvas.setXYLimit(xmin-dx*0.1, xmax+dx*0.1, ymin-dy*0.1, ymax+dy*0.1)
@@ -1736,9 +2018,12 @@ class MainWindow(QtGui.QMainWindow):
 
         # pop out the xlabel list
         # REFACTOR - Only need to set up once if previous plot has the same setup
-        floatsamplelognamelist = self._myControl.getSampleLogNames(expno, scanno)
-        self.ui.comboBox_indvDetXLabel.clear()
-        self.ui.comboBox_indvDetXLabel.addItems(floatsamplelognamelist)
+
+        if self.ui.comboBox_indvDetXLabel.count() == 0:
+            floatsamplelognamelist = self._myControl.getSampleLogNames(expno, scanno)
+            self.ui.comboBox_indvDetXLabel.clear()
+            self.ui.comboBox_indvDetXLabel.addItems(floatsamplelognamelist)
+            raise RuntimeError("This X-label combo box should be set up during loading data before.")
 
         xlabel=str(self.ui.comboBox_indvDetXLabel.currentText())
 
@@ -1747,7 +2032,9 @@ class MainWindow(QtGui.QMainWindow):
 
         # Plot to canvas
         canvas = self.ui.graphicsView_indvDet
-        canvas.clearAllLines()
+        # FUTURE - Clear canvas (think of a case that no need to clear canvas)
+        canvas.clearCanvas()
+        # canvas.clearAllLines()
 
         marker, color = canvas.getNextLineMarkerColorCombo()
         if xlabel is None:
@@ -1755,8 +2042,8 @@ class MainWindow(QtGui.QMainWindow):
 
         label = samplelogname
 
-        canvas.addPlot(vecx, vecy, marker=marker, color=color, xlabel=xlabel, \
-            ylabel='Counts',label=label)
+        canvas.add_plot1d(vecx, vecy, marker=marker, color=color, x_label=xlabel, \
+            y_label='Counts',label=label)
 
         # auto setup for image boundary
         xmin = min(vecx)
@@ -1792,8 +2079,10 @@ class MainWindow(QtGui.QMainWindow):
                 vecx, vecyOrig = self._myControl.getVectorToPlot(exp, scan)
                 diffY = vecyOrig - vecy
         except NotImplementedError as e:
-            print '[Error] Unable to retrieve processed vanadium spectrum for exp %d scan %d.  \
-                    Reason: %s' % (exp, scan, str(e))
+            errmsg = '[Error] Unable to retrieve processed vanadium spectrum for exp %d scan %d. ' \
+                     'Reason: %s' % (exp, scan, str(e))
+            QtGui.QMessageBox.information(self, "Return!", errmsg)
+
             return
 
         # Get to know whether it is required to clear the image
@@ -1812,12 +2101,12 @@ class MainWindow(QtGui.QMainWindow):
             marker, color = canvas.getNextLineMarkerColorCombo()
 
         # plot
-        canvas.addPlot(vecx, vecy, marker=marker, color=color,
-            xlabel=xlabel, ylabel='intensity',label=label)
+        canvas.add_plot1d(vecx, vecy, marker=marker, color=color,
+            x_label=xlabel, y_label='intensity',label=label)
 
         if TempData is False:
-            canvas.addPlot(vecx, diffY, marker='+', color='green',
-                xlabel=xlabel, ylabel='intensity',label='Diff')
+            canvas.add_plot1d(vecx, diffY, marker='+', color='green',
+                x_label=xlabel, y_label='intensity',label='Diff')
 
         # reset canvas limits
         if clearcanvas is True:
@@ -1843,7 +2132,7 @@ class MainWindow(QtGui.QMainWindow):
         # Get on hold of raw data file
         useserver = self.ui.radioButton_useServer.isChecked()
         uselocal = self.ui.radioButton_useLocal.isChecked()
-        if (useserver and uselocal) is False:
+        if useserver == uselocal:
             self._logError("It is logically wrong to set up server/local dir for data.")
             useserver = True
             uselocal = False
@@ -1865,8 +2154,8 @@ class MainWindow(QtGui.QMainWindow):
                 invalidcache = cachedir
                 cachedir = os.getcwd()
                 self.ui.lineEdit_cache.setText(cachedir)
-                self._logWarning("Cache directory %s is not valid. \
-                    Using current workspace directory %s as cache." % (invalidcache, cachedir) )
+                self._logWarning("Cache directory %s is not valid. "
+                                 "Using current workspace directory %s as cache." % (invalidcache, cachedir) )
 
             filename = '%s_exp%04d_scan%04d.dat' % (self._instrument.upper(), exp, scan)
             srcFileName = os.path.join(cachedir, filename)
@@ -2084,8 +2373,8 @@ class MainWindow(QtGui.QMainWindow):
         try:
             # rebinned = self._myControl.rebin(expno, scanno, unit, wavelength, xmin, binsize, xmax)
             excludeddetlist = self._uiGetExcludedDetectors()
-            self._myControl.reduceSpicePDData(expno, scanno, \
-                    unit, xmin, xmax, binsize, wavelength, excludeddetlist, scalefactor)
+            self._myControl.reduceSpicePDData(expno, scanno,
+                                              unit, xmin, xmax, binsize, wavelength, excludeddetlist, scalefactor)
 
             # Record binning
             self._tabBinParamDict[itab] = [xmin, binsize, xmax]
@@ -2154,19 +2443,21 @@ class MainWindow(QtGui.QMainWindow):
     def _logError(self, errinfo):
         """ Log error information
         """
-        print "Log(Error): %s" % (errinfo)
-
+        QtGui.QMessageBox.information(self, "Click!", errinfo)
 
-    def _logNotice(self, errinfo):
+    def _logNotice(self, loginfo):
         """ Log error information
         """
-        print "Log(Notice): %s" % (errinfo)
+        msg = '[Notice] %s' % loginfo
+        print msg
+        # QtGui.QMessageBox.information(self, "Click!", msg)
 
 
-    def _logWarning(self, errinfo):
+    def _logWarning(self, warning_info):
         """ Log error information
         """
-        print "Log(Warning): %s" % (errinfo)
+        msg = "[Warning]: %s" % (warning_info)
+        QtGui.QMessageBox.information(self, "OK!", msg)
 
         return
 
diff --git a/Code/Mantid/scripts/HFIRPowderReduction/HfirUtility.py b/Code/Mantid/scripts/HFIRPowderReduction/HfirUtility.py
index 58e2bfc7ed16537114b2c57b54674882a0c8d264..7bd3d815aaba75d551f2ca01477bf3374f5400b8 100644
--- a/Code/Mantid/scripts/HFIRPowderReduction/HfirUtility.py
+++ b/Code/Mantid/scripts/HFIRPowderReduction/HfirUtility.py
@@ -114,6 +114,12 @@ def parseDetEffCorrFile(vancorrfname):
 
 def parseDetExclusionFile(detexludefilename):
     """ Parse excluded detectors file
+    Detector ID from standard HB2A detector exclusion file start from 0,
+    while in the other circumstance, it starts from 1.
+    Therefore Det ID output from here must be plus by 1.
+    Return :: 2-tuple
+      Success: Excluded detector IDs list, empty string
+      Fail: None, error message
     """
     try:
         defile = open(detexludefilename)
@@ -131,7 +137,7 @@ def parseDetExclusionFile(detexludefilename):
         terms = line.split()
         for term in terms:
             try:
-                detid = int(term)
+                detid = int(term) + 1
                 detexcludelist.append(detid)
             except ValueError:
                 break
diff --git a/Code/Mantid/scripts/HFIRPowderReduction/MainWindow.ui b/Code/Mantid/scripts/HFIRPowderReduction/MainWindow.ui
index c9bcd27cc2c4bb8a5071c70f51b3a3e023bce219..19387104a892bc27c6102ad5b8a27211bbbb18fe 100644
--- a/Code/Mantid/scripts/HFIRPowderReduction/MainWindow.ui
+++ b/Code/Mantid/scripts/HFIRPowderReduction/MainWindow.ui
@@ -6,15 +6,15 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>1412</width>
-    <height>1216</height>
+    <width>1107</width>
+    <height>907</height>
    </rect>
   </property>
   <property name="windowTitle">
    <string>MainWindow</string>
   </property>
   <widget class="QWidget" name="centralwidget">
-   <layout class="QGridLayout" name="gridLayout">
+   <layout class="QGridLayout" name="gridLayout_8">
     <item row="0" column="0">
      <layout class="QVBoxLayout" name="verticalLayout">
       <item>
@@ -106,8 +106,11 @@
        </layout>
       </item>
       <item>
-       <layout class="QHBoxLayout" name="horizontalLayout_25">
-        <item>
+       <layout class="QGridLayout" name="gridLayout">
+        <item row="0" column="2">
+         <widget class="QLineEdit" name="lineEdit_vcorrFileName"/>
+        </item>
+        <item row="0" column="0">
          <widget class="QCheckBox" name="checkBox_useDetEffCorr">
           <property name="sizePolicy">
            <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
@@ -126,23 +129,14 @@
           </property>
          </widget>
         </item>
-        <item>
-         <spacer name="horizontalSpacer_15">
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
-          </property>
-          <property name="sizeType">
-           <enum>QSizePolicy::Minimum</enum>
-          </property>
-          <property name="sizeHint" stdset="0">
-           <size>
-            <width>40</width>
-            <height>20</height>
-           </size>
+        <item row="0" column="3">
+         <widget class="QPushButton" name="pushButton_browseVCorrFile">
+          <property name="text">
+           <string>Browse</string>
           </property>
-         </spacer>
+         </widget>
         </item>
-        <item>
+        <item row="0" column="1">
          <widget class="QLabel" name="label_detEffFileName">
           <property name="toolTip">
            <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Vanadium correction file&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
@@ -152,57 +146,21 @@
           </property>
          </widget>
         </item>
-        <item>
-         <widget class="QLineEdit" name="lineEdit_vcorrFileName"/>
-        </item>
-        <item>
-         <widget class="QPushButton" name="pushButton_browseVCorrFile">
+        <item row="1" column="1">
+         <widget class="QLabel" name="label_excFileName">
           <property name="text">
-           <string>Browse</string>
+           <string>Excluded  Detectors File</string>
           </property>
          </widget>
         </item>
-        <item>
+        <item row="0" column="4">
          <widget class="QPushButton" name="pushButton_viewVCorrection">
           <property name="text">
            <string>View Correction</string>
           </property>
          </widget>
         </item>
-        <item>
-         <widget class="QComboBox" name="comboBox_effCorrect">
-          <property name="sizePolicy">
-           <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="toolTip">
-           <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;File name for efficiency correction&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <spacer name="horizontalSpacer_5">
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
-          </property>
-          <property name="sizeType">
-           <enum>QSizePolicy::Expanding</enum>
-          </property>
-          <property name="sizeHint" stdset="0">
-           <size>
-            <width>40</width>
-            <height>20</height>
-           </size>
-          </property>
-         </spacer>
-        </item>
-       </layout>
-      </item>
-      <item>
-       <layout class="QHBoxLayout" name="horizontalLayout_24">
-        <item>
+        <item row="1" column="0">
          <widget class="QCheckBox" name="checkBox_useDetExcludeFile">
           <property name="sizePolicy">
            <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
@@ -216,61 +174,38 @@
             <height>0</height>
            </size>
           </property>
+          <property name="toolTip">
+           <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Apply the exclusion of specified detectors to final data reduction.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+          </property>
           <property name="text">
-           <string>Using Exclusion File</string>
+           <string>Apply Detectors Exclusion</string>
           </property>
          </widget>
         </item>
-        <item>
-         <spacer name="horizontalSpacer_16">
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
-          </property>
-          <property name="sizeType">
-           <enum>QSizePolicy::Preferred</enum>
-          </property>
-          <property name="sizeHint" stdset="0">
-           <size>
-            <width>40</width>
-            <height>20</height>
-           </size>
+        <item row="0" column="5">
+         <widget class="QComboBox" name="comboBox_effCorrect">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
           </property>
-         </spacer>
-        </item>
-        <item>
-         <widget class="QLabel" name="label_excFileName">
-          <property name="text">
-           <string>Excluded  Detectors File</string>
+          <property name="toolTip">
+           <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;File name for efficiency correction&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
           </property>
          </widget>
         </item>
-        <item>
+        <item row="1" column="2">
          <widget class="QLineEdit" name="lineEdit_excludedDetFileName"/>
         </item>
-        <item>
+        <item row="1" column="3">
          <widget class="QPushButton" name="pushButton_browseExcludedDetFile">
           <property name="text">
            <string>Browse</string>
           </property>
          </widget>
         </item>
-        <item>
-         <spacer name="horizontalSpacer_17">
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
-          </property>
-          <property name="sizeType">
-           <enum>QSizePolicy::Preferred</enum>
-          </property>
-          <property name="sizeHint" stdset="0">
-           <size>
-            <width>40</width>
-            <height>20</height>
-           </size>
-          </property>
-         </spacer>
-        </item>
-        <item>
+        <item row="1" column="4">
          <widget class="QLabel" name="label_detExcluded">
           <property name="sizePolicy">
            <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
@@ -289,37 +224,27 @@
           </property>
          </widget>
         </item>
-        <item>
+        <item row="1" column="5">
          <widget class="QLineEdit" name="lineEdit_detExcluded">
           <property name="sizePolicy">
-           <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+           <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
             <horstretch>0</horstretch>
             <verstretch>0</verstretch>
            </sizepolicy>
           </property>
           <property name="minimumSize">
            <size>
-            <width>300</width>
+            <width>20</width>
             <height>0</height>
            </size>
           </property>
          </widget>
         </item>
-        <item>
-         <spacer name="horizontalSpacer_11">
-          <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>
+      <item>
+       <layout class="QHBoxLayout" name="horizontalLayout_25"/>
+      </item>
       <item>
        <layout class="QHBoxLayout" name="horizontalLayout_2">
         <item>
@@ -334,7 +259,7 @@
            <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
           </property>
           <property name="currentIndex">
-           <number>0</number>
+           <number>3</number>
           </property>
           <widget class="QWidget" name="tab_3">
            <attribute name="title">
@@ -475,43 +400,87 @@
                </layout>
               </item>
               <item>
-               <layout class="QHBoxLayout" name="horizontalLayout_12">
+               <layout class="QHBoxLayout" name="horizontalLayout_12"/>
+              </item>
+             </layout>
+            </item>
+           </layout>
+          </widget>
+          <widget class="QWidget" name="tab">
+           <attribute name="title">
+            <string>Normalized</string>
+           </attribute>
+           <layout class="QGridLayout" name="gridLayout_2">
+            <item row="0" column="0">
+             <layout class="QVBoxLayout" name="verticalLayout_2">
+              <item>
+               <layout class="QHBoxLayout" name="horizontalLayout_3">
                 <item>
-                 <widget class="QTextBrowser" name="textBrowser_RawDetInfo">
+                 <widget class="QLabel" name="label_normalizeMonitor">
                   <property name="sizePolicy">
-                   <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+                   <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
+                    <horstretch>0</horstretch>
+                    <verstretch>0</verstretch>
+                   </sizepolicy>
+                  </property>
+                  <property name="minimumSize">
+                   <size>
+                    <width>155</width>
+                    <height>0</height>
+                   </size>
+                  </property>
+                  <property name="text">
+                   <string>Normalization Monitor</string>
+                  </property>
+                 </widget>
+                </item>
+                <item>
+                 <widget class="QLineEdit" name="lineEdit_normalizeMonitor">
+                  <property name="sizePolicy">
+                   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
                     <horstretch>0</horstretch>
                     <verstretch>0</verstretch>
                    </sizepolicy>
                   </property>
+                  <property name="minimumSize">
+                   <size>
+                    <width>300</width>
+                    <height>0</height>
+                   </size>
+                  </property>
                  </widget>
                 </item>
+                <item>
+                 <spacer name="horizontalSpacer_2">
+                  <property name="orientation">
+                   <enum>Qt::Horizontal</enum>
+                  </property>
+                  <property name="sizeType">
+                   <enum>QSizePolicy::Expanding</enum>
+                  </property>
+                  <property name="sizeHint" stdset="0">
+                   <size>
+                    <width>40</width>
+                    <height>20</height>
+                   </size>
+                  </property>
+                 </spacer>
+                </item>
                </layout>
               </item>
-             </layout>
-            </item>
-           </layout>
-          </widget>
-          <widget class="QWidget" name="tab_5">
-           <attribute name="title">
-            <string>Individual Detector</string>
-           </attribute>
-           <layout class="QGridLayout" name="gridLayout_7">
-            <item row="0" column="0">
-             <layout class="QVBoxLayout" name="verticalLayout_8">
               <item>
-               <layout class="QHBoxLayout" name="horizontalLayout_21">
+               <layout class="QHBoxLayout" name="horizontalLayout_22">
                 <item>
-                 <widget class="QLabel" name="label_11">
+                 <widget class="QLabel" name="label_outputFormat">
                   <property name="text">
-                   <string>Detector ID</string>
+                   <string>Save As</string>
                   </property>
                  </widget>
                 </item>
                 <item>
-                 <widget class="QLineEdit" name="lineEdit_detID">
+                 <widget class="QComboBox" name="comboBox_outputFormat">
                   <property name="sizePolicy">
-                   <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                   <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
                     <horstretch>0</horstretch>
                     <verstretch>0</verstretch>
                    </sizepolicy>
@@ -519,14 +488,17 @@
                  </widget>
                 </item>
                 <item>
-                 <widget class="QLabel" name="label_17">
+                 <widget class="QLineEdit" name="lineEdit_outputFileName"/>
+                </item>
+                <item>
+                 <widget class="QPushButton" name="pushButton_saveData">
                   <property name="text">
-                   <string>Detector IDs From 1 to 44</string>
+                   <string>Save</string>
                   </property>
                  </widget>
                 </item>
                 <item>
-                 <spacer name="horizontalSpacer_4">
+                 <spacer name="horizontalSpacer_14">
                   <property name="orientation">
                    <enum>Qt::Horizontal</enum>
                   </property>
@@ -541,300 +513,35 @@
                </layout>
               </item>
               <item>
-               <layout class="QHBoxLayout" name="horizontalLayout_17">
+               <layout class="QHBoxLayout" name="horizontalLayout_5">
                 <item>
-                 <layout class="QHBoxLayout" name="horizontalLayout_23">
+                 <layout class="QGridLayout" name="gridLayout_reductionView">
+                  <item row="0" column="0">
+                   <widget class="MplFigureCanvas" name="graphicsView_reducedData">
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                   </widget>
+                  </item>
+                 </layout>
+                </item>
+                <item>
+                 <layout class="QVBoxLayout" name="verticalLayout_3">
                   <item>
-                   <layout class="QVBoxLayout" name="verticalLayout_13">
+                   <layout class="QHBoxLayout" name="horizontalLayout_6">
                     <item>
-                     <widget class="MplFigureCanvas" name="graphicsView_indvDet">
+                     <widget class="QLabel" name="label_18">
                       <property name="sizePolicy">
-                       <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+                       <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
                         <horstretch>0</horstretch>
                         <verstretch>0</verstretch>
                        </sizepolicy>
-                      </property>
-                     </widget>
-                    </item>
-                    <item>
-                     <widget class="QComboBox" name="comboBox_indvDetXLabel"/>
-                    </item>
-                   </layout>
-                  </item>
-                  <item>
-                   <layout class="QVBoxLayout" name="verticalLayout_12">
-                    <item>
-                     <widget class="QPushButton" name="pushButton_plotIndvDet">
-                      <property name="text">
-                       <string>Plot</string>
-                      </property>
-                     </widget>
-                    </item>
-                    <item>
-                     <widget class="QCheckBox" name="checkBox_overPlotIndvDet">
-                      <property name="text">
-                       <string>Over Plot Previous</string>
-                      </property>
-                     </widget>
-                    </item>
-                    <item>
-                     <spacer name="verticalSpacer_17">
-                      <property name="orientation">
-                       <enum>Qt::Vertical</enum>
-                      </property>
-                      <property name="sizeType">
-                       <enum>QSizePolicy::Minimum</enum>
-                      </property>
-                      <property name="sizeHint" stdset="0">
-                       <size>
-                        <width>20</width>
-                        <height>40</height>
-                       </size>
-                      </property>
-                     </spacer>
-                    </item>
-                    <item>
-                     <widget class="QPushButton" name="pushButton_plotAllDet">
-                      <property name="enabled">
-                       <bool>false</bool>
-                      </property>
-                      <property name="text">
-                       <string>Plot All </string>
-                      </property>
-                     </widget>
-                    </item>
-                    <item>
-                     <spacer name="verticalSpacer_14">
-                      <property name="orientation">
-                       <enum>Qt::Vertical</enum>
-                      </property>
-                      <property name="sizeType">
-                       <enum>QSizePolicy::Minimum</enum>
-                      </property>
-                      <property name="sizeHint" stdset="0">
-                       <size>
-                        <width>20</width>
-                        <height>40</height>
-                       </size>
-                      </property>
-                     </spacer>
-                    </item>
-                    <item>
-                     <widget class="QPushButton" name="pushButton_plotPrevDet">
-                      <property name="text">
-                       <string>Previous Detector</string>
-                      </property>
-                     </widget>
-                    </item>
-                    <item>
-                     <widget class="QPushButton" name="pushButton_plotNextDet">
-                      <property name="text">
-                       <string>Next Detector</string>
-                      </property>
-                     </widget>
-                    </item>
-                    <item>
-                     <spacer name="verticalSpacer_18">
-                      <property name="orientation">
-                       <enum>Qt::Vertical</enum>
-                      </property>
-                      <property name="sizeHint" stdset="0">
-                       <size>
-                        <width>20</width>
-                        <height>40</height>
-                       </size>
-                      </property>
-                     </spacer>
-                    </item>
-                    <item>
-                     <widget class="QPushButton" name="pushButton_clearCanvasIndDet">
-                      <property name="text">
-                       <string>Clear</string>
-                      </property>
-                     </widget>
-                    </item>
-                    <item>
-                     <spacer name="verticalSpacer_15">
-                      <property name="orientation">
-                       <enum>Qt::Vertical</enum>
-                      </property>
-                      <property name="sizeHint" stdset="0">
-                       <size>
-                        <width>20</width>
-                        <height>40</height>
-                       </size>
-                      </property>
-                     </spacer>
-                    </item>
-                    <item>
-                     <widget class="QComboBox" name="comboBox_indvDetYLabel"/>
-                    </item>
-                    <item>
-                     <widget class="QPushButton" name="pushButton_plotLog">
-                      <property name="text">
-                       <string>Plot Sample Log</string>
-                      </property>
-                     </widget>
-                    </item>
-                    <item>
-                     <spacer name="verticalSpacer_16">
-                      <property name="orientation">
-                       <enum>Qt::Vertical</enum>
-                      </property>
-                      <property name="sizeHint" stdset="0">
-                       <size>
-                        <width>20</width>
-                        <height>40</height>
-                       </size>
-                      </property>
-                     </spacer>
-                    </item>
-                   </layout>
-                  </item>
-                 </layout>
-                </item>
-               </layout>
-              </item>
-             </layout>
-            </item>
-           </layout>
-          </widget>
-          <widget class="QWidget" name="tab">
-           <attribute name="title">
-            <string>Normalized</string>
-           </attribute>
-           <layout class="QGridLayout" name="gridLayout_2">
-            <item row="0" column="0">
-             <layout class="QVBoxLayout" name="verticalLayout_2">
-              <item>
-               <layout class="QHBoxLayout" name="horizontalLayout_3">
-                <item>
-                 <widget class="QLabel" name="label_normalizeMonitor">
-                  <property name="sizePolicy">
-                   <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
-                    <horstretch>0</horstretch>
-                    <verstretch>0</verstretch>
-                   </sizepolicy>
-                  </property>
-                  <property name="minimumSize">
-                   <size>
-                    <width>155</width>
-                    <height>0</height>
-                   </size>
-                  </property>
-                  <property name="text">
-                   <string>Normalization Monitor</string>
-                  </property>
-                 </widget>
-                </item>
-                <item>
-                 <widget class="QLineEdit" name="lineEdit_normalizeMonitor">
-                  <property name="sizePolicy">
-                   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-                    <horstretch>0</horstretch>
-                    <verstretch>0</verstretch>
-                   </sizepolicy>
-                  </property>
-                  <property name="minimumSize">
-                   <size>
-                    <width>300</width>
-                    <height>0</height>
-                   </size>
-                  </property>
-                 </widget>
-                </item>
-                <item>
-                 <spacer name="horizontalSpacer_2">
-                  <property name="orientation">
-                   <enum>Qt::Horizontal</enum>
-                  </property>
-                  <property name="sizeType">
-                   <enum>QSizePolicy::Expanding</enum>
-                  </property>
-                  <property name="sizeHint" stdset="0">
-                   <size>
-                    <width>40</width>
-                    <height>20</height>
-                   </size>
-                  </property>
-                 </spacer>
-                </item>
-               </layout>
-              </item>
-              <item>
-               <layout class="QHBoxLayout" name="horizontalLayout_22">
-                <item>
-                 <widget class="QLabel" name="label_outputFormat">
-                  <property name="text">
-                   <string>Save As</string>
-                  </property>
-                 </widget>
-                </item>
-                <item>
-                 <widget class="QComboBox" name="comboBox_outputFormat">
-                  <property name="sizePolicy">
-                   <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-                    <horstretch>0</horstretch>
-                    <verstretch>0</verstretch>
-                   </sizepolicy>
-                  </property>
-                 </widget>
-                </item>
-                <item>
-                 <widget class="QLineEdit" name="lineEdit_outputFileName"/>
-                </item>
-                <item>
-                 <widget class="QPushButton" name="pushButton_saveData">
-                  <property name="text">
-                   <string>Save</string>
-                  </property>
-                 </widget>
-                </item>
-                <item>
-                 <spacer name="horizontalSpacer_14">
-                  <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>
-              <item>
-               <layout class="QHBoxLayout" name="horizontalLayout_5">
-                <item>
-                 <layout class="QGridLayout" name="gridLayout_reductionView">
-                  <item row="0" column="0">
-                   <widget class="MplFigureCanvas" name="graphicsView_reducedData">
-                    <property name="sizePolicy">
-                     <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
-                      <horstretch>0</horstretch>
-                      <verstretch>0</verstretch>
-                     </sizepolicy>
-                    </property>
-                   </widget>
-                  </item>
-                 </layout>
-                </item>
-                <item>
-                 <layout class="QVBoxLayout" name="verticalLayout_3">
-                  <item>
-                   <layout class="QHBoxLayout" name="horizontalLayout_6">
-                    <item>
-                     <widget class="QLabel" name="label_18">
-                      <property name="sizePolicy">
-                       <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
-                        <horstretch>0</horstretch>
-                        <verstretch>0</verstretch>
-                       </sizepolicy>
-                      </property>
-                      <property name="text">
-                       <string>Binning To Unit</string>
+                      </property>
+                      <property name="text">
+                       <string>Binning To Unit</string>
                       </property>
                      </widget>
                     </item>
@@ -1083,6 +790,308 @@
             </item>
            </layout>
           </widget>
+          <widget class="QWidget" name="tab_5">
+           <attribute name="title">
+            <string>Individual Detector</string>
+           </attribute>
+           <layout class="QGridLayout" name="gridLayout_7">
+            <item row="0" column="0">
+             <layout class="QVBoxLayout" name="verticalLayout_8">
+              <item>
+               <layout class="QHBoxLayout" name="horizontalLayout_21">
+                <item>
+                 <widget class="QLabel" name="label_11">
+                  <property name="text">
+                   <string>Detector ID</string>
+                  </property>
+                 </widget>
+                </item>
+                <item>
+                 <widget class="QLineEdit" name="lineEdit_detID">
+                  <property name="sizePolicy">
+                   <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                    <horstretch>0</horstretch>
+                    <verstretch>0</verstretch>
+                   </sizepolicy>
+                  </property>
+                  <property name="minimumSize">
+                   <size>
+                    <width>200</width>
+                    <height>0</height>
+                   </size>
+                  </property>
+                 </widget>
+                </item>
+                <item>
+                 <widget class="QLabel" name="label_17">
+                  <property name="text">
+                   <string>Detector IDs From 1 to 44</string>
+                  </property>
+                 </widget>
+                </item>
+                <item>
+                 <spacer name="horizontalSpacer_18">
+                  <property name="orientation">
+                   <enum>Qt::Horizontal</enum>
+                  </property>
+                  <property name="sizeHint" stdset="0">
+                   <size>
+                    <width>40</width>
+                    <height>20</height>
+                   </size>
+                  </property>
+                 </spacer>
+                </item>
+                <item>
+                 <widget class="QCheckBox" name="checkBox_indDetNormByMon">
+                  <property name="toolTip">
+                   <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Whether the output counts are normalized by monitor counts&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+                  </property>
+                  <property name="text">
+                   <string>Normalized by Monitor</string>
+                  </property>
+                 </widget>
+                </item>
+                <item>
+                 <widget class="QCheckBox" name="checkBox_indDetErrorBar">
+                  <property name="text">
+                   <string>Error Bar</string>
+                  </property>
+                 </widget>
+                </item>
+                <item>
+                 <spacer name="horizontalSpacer_4">
+                  <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>
+              <item>
+               <layout class="QHBoxLayout" name="horizontalLayout_17">
+                <item>
+                 <layout class="QHBoxLayout" name="horizontalLayout_23">
+                  <item>
+                   <layout class="QVBoxLayout" name="verticalLayout_13">
+                    <item>
+                     <widget class="MplFigureCanvas" name="graphicsView_indvDet">
+                      <property name="sizePolicy">
+                       <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+                        <horstretch>0</horstretch>
+                        <verstretch>0</verstretch>
+                       </sizepolicy>
+                      </property>
+                     </widget>
+                    </item>
+                   </layout>
+                  </item>
+                  <item>
+                   <layout class="QVBoxLayout" name="verticalLayout_12">
+                    <item>
+                     <spacer name="verticalSpacer_23">
+                      <property name="orientation">
+                       <enum>Qt::Vertical</enum>
+                      </property>
+                      <property name="sizeHint" stdset="0">
+                       <size>
+                        <width>20</width>
+                        <height>40</height>
+                       </size>
+                      </property>
+                     </spacer>
+                    </item>
+                    <item>
+                     <widget class="QPushButton" name="pushButton_plotIndvDet">
+                      <property name="toolTip">
+                       <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Plot detector(s)'s counts against specified X-axis&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+                      </property>
+                      <property name="text">
+                       <string>Plot Detector Counts</string>
+                      </property>
+                     </widget>
+                    </item>
+                    <item>
+                     <spacer name="verticalSpacer_24">
+                      <property name="orientation">
+                       <enum>Qt::Vertical</enum>
+                      </property>
+                      <property name="sizeType">
+                       <enum>QSizePolicy::Preferred</enum>
+                      </property>
+                      <property name="sizeHint" stdset="0">
+                       <size>
+                        <width>20</width>
+                        <height>40</height>
+                       </size>
+                      </property>
+                     </spacer>
+                    </item>
+                    <item>
+                     <widget class="QLabel" name="label_21">
+                      <property name="text">
+                       <string>X-Axis</string>
+                      </property>
+                      <property name="alignment">
+                       <set>Qt::AlignCenter</set>
+                      </property>
+                     </widget>
+                    </item>
+                    <item>
+                     <widget class="QComboBox" name="comboBox_indvDetXLabel">
+                      <property name="toolTip">
+                       <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Log names for detector's counts to plot with&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+                      </property>
+                     </widget>
+                    </item>
+                    <item>
+                     <widget class="QCheckBox" name="checkBox_overPlotIndvDet">
+                      <property name="text">
+                       <string>Over Plot Previous</string>
+                      </property>
+                     </widget>
+                    </item>
+                    <item>
+                     <spacer name="verticalSpacer_17">
+                      <property name="orientation">
+                       <enum>Qt::Vertical</enum>
+                      </property>
+                      <property name="sizeType">
+                       <enum>QSizePolicy::Minimum</enum>
+                      </property>
+                      <property name="sizeHint" stdset="0">
+                       <size>
+                        <width>20</width>
+                        <height>40</height>
+                       </size>
+                      </property>
+                     </spacer>
+                    </item>
+                    <item>
+                     <widget class="QPushButton" name="pushButton_plotAllDet">
+                      <property name="enabled">
+                       <bool>false</bool>
+                      </property>
+                      <property name="text">
+                       <string>Plot All </string>
+                      </property>
+                     </widget>
+                    </item>
+                    <item>
+                     <spacer name="verticalSpacer_14">
+                      <property name="orientation">
+                       <enum>Qt::Vertical</enum>
+                      </property>
+                      <property name="sizeType">
+                       <enum>QSizePolicy::Minimum</enum>
+                      </property>
+                      <property name="sizeHint" stdset="0">
+                       <size>
+                        <width>20</width>
+                        <height>40</height>
+                       </size>
+                      </property>
+                     </spacer>
+                    </item>
+                    <item>
+                     <widget class="QPushButton" name="pushButton_plotPrevDet">
+                      <property name="text">
+                       <string>Previous Detector</string>
+                      </property>
+                     </widget>
+                    </item>
+                    <item>
+                     <widget class="QPushButton" name="pushButton_plotNextDet">
+                      <property name="text">
+                       <string>Next Detector</string>
+                      </property>
+                     </widget>
+                    </item>
+                    <item>
+                     <spacer name="verticalSpacer_18">
+                      <property name="orientation">
+                       <enum>Qt::Vertical</enum>
+                      </property>
+                      <property name="sizeHint" stdset="0">
+                       <size>
+                        <width>20</width>
+                        <height>40</height>
+                       </size>
+                      </property>
+                     </spacer>
+                    </item>
+                    <item>
+                     <widget class="QPushButton" name="pushButton_clearCanvasIndDet">
+                      <property name="text">
+                       <string>Clear</string>
+                      </property>
+                     </widget>
+                    </item>
+                    <item>
+                     <spacer name="verticalSpacer_15">
+                      <property name="orientation">
+                       <enum>Qt::Vertical</enum>
+                      </property>
+                      <property name="sizeType">
+                       <enum>QSizePolicy::Expanding</enum>
+                      </property>
+                      <property name="sizeHint" stdset="0">
+                       <size>
+                        <width>20</width>
+                        <height>40</height>
+                       </size>
+                      </property>
+                     </spacer>
+                    </item>
+                    <item>
+                     <widget class="QLabel" name="label_6">
+                      <property name="text">
+                       <string>Sample Log</string>
+                      </property>
+                      <property name="alignment">
+                       <set>Qt::AlignCenter</set>
+                      </property>
+                     </widget>
+                    </item>
+                    <item>
+                     <widget class="QComboBox" name="comboBox_indvDetYLabel"/>
+                    </item>
+                    <item>
+                     <widget class="QPushButton" name="pushButton_plotLog">
+                      <property name="text">
+                       <string>Plot Sample Log</string>
+                      </property>
+                     </widget>
+                    </item>
+                    <item>
+                     <spacer name="verticalSpacer_16">
+                      <property name="orientation">
+                       <enum>Qt::Vertical</enum>
+                      </property>
+                      <property name="sizeHint" stdset="0">
+                       <size>
+                        <width>20</width>
+                        <height>40</height>
+                       </size>
+                      </property>
+                     </spacer>
+                    </item>
+                   </layout>
+                  </item>
+                 </layout>
+                </item>
+               </layout>
+              </item>
+             </layout>
+            </item>
+           </layout>
+          </widget>
           <widget class="QWidget" name="tab_merge">
            <attribute name="title">
             <string>Multiple Scans</string>
@@ -1155,13 +1164,6 @@
                 <item>
                  <widget class="QLineEdit" name="lineEdit_exclScans"/>
                 </item>
-                <item>
-                 <widget class="QPushButton" name="pushButton_loadMultData">
-                  <property name="text">
-                   <string>Load All</string>
-                  </property>
-                 </widget>
-                </item>
                 <item>
                  <spacer name="horizontalSpacer_13">
                   <property name="orientation">
@@ -1175,6 +1177,19 @@
                   </property>
                  </spacer>
                 </item>
+                <item>
+                 <widget class="QPushButton" name="pushButton_loadMultData">
+                  <property name="minimumSize">
+                   <size>
+                    <width>100</width>
+                    <height>0</height>
+                   </size>
+                  </property>
+                  <property name="text">
+                   <string>Load Data</string>
+                  </property>
+                 </widget>
+                </item>
                </layout>
               </item>
               <item>
@@ -1234,6 +1249,9 @@
                     <verstretch>0</verstretch>
                    </sizepolicy>
                   </property>
+                  <property name="contextMenuPolicy">
+                   <enum>Qt::NoContextMenu</enum>
+                  </property>
                  </widget>
                 </item>
                 <item>
@@ -1257,13 +1275,6 @@
                   </item>
                  </widget>
                 </item>
-                <item>
-                 <widget class="QPushButton" name="pushButton_mscanBin">
-                  <property name="text">
-                   <string>Bin Data</string>
-                  </property>
-                 </widget>
-                </item>
                 <item>
                  <spacer name="horizontalSpacer_3">
                   <property name="orientation">
@@ -1278,15 +1289,18 @@
                  </spacer>
                 </item>
                 <item>
-                 <widget class="QLabel" name="label_mergeMessage">
-                  <property name="sizePolicy">
-                   <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-                    <horstretch>0</horstretch>
-                    <verstretch>0</verstretch>
-                   </sizepolicy>
+                 <widget class="QPushButton" name="pushButton_mscanBin">
+                  <property name="minimumSize">
+                   <size>
+                    <width>100</width>
+                    <height>0</height>
+                   </size>
+                  </property>
+                  <property name="toolTip">
+                   <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Rebin the loaded data for&lt;/p&gt;&lt;p&gt;(1) All scans individually;&lt;/p&gt;&lt;p&gt;(2) Spectrum of the merged scans&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
                   </property>
                   <property name="text">
-                   <string>Message</string>
+                   <string>Bin Data</string>
                   </property>
                  </widget>
                 </item>
@@ -1302,14 +1316,33 @@
                  </layout>
                 </item>
                 <item>
-                 <layout class="QVBoxLayout" name="verticalLayout_11">
-                  <item>
-                   <spacer name="verticalSpacer_11">
+                 <layout class="QGridLayout" name="gridLayout_9">
+                  <item row="3" column="0">
+                   <widget class="QPushButton" name="pushButton_view2D">
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="minimumSize">
+                     <size>
+                      <width>100</width>
+                      <height>0</height>
+                     </size>
+                    </property>
+                    <property name="text">
+                     <string>View 2D</string>
+                    </property>
+                   </widget>
+                  </item>
+                  <item row="9" column="0">
+                   <spacer name="verticalSpacer_19">
                     <property name="orientation">
                      <enum>Qt::Vertical</enum>
                     </property>
                     <property name="sizeType">
-                     <enum>QSizePolicy::Preferred</enum>
+                     <enum>QSizePolicy::Expanding</enum>
                     </property>
                     <property name="sizeHint" stdset="0">
                      <size>
@@ -1319,28 +1352,20 @@
                     </property>
                    </spacer>
                   </item>
-                  <item>
-                   <widget class="QPushButton" name="pushButton_viewMScan1D">
-                    <property name="text">
-                     <string>View 1D</string>
-                    </property>
-                   </widget>
-                  </item>
-                  <item>
-                   <widget class="QPushButton" name="pushButton_view2D">
-                    <property name="text">
-                     <string>View 2D</string>
+                  <item row="11" column="0">
+                   <spacer name="verticalSpacer_10">
+                    <property name="orientation">
+                     <enum>Qt::Vertical</enum>
                     </property>
-                   </widget>
-                  </item>
-                  <item>
-                   <widget class="QPushButton" name="pushButton_saveAllIndScans">
-                    <property name="text">
-                     <string>Save All</string>
+                    <property name="sizeHint" stdset="0">
+                     <size>
+                      <width>20</width>
+                      <height>40</height>
+                     </size>
                     </property>
-                   </widget>
+                   </spacer>
                   </item>
-                  <item>
+                  <item row="5" column="0">
                    <spacer name="verticalSpacer_12">
                     <property name="orientation">
                      <enum>Qt::Vertical</enum>
@@ -1353,55 +1378,162 @@
                     </property>
                    </spacer>
                   </item>
-                  <item>
-                   <widget class="QPushButton" name="pushButton_mergeScans">
+                  <item row="2" column="0">
+                   <widget class="QPushButton" name="pushButton_viewMScan1D">
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="minimumSize">
+                     <size>
+                      <width>100</width>
+                      <height>0</height>
+                     </size>
+                    </property>
                     <property name="text">
-                     <string>Merge</string>
+                     <string>View 1D</string>
                     </property>
                    </widget>
                   </item>
-                  <item>
-                   <widget class="QPushButton" name="pushButton_viewMerge">
+                  <item row="0" column="0">
+                   <widget class="QPushButton" name="pushButton_plotRawMultiScans">
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="minimumSize">
+                     <size>
+                      <width>100</width>
+                      <height>0</height>
+                     </size>
+                    </property>
+                    <property name="toolTip">
+                     <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Plot unmerged reduced spectra from multiple scans.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+                    </property>
                     <property name="text">
-                     <string>View Merged</string>
+                     <string>Plot Raw</string>
                     </property>
                    </widget>
                   </item>
-                  <item>
+                  <item row="8" column="0">
                    <widget class="QPushButton" name="pushButton_saveMerge">
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="minimumSize">
+                     <size>
+                      <width>100</width>
+                      <height>0</height>
+                     </size>
+                    </property>
+                    <property name="font">
+                     <font>
+                      <pointsize>10</pointsize>
+                     </font>
+                    </property>
                     <property name="text">
                      <string>Save Merged</string>
                     </property>
                    </widget>
                   </item>
-                  <item>
-                   <spacer name="verticalSpacer_19">
-                    <property name="orientation">
-                     <enum>Qt::Vertical</enum>
-                    </property>
-                    <property name="sizeType">
-                     <enum>QSizePolicy::Preferred</enum>
+                  <item row="7" column="0">
+                   <widget class="QPushButton" name="pushButton_viewMerge">
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
                     </property>
-                    <property name="sizeHint" stdset="0">
+                    <property name="minimumSize">
                      <size>
-                      <width>20</width>
-                      <height>40</height>
+                      <width>100</width>
+                      <height>0</height>
                      </size>
                     </property>
-                   </spacer>
+                    <property name="font">
+                     <font>
+                      <pointsize>10</pointsize>
+                      <weight>50</weight>
+                      <bold>false</bold>
+                     </font>
+                    </property>
+                    <property name="text">
+                     <string>View Merged</string>
+                    </property>
+                   </widget>
                   </item>
-                  <item>
+                  <item row="10" column="0">
                    <widget class="QPushButton" name="pushButton_clearMultCanvas">
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="minimumSize">
+                     <size>
+                      <width>100</width>
+                      <height>0</height>
+                     </size>
+                    </property>
                     <property name="text">
                      <string>Clear</string>
                     </property>
                    </widget>
                   </item>
-                  <item>
-                   <spacer name="verticalSpacer_10">
+                  <item row="4" column="0">
+                   <widget class="QPushButton" name="pushButton_saveAllIndScans">
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="minimumSize">
+                     <size>
+                      <width>100</width>
+                      <height>0</height>
+                     </size>
+                    </property>
+                    <property name="text">
+                     <string>Save All</string>
+                    </property>
+                   </widget>
+                  </item>
+                  <item row="6" column="0">
+                   <widget class="QPushButton" name="pushButton_mergeScans">
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="minimumSize">
+                     <size>
+                      <width>100</width>
+                      <height>0</height>
+                     </size>
+                    </property>
+                    <property name="text">
+                     <string>Merge</string>
+                    </property>
+                   </widget>
+                  </item>
+                  <item row="1" column="0">
+                   <spacer name="verticalSpacer_11">
                     <property name="orientation">
                      <enum>Qt::Vertical</enum>
                     </property>
+                    <property name="sizeType">
+                     <enum>QSizePolicy::Preferred</enum>
+                    </property>
                     <property name="sizeHint" stdset="0">
                      <size>
                       <width>20</width>
@@ -1427,7 +1559,7 @@
                  <widget class="QComboBox" name="comboBox_2"/>
                 </item>
                 <item>
-                 <widget class="QLabel" name="label_7">
+                 <widget class="QLabel" name="label_mergeMessage">
                   <property name="sizePolicy">
                    <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
                     <horstretch>0</horstretch>
@@ -2069,7 +2201,7 @@
     <rect>
      <x>0</x>
      <y>0</y>
-     <width>1412</width>
+     <width>1107</width>
      <height>25</height>
     </rect>
    </property>
diff --git a/Code/Mantid/scripts/HFIRPowderReduction/MplFigureCanvas.py b/Code/Mantid/scripts/HFIRPowderReduction/MplFigureCanvas.py
index 7fae16be58e3ec50bc1beecb8c61116e7c0782a3..793942df5607bc7fb1010f5b5dc95f4d5eb0a701 100644
--- a/Code/Mantid/scripts/HFIRPowderReduction/MplFigureCanvas.py
+++ b/Code/Mantid/scripts/HFIRPowderReduction/MplFigureCanvas.py
@@ -1,48 +1,49 @@
-#pylint: disable=invalid-name,too-many-public-methods,too-many-arguments,non-parent-init-called
+#pylint: disable=invalid-name,too-many-public-methods,too-many-arguments,non-parent-init-called, too-many-branches
 import os
+import numpy as np
 
 from PyQt4 import QtGui
 
 from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
 from matplotlib.backends.backend_qt4agg import NavigationToolbar2QTAgg as NavigationToolbar
 from matplotlib.figure import Figure
+import matplotlib.image
 
 MplLineStyles = ['-' , '--' , '-.' , ':' , 'None' , ' ' , '']
 MplLineMarkers = [
-        ". (point         )",
-        "* (star          )",
-        "x (x             )",
-        "o (circle        )",
-        "s (square        )",
-        "D (diamond       )",
-        ", (pixel         )",
-        "v (triangle_down )",
-        "^ (triangle_up   )",
-        "< (triangle_left )",
-        "> (triangle_right)",
-        "1 (tri_down      )",
-        "2 (tri_up        )",
-        "3 (tri_left      )",
-        "4 (tri_right     )",
-        "8 (octagon       )",
-        "p (pentagon      )",
-        "h (hexagon1      )",
-        "H (hexagon2      )",
-        "+ (plus          )",
-        "d (thin_diamond  )",
-        "| (vline         )",
-        "_ (hline         )",
-        "None (nothing    )"]
+    ". (point         )",
+    "* (star          )",
+    "x (x             )",
+    "o (circle        )",
+    "s (square        )",
+    "D (diamond       )",
+    ", (pixel         )",
+    "v (triangle_down )",
+    "^ (triangle_up   )",
+    "< (triangle_left )",
+    "> (triangle_right)",
+    "1 (tri_down      )",
+    "2 (tri_up        )",
+    "3 (tri_left      )",
+    "4 (tri_right     )",
+    "8 (octagon       )",
+    "p (pentagon      )",
+    "h (hexagon1      )",
+    "H (hexagon2      )",
+    "+ (plus          )",
+    "d (thin_diamond  )",
+    "| (vline         )",
+    "_ (hline         )",
+    "None (nothing    )"]
 
 MplBasicColors = [
-        "black",
-        "red",
-        "blue",
-        "green",
-        "cyan",
-        "magenta",
-        "yellow",
-        "white"]
+    "black",
+    "red",
+    "blue",
+    "green",
+    "cyan",
+    "magenta",
+    "yellow"] #"white"]
 
 
 class MplFigureCanvas(QtGui.QWidget):
@@ -71,10 +72,21 @@ class MplFigureCanvas(QtGui.QWidget):
 
         return
 
-    def addPlot(self, x, y, color=None, label="", xlabel=None, ylabel=None, marker=None, linestyle=None, linewidth=1):
-        """ Add a new plot
-        """
-        self.canvas.addPlot(x, y, color, label, xlabel, ylabel, marker, linestyle, linewidth)
+    def add_plot1d(self, x, y, color=None, label="", x_label=None, y_label=None, marker=None,
+                   linestyle=None, linewidth=1, y_err=None):
+        """ Add a 1D plot to
+        :param x:
+        :param y:
+        :param color:
+        :param label:
+        :param x_label:
+        :param y_label:
+        :param marker:
+        :param linestyle:
+        :param linewidth:
+        :return:
+        """
+        self.canvas.add_plot1d(x, y, color, label, x_label, y_label, marker, linestyle, linewidth, y_err)
 
         return
 
@@ -191,7 +203,13 @@ class MplFigureCanvas(QtGui.QWidget):
         if self._myLineMarkerColorIndex == len(self._myLineMarkerColorList):
             self._myLineMarkerColorIndex = 0
 
-        return (marker, color)
+        return marker, color
+
+    def resetLineColorStyle(self):
+        """ Reset the auto index for line's color and style
+        """
+        self._myLineMarkerColorIndex = 0
+        return
 
     def setXYLimit(self, xmin, xmax, ymin, ymax):
         """ Set X-Y limit automatically
@@ -227,7 +245,7 @@ class Qt4MplCanvas(FigureCanvas):
     def __init__(self, parent):
         """  Initialization
         """
-        # Instantialize matplotlib Figure
+        # Instantiate matplotlib Figure
         self.fig = Figure()
         self.fig.patch.set_facecolor('white')
         self.axes = self.fig.add_subplot(111) # return: matplotlib.axes.AxesSubplot
@@ -237,8 +255,7 @@ class Qt4MplCanvas(FigureCanvas):
         self.setParent(parent)
 
         # Set size policy to be able to expanding and resizable with frame
-        FigureCanvas.setSizePolicy(self, QtGui.QSizePolicy.Expanding,\
-                QtGui.QSizePolicy.Expanding)
+        FigureCanvas.setSizePolicy(self, QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Expanding)
 
         FigureCanvas.updateGeometry(self)
 
@@ -246,50 +263,87 @@ class Qt4MplCanvas(FigureCanvas):
         self._lineDict = {}
         self._lineIndex = 0
 
-        self.colorbar = None
+        # legend and color bar
+        self.colorBar = None
+        # self._myLegend = None
 
         return
 
-    def addPlot(self, x, y, color=None, label="", xlabel=None, ylabel=None, marker=None, linestyle=None, linewidth=1):
-        """ Plot a set of data
-        Argument:
-        - x: numpy array X
-        - y: numpy array Y
-        """
+    def add_plot1d(self, vec_x, vec_y, color=None, label="", x_label=None, y_label=None,
+                   marker=None, line_style=None, line_width=1, y_err=None):
+        """ Add a 1D plot (line) to canvas
+        :param vec_x:
+        :param vec_y:
+        :param color:
+        :param label:
+        :param x_label:
+        :param y_label:
+        :param marker:
+        :param line_style:
+        :param line_width:
+        :param y_err:
+        :return:
+        """
+        # Check input
+        if isinstance(vec_x, np.ndarray) is False or isinstance(vec_y, np.ndarray) is False:
+            raise NotImplementedError('Input vec_x or vec_y for addPlot() must be numpy.array.')
+        plot_error = y_err is not None
+        if plot_error is True:
+            if isinstance(y_err, np.ndarray) is False:
+                raise NotImplementedError('Input y_err must be either None or numpy.array.')
+
+        if len(vec_x) != len(vec_y):
+            raise NotImplementedError('Input vec_x and vec_y must have same size.')
+        if plot_error is True and len(y_err) != len(vec_x):
+            raise NotImplementedError('Input vec_x, vec_y and y_error must have same size.')
+
         # Hold previous data
         self.axes.hold(True)
 
         # process inputs and defaults
-        self.x = x
-        self.y = y
+        # self.x = vec_x
+        # self.y = vec_y
 
         if color is None:
             color = (0,1,0,1)
         if marker is None:
             marker = 'o'
-        if linestyle is None:
-            linestyle = '-'
+        if line_style is None:
+            line_style = '-'
 
         # color must be RGBA (4-tuple)
-        r = self.axes.plot(x, y, color=color, marker=marker, linestyle=linestyle,
-                label=label, linewidth=linewidth) # return: list of matplotlib.lines.Line2D object
+        if plot_error is False:
+            r = self.axes.plot(vec_x, vec_y, color=color, marker=marker, linestyle=line_style,
+                               label=label, linewidth=line_width)
+            # return: list of matplotlib.lines.Line2D object
+        else:
+            r = self.axes.errorbar(vec_x, vec_y, yerr=y_err, color=color, marker=marker, linestyle=line_style,
+                                   label=label, linewidth=line_width)
 
         self.axes.set_aspect('auto')
 
         # set x-axis and y-axis label
-        if xlabel is not None:
-            self.axes.set_xlabel(xlabel, fontsize=20)
-        if ylabel is not None:
-            self.axes.set_ylabel(ylabel, fontsize=20)
+        if x_label is not None:
+            self.axes.set_xlabel(x_label, fontsize=20)
+        if y_label is not None:
+            self.axes.set_ylabel(y_label, fontsize=20)
 
         # set/update legend
         self._setupLegend()
 
         # Register
-        if len(r) == 1:
+        if plot_error is True and len(r) == 3:
+            # plot line with error bar.  r[1] contains all lines
+            self._lineDict[self._lineIndex] = r
+        elif plot_error is False and len(r) == 1:
+            # regular line
             self._lineDict[self._lineIndex] = r[0]
         else:
-            print "Impoooooooooooooooosible!"
+            print "Impoooooooooooooooosible! Number of returned tuple is %d"%(len(r))
+            dbmsg = ''
+            for sub_r in r:
+                dbmsg += 'Type: %s, Value: %s\n' % (str(type(sub_r)), str(sub_r))
+            print dbmsg
         self._lineIndex += 1
 
         # Flush/commit
@@ -312,8 +366,12 @@ class Qt4MplCanvas(FigureCanvas):
         # yticks = [1, 4, 23, 24, 30]
         # self.axes.set_yticks(yticks)
 
+        print "[DBNOW] Before imshow(), number of axes = %d" % (len(self.fig.axes))
+
         # show image
         imgplot = self.axes.imshow(array2d, extent=[xmin,xmax,ymin,ymax], interpolation='none')
+        print "[DBNOW] After imshow(), number of axes = %d" % (len(self.fig.axes))
+
         # set y ticks as an option:
         if yticklabels is not None:
             # it will always label the first N ticks even image is zoomed in
@@ -324,12 +382,13 @@ class Qt4MplCanvas(FigureCanvas):
         self.axes.set_aspect('auto')
 
         # Set color bar.  plt.colorbar() does not work!
-        if self.colorbar is None:
+        if self.colorBar is None:
             # set color map type
             imgplot.set_cmap('spectral')
-            self.colorbar = self.fig.colorbar(imgplot)
+            self.colorBar = self.fig.colorbar(imgplot)
         else:
-            self.colorbar.update_bruteforce(imgplot)
+            self.colorBar.update_bruteforce(imgplot)
+        print "[DBNOW] After colorbar is added, number of axes = %d" % (len(self.fig.axes))
 
         # Flush...
         self._flush()
@@ -344,18 +403,18 @@ class Qt4MplCanvas(FigureCanvas):
         # set aspect to auto mode
         self.axes.set_aspect('auto')
 
-        img = mpimg.imread(str(imagefilename))
+        img = matplotlib.image.imread(str(imagefilename))
         # lum_img = img[:,:,0]
         # FUTURE : refactor for image size, interpolation and origin
         imgplot = self.axes.imshow(img, extent=[0, 1000, 800, 0], interpolation='none', origin='lower')
 
         # Set color bar.  plt.colorbar() does not work!
-        if self.colorbar is None:
+        if self.colorBar is None:
             # set color map type
             imgplot.set_cmap('spectral')
-            self.colorbar = self.fig.colorbar(imgplot)
+            self.colorBar = self.fig.colorbar(imgplot)
         else:
-            self.colorbar.update_bruteforce(imgplot)
+            self.colorBar.update_bruteforce(imgplot)
 
         self._flush()
 
@@ -367,25 +426,58 @@ class Qt4MplCanvas(FigureCanvas):
         """
         for ikey in self._lineDict.keys():
             plot = self._lineDict[ikey]
-            if plot is not None:
-                self.axes.lines.remove(plot)
+            if plot is None:
+                continue
+            if isinstance(plot, tuple) is False:
+                try:
+                    self.axes.lines.remove(plot)
+                except ValueError as e:
+                    print "[Error] Plot %s is not in axes.lines which has %d lines. Error mesage: %s" % (
+                        str(plot), len(self.axes.lines), str(e))
+                self._lineDict[ikey] = None
+            else:
+                # error bar
+                plot[0].remove()
+                for line in plot[1]:
+                    line.remove()
+                for line in plot[2]:
+                    line.remove()
                 self._lineDict[ikey] = None
             # ENDIF(plot)
         # ENDFOR
 
+        # Remove legend
+        # only appied in new version of matplotlib
+        # if self._myLegend is not None:
+        #     self._myLegend.remove()
+
+        self._setupLegend()
+
         self.draw()
 
         return
 
-
     def clearCanvas(self):
-        """ Clear data from canvas
+        """ Clear data including lines and image from canvas
         """
         # clear the image for next operation
         self.axes.hold(False)
 
+        # Clear all lines
+        self.clearAllLines()
+
         # clear image
         self.axes.cla()
+        # Try to clear the color bar
+        if len(self.fig.axes) > 1:
+            self.fig.delaxes(self.fig.axes[1])
+            self.colorBar = None
+            # This clears the space claimed by color bar but destroys sub_plot too.
+            self.fig.clear()
+            # Re-create subplot
+            self.axes = self.fig.add_subplot(111)
+        if len(self.fig.axes) > 0:
+            print "[DBNOW] Type of axes[0] = %s" % (str(type(self.fig.axes[0])))
 
         # flush/commit
         self._flush()
@@ -553,6 +645,7 @@ class Qt4MplCanvas(FigureCanvas):
             location = 'best'
 
         handles, labels = self.axes.get_legend_handles_labels()
+        # self._myLegend =
         self.axes.legend(handles, labels, loc=location)
         # print handles
         # print labels
diff --git a/Code/Mantid/scripts/HFIRPowderReduction/customize.py b/Code/Mantid/scripts/HFIRPowderReduction/customize.py
deleted file mode 100755
index afbbed0bbaa32b2b07af1771651091190e632121..0000000000000000000000000000000000000000
--- a/Code/Mantid/scripts/HFIRPowderReduction/customize.py
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/usr/bin/python
-################################################################################
-# Customize the widigets in a gui python file generated from pyuic4
-################################################################################
-import sys
-import shutil
-
-def main(argv):
-    """ Main
-    """
-    if len(argv) < 2:
-        print "Input: %s [pyqt python file name]" % (argv[0])
-        return
-
-    # import
-    pfilename = argv[1]
-    if pfilename.endswith('.') is True:
-        pfilename += "py"
-    try:
-        pfile = open(pfilename, 'r')
-        lines = pfile.readlines()
-        pfile.close()
-    except IOError as ioe:
-        raise ioe
-
-    # move the source file
-    shutil.move(pfilename, pfilename+".bak")
-
-    # replace and add import
-    wbuf = ""
-    wbuf += "#pylint: disable=invalid-name,relative-import,too-many-lines,too-many-instance-attributes,"
-    wbuf += "too-many-statements,line-too-long,"
-    wbuf += "too-many-locals,attribute-defined-outside-init\n"
-    importclass = True
-    for line in lines:
-        if line.count('class') == 1 and line.count('):') == 1 and importclass is True:
-            # add import
-            wbuf += 'from MplFigureCanvas import *\n'
-            importclass = False
-        if line.count('QtGui.QGraphicsView(') == 1:
-            # replace QGraphicsView by Qt4MplCanvas
-            line = line.replace('QtGui.QGraphicsView(', 'Qt4MplPlotView(')
-
-        wbuf += line
-
-    # write to file
-    ofile = open(pfilename, 'w')
-    ofile.write(wbuf)
-    ofile.close()
-
-    return
-
-if __name__ == "__main__":
-    main(sys.argv)