diff --git a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/InelasticIndirectReduction.py b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/InelasticIndirectReduction.py
index a7e1b92e108a3dd10f097632b25a4d60ed365e07..cd63c024c1cd24cdfb8e555de9571ba6fab459eb 100644
--- a/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/InelasticIndirectReduction.py
+++ b/Code/Mantid/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/InelasticIndirectReduction.py
@@ -2,21 +2,22 @@ from mantid.kernel import *
 from mantid.api import *
 from mantid.simpleapi import *
 
-
 class InelasticIndirectReduction(DataProcessorAlgorithm):
 
     def category(self):
-        return "Workflow\\Inelastic;PythonAlgorithms;Inelastic"
+        return 'Workflow\\Inelastic;PythonAlgorithms;Inelastic'
+
 
     def summary(self):
-        return "Runs a reduction for an inelastic indirect geometry instrument."
+        return 'Runs a reduction for an inelastic indirect geometry instrument.'
+
 
     def PyInit(self):
         self.declareProperty(WorkspaceProperty('OutputWorkspace', '',
                              direction=Direction.Output, optional=PropertyMode.Optional),
                              doc='Optionally override the name for the output workspace')
 
-        self.declareProperty(name='InputFiles', defaultValue='', validator=StringMandatoryValidator(),
+        self.declareProperty(StringArrayProperty(name='InputFiles'),
                              doc='Comma separated list of input files')
 
         self.declareProperty(name='SumFiles', defaultValue=False, doc='Toggle input file summing or sequential processing')
@@ -49,93 +50,62 @@ class InelasticIndirectReduction(DataProcessorAlgorithm):
         self.declareProperty(name='Plot', defaultValue='none', doc='Type of plot to output after reduction',
                              validator=StringListValidator(['none', 'spectra', 'contour']))
 
+
     def PyExec(self):
         from mantid import config, logger
         from IndirectCommon import StartTime, EndTime
         import inelastic_indirect_reducer
 
-        StartTime('InelasticIndirectReduction')
-
-        ## Get parameter values
-        out_ws = self.getPropertyValue('OutputWorkspace')
-        data_files = self.getPropertyValue('InputFiles').split(',')
-
-        instrument = self.getPropertyValue('Instrument')
-        analyser = self.getPropertyValue('Analyser')
-        reflection = self.getPropertyValue('Reflection')
-
-        param_file = config['instrumentDefinition.directory'] + instrument + '_' + analyser + '_' + reflection + '_Parameters.xml'
-
-        detector_range = self.getProperty('DetectorRange').value
-        background_range = self.getProperty('BackgroundRange').value
-
-        calib_ws = self.getProperty('CalibrationWorkspace')
-        calib_ws_name = self.getPropertyValue('CalibrationWorkspace')
-
-        detailed_balance = self.getProperty('DetailedBalance').value
+        self._setup()
 
-        rebin_string = self.getPropertyValue('RebinString')
-
-        scale_factor = self.getProperty('ScaleFactor').value
-
-        map_file = self.getPropertyValue('MappingFile')
-
-        save_format_string = self.getPropertyValue('SaveFormats')
-        save_formats = save_format_string.split(',')
-
-        # Validate save format string
-        valid_formats = ['nxs', 'spe', 'nxspe', 'ascii', 'aclimax', 'davegrp']
-        if len(save_format_string) > 0:
-            for save_format in save_formats:
-                if save_format not in valid_formats:
-                    raise ValueError('Save format "' + save_format + '" is not valid.\nValid formats: ' + str(valid_formats))
+        StartTime('InelasticIndirectReduction')
 
         # Setup reducer
         reducer = inelastic_indirect_reducer.IndirectReducer()
 
         reducer.set_rename(True)
 
-        reducer.set_instrument_name(instrument)
-        reducer.set_parameter_file(param_file)
+        reducer.set_instrument_name(self._instrument)
+        reducer.set_parameter_file(self._param_file)
 
-        for data_file in data_files:
+        for data_file in self._data_files:
             reducer.append_data_file(data_file)
 
-        reducer.set_sum_files(self.getProperty('SumFiles').value)
+        reducer.set_sum_files(self._sum_files)
 
-        reducer.set_detector_range(int(detector_range[0]) - 1, int(detector_range[1]) - 1)
+        reducer.set_detector_range(int(self._detector_range[0]) - 1, int(self._detector_range[1]) - 1)
 
-        use_calib_ws = calib_ws.value is not None
-        if use_calib_ws:
+        self._use_calib_ws = self._calib_ws.value is not None
+        if self._use_calib_ws:
             logger.debug('Using calibration workspace')
-            reducer.set_calibration_workspace(calib_ws.valueAsStr)
+            reducer.set_calibration_workspace(self._calib_ws.valueAsStr)
 
-        if len(background_range) == 2:
-            logger.debug('Using background range: ' + str(background_range))
-            reducer.set_background(float(background_range[0]), float(background_range[1]))
+        if len(self._background_range) == 2:
+            logger.debug('Using background range: ' + str(self._background_range))
+            reducer.set_background(float(self._background_range[0]), float(self._background_range[1]))
 
         # TODO: There should be a better way to do this
-        use_detailed_balance = detailed_balance != -1.0
-        if use_detailed_balance:
-            logger.debug('Using detailed balance: ' + str(detailed_balance))
-            reducer.set_detailed_balance(detailed_balance)
+        self._use_detailed_balance = self._detailed_balance != -1.0
+        if self._use_detailed_balance:
+            logger.debug('Using detailed balance: ' + str(self._detailed_balance))
+            reducer.set_detailed_balance(self._detailed_balance)
 
-        if rebin_string != "":
-            logger.debug('Using rebin string: ' + rebin_string)
-            reducer.set_rebin_string(rebin_string)
+        if self._rebin_string != '':
+            logger.debug('Using rebin string: ' + self._rebin_string)
+            reducer.set_rebin_string(self._rebin_string)
 
-        use_scale_factor = scale_factor != 1.0
-        if use_scale_factor:
-            logger.debug('Using scale factor: ' + str(scale_factor))
-            reducer.set_scale_factor(scale_factor)
+        self._use_scale_factor = self._scale_factor != 1.0
+        if self._use_scale_factor:
+            logger.debug('Using scale factor: ' + str(self._scale_factor))
+            reducer.set_scale_factor(self._scale_factor)
 
-        if map_file != '':
-            logger.debug('Using mapping file: ' + str(map_file))
-            reducer.set_grouping_policy(map_file)
+        if self._map_file != '':
+            logger.debug('Using mapping file: ' + str(self._map_file))
+            reducer.set_grouping_policy(self._map_file)
 
         reducer.set_fold_multiple_frames(self.getProperty('Fold').value)
         reducer.set_save_to_cm_1(self.getProperty('SaveCM1').value)
-        reducer.set_save_formats(save_formats)
+        reducer.set_save_formats(self._save_formats)
 
         # Do reduction and get result workspaces
         reducer.reduce()
@@ -147,47 +117,102 @@ class InelasticIndirectReduction(DataProcessorAlgorithm):
 
         # Add sample logs to output workspace(s)
         for workspace in ws_list:
-            AddSampleLog(Workspace=workspace, LogName='use_calib_wokspace', LogType='String', LogText=str(use_calib_ws))
-            if use_calib_ws:
-                AddSampleLog(Workspace=workspace, LogName='calib_workspace_name', LogType='String', LogText=str(calib_ws_name))
-
-            AddSampleLog(Workspace=workspace, LogName='use_detailed_balance', LogType='String', LogText=str(use_detailed_balance))
-            if use_detailed_balance:
-                AddSampleLog(Workspace=workspace, LogName='detailed_balance', LogType='Number', LogText=str(detailed_balance))
-
-            AddSampleLog(Workspace=workspace, LogName='use_scale_factor', LogType='String', LogText=str(use_scale_factor))
-            if use_scale_factor:
-                AddSampleLog(Workspace=workspace, LogName='scale_factor', LogType='Number', LogText=str(scale_factor))
+            self._add_ws_logs(workspace)
 
         # Rename output workspace
-        # Only renames first workspace, but used in this way the reucer should only output one
+        # Only renames first workspace, but used in this way the reducer should only output one
         use_provided_out_ws = self.getPropertyValue('OutputWorkspace') != ''
         if use_provided_out_ws:
-            logger.information('Renaming output workspace ' + str(ws_list[0]) + ' to ' + str(out_ws))
-            RenameWorkspace(InputWorkspace=ws_list[0], OutputWorkspace=out_ws)
+            logger.information('Renaming output workspace ' + str(ws_list[0]) + ' to ' + str(self._out_ws))
+            RenameWorkspace(InputWorkspace=ws_list[0], OutputWorkspace=self._out_ws)
         else:
-            out_ws = ws_list[0]
+            self._out_ws = ws_list[0]
 
-        self.setProperty('OutputWorkspace', out_ws)
+        self.setProperty('OutputWorkspace', self._out_ws)
 
         # Do plotting
         plot_type = self.getPropertyValue('Plot')
 
         if plot_type != 'none':
-            if plot_type == 'spectra':
-                from mantidplot import plotSpectrum
-                num_spectra = mtd[out_ws].getNumberHistograms()
-                try:
-                    plotSpectrum(out_ws, range(0, num_spectra))
-                except RuntimeError:
-                    logger.notice('Spectrum plotting canceled by user')
-
-            if plot_type == 'contour':
-                from mantidplot import importMatrixWorkspace
-                plot_workspace = importMatrixWorkspace(out_ws)
-                plot_workspace.plotGraph2D()
+            self._plot()
 
         EndTime('InelasticIndirectReduction')
 
+
+    def _setup(self):
+        """
+        Gets and validates algorithm properties.
+        """
+
+        # Get parameter values
+        self._out_ws = self.getPropertyValue('OutputWorkspace')
+        self._data_files = self.getProperty('InputFiles').value
+
+        self._instrument = self.getPropertyValue('Instrument')
+        self._analyser = self.getPropertyValue('Analyser')
+        self._reflection = self.getPropertyValue('Reflection')
+
+        self._param_file = config['instrumentDefinition.directory'] + self._instrument + '_' + self._analyser + '_' + self._reflection + '_Parameters.xml'
+
+        self._detector_range = self.getProperty('DetectorRange').value
+        self._background_range = self.getProperty('BackgroundRange').value
+
+        self._calib_ws = self.getProperty('CalibrationWorkspace')
+        self._calib_ws_name = self.getPropertyValue('CalibrationWorkspace')
+
+        self._detailed_balance = self.getProperty('DetailedBalance').value
+        self._rebin_string = self.getPropertyValue('RebinString')
+        self._scale_factor = self.getProperty('ScaleFactor').value
+        self._sum_files = self.getProperty('SumFiles').value
+
+        # TODO: Replace with Grouping WS
+        self._map_file = self.getPropertyValue('MappingFile')
+
+        self._save_formats = self.getProperty('SaveFormats').value
+
+        # Validate save format string
+        valid_formats = ['nxs', 'spe', 'nxspe', 'ascii', 'aclimax', 'davegrp']
+        for save_format in self._save_formats:
+            if save_format not in valid_formats:
+                raise ValueError('Save format "' + save_format + '" is not valid.\nValid formats: ' + str(valid_formats))
+
+
+    def _add_ws_logs(self, workspace_name):
+        """
+        Adds sample logs to a given output workspace.
+        """
+
+        AddSampleLog(Workspace=workspace_name, LogName='use_calib_wokspace', LogType='String', LogText=str(self._use_calib_ws))
+        if self._use_calib_ws:
+            AddSampleLog(Workspace=workspace_name, LogName='calib_workspace_name', LogType='String', LogText=str(self._calib_ws_name))
+
+        AddSampleLog(Workspace=workspace_name, LogName='use_detailed_balance', LogType='String', LogText=str(self._use_detailed_balance))
+        if self._use_detailed_balance:
+            AddSampleLog(Workspace=workspace_name, LogName='detailed_balance', LogType='Number', LogText=str(self._detailed_balance))
+
+        AddSampleLog(Workspace=workspace_name, LogName='use_scale_factor', LogType='String', LogText=str(self._use_scale_factor))
+        if self._use_scale_factor:
+            AddSampleLog(Workspace=workspace_name, LogName='scale_factor', LogType='Number', LogText=str(self._scale_factor))
+
+
+    def _plot(self):
+        """
+        Plots results.
+        """
+
+        if self._plot_type == 'spectra':
+            from mantidplot import plotSpectrum
+            num_spectra = mtd[self._out_ws].getNumberHistograms()
+            try:
+                plotSpectrum(self._out_ws, range(0, num_spectra))
+            except RuntimeError:
+                logger.notice('Spectrum plotting canceled by user')
+
+        if self._plot_type == 'contour':
+            from mantidplot import importMatrixWorkspace
+            plot_workspace = importMatrixWorkspace(self._out_ws)
+            plot_workspace.plotGraph2D()
+
+
 # Register algorithm with Mantid
 AlgorithmFactory.subscribe(InelasticIndirectReduction)
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDataReduction.ui b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDataReduction.ui
index cceee13ae1bcb8bb9eb50c2b0befbec2eb733e7e..ba8c2c3442298fe133e9ad0c148dd343ea3667ce 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDataReduction.ui
+++ b/Code/Mantid/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/IndirectDataReduction.ui
@@ -994,6 +994,13 @@ p, li { white-space: pre-wrap; }
               </property>
              </widget>
             </item>
+            <item>
+             <widget class="QCheckBox" name="save_ckDaveGrp">
+              <property name="text">
+               <string>DaveGrp</string>
+              </property>
+             </widget>
+            </item>
             <item>
              <spacer name="horizontalSpacer_15">
               <property name="orientation">
diff --git a/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectConvertToEnergy.cpp b/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectConvertToEnergy.cpp
index ccaea9fbcb9f5a0d07f64ae3ea9484e6fb986e6a..e3357d9aa32606005146860083591727cabdb516 100644
--- a/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectConvertToEnergy.cpp
+++ b/Code/Mantid/MantidQt/CustomInterfaces/src/IndirectConvertToEnergy.cpp
@@ -677,6 +677,8 @@ namespace CustomInterfaces
       fileFormats.push_back("ascii");
     if ( m_uiForm.save_ckAclimax->isChecked() )
       fileFormats.push_back("aclimax");
+    if ( m_uiForm.save_ckDaveGrp->isChecked() )
+      fileFormats.push_back("davegrp");
 
     return fileFormats;
   }