diff --git a/Framework/API/src/AnalysisDataService.cpp b/Framework/API/src/AnalysisDataService.cpp
index f77191ffcf452c0b7fd478698fb2ebd4e5f4ada2..d88362663d687c9f0c9dceb79e8d59498760b0d5 100644
--- a/Framework/API/src/AnalysisDataService.cpp
+++ b/Framework/API/src/AnalysisDataService.cpp
@@ -154,7 +154,7 @@ void AnalysisDataServiceImpl::remove(const std::string &name) {
   Workspace_sptr ws;
   try {
     ws = retrieve(name);
-  } catch (Kernel::Exception::NotFoundError) {
+  } catch (const Kernel::Exception::NotFoundError &) {
     // do nothing - remove will do what's needed
   }
   Kernel::DataService<API::Workspace>::remove(name);
@@ -258,7 +258,7 @@ AnalysisDataServiceImpl::topLevelItems() const {
       if (auto group = boost::dynamic_pointer_cast<WorkspaceGroup>(ws)) {
         group->reportMembers(groupMembers);
       }
-    } catch (std::exception &) {
+    } catch (const std::exception &) {
     }
   }
 
diff --git a/Framework/API/src/IFunction1DSpectrum.cpp b/Framework/API/src/IFunction1DSpectrum.cpp
index 53ef213b09c84fd062a35972721e5c9b87ccb8ce..333e7e759ae6543216d59561c9e22eb6483a1017 100644
--- a/Framework/API/src/IFunction1DSpectrum.cpp
+++ b/Framework/API/src/IFunction1DSpectrum.cpp
@@ -11,7 +11,7 @@ void IFunction1DSpectrum::function(const FunctionDomain &domain,
     const FunctionDomain1DSpectrum &spectrumDomain =
         dynamic_cast<const FunctionDomain1DSpectrum &>(domain);
     function1DSpectrum(spectrumDomain, values);
-  } catch (std::bad_cast) {
+  } catch (const std::bad_cast &) {
     throw std::invalid_argument(
         "Provided domain is not of type FunctionDomain1DSpectrum.");
   }
@@ -23,7 +23,7 @@ void IFunction1DSpectrum::functionDeriv(const FunctionDomain &domain,
     const FunctionDomain1DSpectrum &spectrumDomain =
         dynamic_cast<const FunctionDomain1DSpectrum &>(domain);
     functionDeriv1DSpectrum(spectrumDomain, jacobian);
-  } catch (std::bad_cast) {
+  } catch (const std::bad_cast &) {
     throw std::invalid_argument(
         "Provided domain is not of type FunctionDomain1DSpectrum.");
   }
diff --git a/Framework/API/src/IFunctionGeneral.cpp b/Framework/API/src/IFunctionGeneral.cpp
index 1c7503f0e10887a48618771271f40d390caa8b38..bc1e9fc54ee622a78a1ade930661619558865eb1 100644
--- a/Framework/API/src/IFunctionGeneral.cpp
+++ b/Framework/API/src/IFunctionGeneral.cpp
@@ -17,7 +17,7 @@ void IFunctionGeneral::function(const FunctionDomain &domain,
   try {
     auto &generalDomain = dynamic_cast<const FunctionDomainGeneral &>(domain);
     functionGeneral(generalDomain, values);
-  } catch (std::bad_cast) {
+  } catch (const std::bad_cast &) {
     throw std::invalid_argument(
         "Provided domain is not of type FunctionDomainGeneral.");
   }
diff --git a/Framework/API/src/ILatticeFunction.cpp b/Framework/API/src/ILatticeFunction.cpp
index c87d72c83cbc97640c0577f4d209e88251579e28..b14f2d6a945990928b47a7eb274c38b00cd06524 100644
--- a/Framework/API/src/ILatticeFunction.cpp
+++ b/Framework/API/src/ILatticeFunction.cpp
@@ -23,7 +23,7 @@ void ILatticeFunction::function(const FunctionDomain &domain,
         dynamic_cast<const LatticeDomain &>(domain);
 
     functionLattice(latticeDomain, values);
-  } catch (std::bad_cast) {
+  } catch (const std::bad_cast &) {
     throw std::invalid_argument(
         "ILatticeFunction expects domain of type LatticeDomain.");
   }
@@ -46,10 +46,10 @@ void ILatticeFunction::functionDeriv(const FunctionDomain &domain,
         dynamic_cast<const LatticeDomain &>(domain);
 
     functionDerivLattice(latticeDomain, jacobian);
-  } catch (std::bad_cast) {
+  } catch (const std::bad_cast &) {
     throw std::invalid_argument(
         "ILatticeFunction expects domain of type LatticeDomain.");
-  } catch (Kernel::Exception::NotImplementedError) {
+  } catch (const Kernel::Exception::NotImplementedError &) {
     calNumericalDeriv(domain, jacobian);
   }
 }
diff --git a/Framework/Algorithms/src/ChangeTimeZero.cpp b/Framework/Algorithms/src/ChangeTimeZero.cpp
index 9b377714525000b58cfb178639bc430f3d835f7e..631e7068f154165958d57d7d2dd56897c1dabdad 100644
--- a/Framework/Algorithms/src/ChangeTimeZero.cpp
+++ b/Framework/Algorithms/src/ChangeTimeZero.cpp
@@ -237,7 +237,7 @@ ChangeTimeZero::getStartTimeFromWorkspace(API::MatrixWorkspace_sptr ws) const {
   Mantid::Kernel::TimeSeriesProperty<double> *goodFrame = nullptr;
   try {
     goodFrame = run.getTimeSeriesProperty<double>("proton_charge");
-  } catch (std::invalid_argument) {
+  } catch (const std::invalid_argument &) {
     throw std::invalid_argument("ChangeTimeZero: The log needs a proton_charge "
                                 "time series to determine the zero time.");
   }
diff --git a/Framework/Algorithms/src/ConvertAxesToRealSpace.cpp b/Framework/Algorithms/src/ConvertAxesToRealSpace.cpp
index 34064c126408e2105adbe61508039e32c61a972f..aea038408ed726d8d4800a69d16c093c12929276 100644
--- a/Framework/Algorithms/src/ConvertAxesToRealSpace.cpp
+++ b/Framework/Algorithms/src/ConvertAxesToRealSpace.cpp
@@ -157,7 +157,7 @@ void ConvertAxesToRealSpace::exec() {
         if (axisValue < axisVector[axisIndex].min)
           axisVector[axisIndex].min = axisValue;
       }
-    } catch (Exception::NotFoundError) {
+    } catch (const Exception::NotFoundError &) {
       g_log.debug() << "Could not find detector for workspace index " << i
                     << '\n';
       failedCount++;
diff --git a/Framework/Algorithms/src/DiffractionFocussing2.cpp b/Framework/Algorithms/src/DiffractionFocussing2.cpp
index 38cef9356043c7e7e103fcbbd513ca01d881c63e..16f90e20fd8d1121b648fd4f3f79d1d07d620366 100644
--- a/Framework/Algorithms/src/DiffractionFocussing2.cpp
+++ b/Framework/Algorithms/src/DiffractionFocussing2.cpp
@@ -102,7 +102,7 @@ void DiffractionFocussing2::exec() {
   std::string unitid = axis->unit()->unitID();
   if (unitid != "dSpacing" && unitid != "MomentumTransfer" && unitid != "TOF") {
     g_log.error() << "UnitID " << unitid << " is not a supported spacing\n";
-    throw new std::invalid_argument("Workspace Invalid Spacing/UnitID");
+    throw std::invalid_argument("Workspace Invalid Spacing/UnitID");
   }
   // --- Do we need to read the grouping workspace? ----
   if (groupingFileName != "") {
diff --git a/Framework/Algorithms/src/GenerateEventsFilter.cpp b/Framework/Algorithms/src/GenerateEventsFilter.cpp
index 4c1e6b550bdb1bd43524775295b6e6013777dfe7..fa2ec6a0e2cf0c4df440ec7aebff5e3bc67a3902 100644
--- a/Framework/Algorithms/src/GenerateEventsFilter.cpp
+++ b/Framework/Algorithms/src/GenerateEventsFilter.cpp
@@ -1822,7 +1822,7 @@ DateAndTime GenerateEventsFilter::findRunEnd() {
   bool norunendset = false;
   try {
     runendtime = m_dataWS->run().endTime();
-  } catch (std::runtime_error err) {
+  } catch (const std::runtime_error &) {
     norunendset = true;
   }
 
diff --git a/Framework/Crystal/src/PredictFractionalPeaks.cpp b/Framework/Crystal/src/PredictFractionalPeaks.cpp
index a6ba7ce0e2099d9c4a9fc78d22893037ff64b89d..86a4906756c942366c2d9c93837b1db763e7f3e1 100644
--- a/Framework/Crystal/src/PredictFractionalPeaks.cpp
+++ b/Framework/Crystal/src/PredictFractionalPeaks.cpp
@@ -212,7 +212,7 @@ void PredictFractionalPeaks::exec() {
             }
           } catch (...) {
             if (ErrPos != 1) // setQLabFrame in createPeak throws exception
-              throw new std::invalid_argument("Invalid data at this point");
+              throw std::invalid_argument("Invalid data at this point");
           }
         }
       }
diff --git a/Framework/CurveFitting/src/Algorithms/PawleyFit.cpp b/Framework/CurveFitting/src/Algorithms/PawleyFit.cpp
index 198e6460cc71e38db906082e6e162a78ed7c2cb6..d888f23615d86cbf51d0ddb43fd73cc95c5a7c86 100644
--- a/Framework/CurveFitting/src/Algorithms/PawleyFit.cpp
+++ b/Framework/CurveFitting/src/Algorithms/PawleyFit.cpp
@@ -97,11 +97,11 @@ void PawleyFit::addHKLsToFunction(Functions::PawleyFunction_sptr &pawleyFn,
         if (center > startX && center < endX) {
           pawleyFn->addPeak(hkl, fwhm, height);
         }
-      } catch (std::bad_alloc) {
+      } catch (const std::bad_alloc &) {
         // do nothing.
       }
     }
-  } catch (std::runtime_error) {
+  } catch (const std::runtime_error &) {
     // Column does not exist
     throw std::runtime_error("Can not process table, the following columns are "
                              "required: HKL, d, Intensity, FWHM (rel.)");
diff --git a/Framework/CurveFitting/src/Functions/PawleyFunction.cpp b/Framework/CurveFitting/src/Functions/PawleyFunction.cpp
index 040279dfff33d6ccb032593bf9030630c453e350..d6aadb2c80f820283eeee25b6d7ccc487cfc90f4 100644
--- a/Framework/CurveFitting/src/Functions/PawleyFunction.cpp
+++ b/Framework/CurveFitting/src/Functions/PawleyFunction.cpp
@@ -121,29 +121,29 @@ void PawleyParameterFunction::setParametersFromUnitCell(const UnitCell &cell) {
 
   try {
     setParameter("b", cell.b());
-  } catch (std::invalid_argument) {
+  } catch (const std::invalid_argument &) {
     // do nothing.
   }
 
   try {
     setParameter("c", cell.c());
-  } catch (std::invalid_argument) {
+  } catch (const std::invalid_argument &) {
     // do nothing
   }
 
   try {
     setParameter("Alpha", cell.alpha());
-  } catch (std::invalid_argument) {
+  } catch (const std::invalid_argument &) {
     // do nothing.
   }
   try {
     setParameter("Beta", cell.beta());
-  } catch (std::invalid_argument) {
+  } catch (const std::invalid_argument &) {
     // do nothing.
   }
   try {
     setParameter("Gamma", cell.gamma());
-  } catch (std::invalid_argument) {
+  } catch (const std::invalid_argument &) {
     // do nothing.
   }
 }
@@ -473,13 +473,13 @@ void PawleyFunction::function(const FunctionDomain &domain,
       try {
         size_t offset = calculateFunctionValues(peak, domain1D, localValues);
         values.addToCalculated(offset, localValues);
-      } catch (std::invalid_argument) {
+      } catch (const std::invalid_argument &) {
         // do nothing
       }
     }
 
     setPeakPositions(centreName, 0.0, cell);
-  } catch (std::bad_cast) {
+  } catch (const std::bad_cast &) {
     // do nothing
   }
 }
diff --git a/Framework/CurveFitting/src/LatticeDomainCreator.cpp b/Framework/CurveFitting/src/LatticeDomainCreator.cpp
index 9ff4e0d7c97fa8c51eb006a4a36119ca00395a2d..8f03ad67988a43401a67731f7c051ab06dfeb51e 100644
--- a/Framework/CurveFitting/src/LatticeDomainCreator.cpp
+++ b/Framework/CurveFitting/src/LatticeDomainCreator.cpp
@@ -156,7 +156,7 @@ void LatticeDomainCreator::setWorkspaceFromPropertyManager() {
 
   try {
     m_workspace = m_manager->getProperty(m_workspacePropertyName);
-  } catch (Kernel::Exception::NotFoundError) {
+  } catch (const Kernel::Exception::NotFoundError &) {
     throw std::invalid_argument(
         "Could not extract workspace from PropertyManager.");
   }
@@ -257,25 +257,22 @@ void LatticeDomainCreator::createDomainFromPeakTable(
           double d = (*dColumn)[i];
           dSpacings.push_back(d);
         }
-      } catch (std::bad_alloc) {
+      } catch (const std::bad_alloc &) {
         // do nothing.
       }
     }
 
-    auto latticeDomain = new LatticeDomain(hkls);
-    domain.reset(latticeDomain);
-
+    domain = boost::make_shared<LatticeDomain>(hkls);
     if (!values) {
-      auto functionValues = new FunctionValues(*domain);
-      values.reset(functionValues);
+      values = boost::make_shared<FunctionValues>(*domain);
     } else {
-      values->expand(i0 + latticeDomain->size());
+      values->expand(i0 + domain->size());
     }
 
     values->setFitData(dSpacings);
 
     values->setFitWeights(1.0);
-  } catch (std::runtime_error) {
+  } catch (const std::runtime_error &) {
     // Column does not exist
     throw std::runtime_error("Can not process table, the following columns are "
                              "required: HKL, d.");
diff --git a/Framework/CurveFitting/src/SeqDomainSpectrumCreator.cpp b/Framework/CurveFitting/src/SeqDomainSpectrumCreator.cpp
index 491b006b562151fcf6785126846d4f34778950ca..af4421e5631b2a27577971f8d1cb2281f4f8f9c5 100644
--- a/Framework/CurveFitting/src/SeqDomainSpectrumCreator.cpp
+++ b/Framework/CurveFitting/src/SeqDomainSpectrumCreator.cpp
@@ -226,7 +226,7 @@ bool SeqDomainSpectrumCreator::histogramIsUsable(size_t i) const {
     }
 
     return !detector->isMasked();
-  } catch (Kernel::Exception::NotFoundError) {
+  } catch (const Kernel::Exception::NotFoundError &) {
     return true;
   }
 }
diff --git a/Framework/DataHandling/src/GroupDetectors2.cpp b/Framework/DataHandling/src/GroupDetectors2.cpp
index f69d9f7e2a378037d85eb32a49e3388d7aa61b40..a852814297b2073909fca87069fe50ceda2365c7 100644
--- a/Framework/DataHandling/src/GroupDetectors2.cpp
+++ b/Framework/DataHandling/src/GroupDetectors2.cpp
@@ -621,7 +621,7 @@ void GroupDetectors2::processGroupingWorkspace(
             unUsedSpec[targetWSIndex] = (USED);
           }
         }
-      } catch (Mantid::Kernel::Exception::NotFoundError) {
+      } catch (const Mantid::Kernel::Exception::NotFoundError &) {
         // the detector was not found - don't add it
       }
     }
@@ -687,7 +687,7 @@ void GroupDetectors2::processMatrixWorkspace(
           }
         }
       }
-    } catch (Mantid::Kernel::Exception::NotFoundError) {
+    } catch (const Mantid::Kernel::Exception::NotFoundError &) {
       // the detector was not found - don't add it
     }
   }
diff --git a/Framework/DataHandling/src/LoadTBL.cpp b/Framework/DataHandling/src/LoadTBL.cpp
index ae4c43054450fb4ae83c17235da814bedcb23e88..2e357abae9691e5b50dac6a0eeda7107c6bf7feb 100644
--- a/Framework/DataHandling/src/LoadTBL.cpp
+++ b/Framework/DataHandling/src/LoadTBL.cpp
@@ -58,7 +58,7 @@ int LoadTBL::confidence(Kernel::FileDescriptor &descriptor) const {
       {
         confidence = 0;
       }
-    } catch (std::length_error) {
+    } catch (const std::length_error &) {
       confidence = 0;
     }
   }
diff --git a/Framework/DataHandling/src/SaveAscii2.cpp b/Framework/DataHandling/src/SaveAscii2.cpp
index 47206b78aa80ae32ae33aa3f975b80060ddaecee..bd5d594f1bcb694298de522a5b93a8a4fccfd0c6 100644
--- a/Framework/DataHandling/src/SaveAscii2.cpp
+++ b/Framework/DataHandling/src/SaveAscii2.cpp
@@ -136,7 +136,7 @@ void SaveAscii2::exec() {
     if (containsSpectrumNumber) {
       try {
         m_specToIndexMap = m_ws->getSpectrumToWorkspaceIndexMap();
-      } catch (std::runtime_error) {
+      } catch (const std::runtime_error &) {
         throw std::runtime_error("SpectrumNumber is present in "
                                  "SpectrumMetaData but the workspace does not "
                                  "have a SpectrumAxis.");
diff --git a/Framework/DataHandling/src/SaveGSS.cpp b/Framework/DataHandling/src/SaveGSS.cpp
index 53e88341606b74a3e686056a58d9563e75f0b89f..fa9c252fb9e2e7dc7b8e0bd1b9b5f747dfd3daaa 100644
--- a/Framework/DataHandling/src/SaveGSS.cpp
+++ b/Framework/DataHandling/src/SaveGSS.cpp
@@ -142,7 +142,7 @@ void SaveGSS::exec() {
     errss << "Number of Spectra (" << nHist
           << ") cannot be larger than 99 for GSAS file";
     g_log.error(errss.str());
-    throw new std::invalid_argument(errss.str());
+    throw std::invalid_argument(errss.str());
   }
 
   std::string filename = getProperty("Filename");
diff --git a/Framework/Geometry/src/Crystal/CompositeBraggScatterer.cpp b/Framework/Geometry/src/Crystal/CompositeBraggScatterer.cpp
index f6e728b25a12777a6ce847ce151cbcaa24133ba8..c36f94ac2505dd30f4194f7d4ddfa8b55362bab8 100644
--- a/Framework/Geometry/src/Crystal/CompositeBraggScatterer.cpp
+++ b/Framework/Geometry/src/Crystal/CompositeBraggScatterer.cpp
@@ -142,7 +142,7 @@ void CompositeBraggScatterer::propagatePropertyToScatterer(
     const std::string &propertyValue) {
   try {
     scatterer->setPropertyValue(propertyName, propertyValue);
-  } catch (Kernel::Exception::NotFoundError) {
+  } catch (const Kernel::Exception::NotFoundError &) {
     // do nothing.
   }
 }
diff --git a/Framework/Geometry/src/Crystal/PointGroupFactory.cpp b/Framework/Geometry/src/Crystal/PointGroupFactory.cpp
index 5c31b248192e2709745eaadef9fdbb4fdf5fdfc6..5efd5a53a1d3d7f2c716b499a03c39ae60325210 100644
--- a/Framework/Geometry/src/Crystal/PointGroupFactory.cpp
+++ b/Framework/Geometry/src/Crystal/PointGroupFactory.cpp
@@ -39,7 +39,7 @@ PointGroup_sptr PointGroupFactoryImpl::createPointGroupFromSpaceGroup(
     }
 
     return pointGroup;
-  } catch (std::invalid_argument) {
+  } catch (const std::invalid_argument &) {
     if (spaceGroup.getCoordinateSystem() !=
         Group::CoordinateSystem::Hexagonal) {
       pointGroupSymbol.append(" r");
diff --git a/Framework/Geometry/src/Crystal/SpaceGroupFactory.cpp b/Framework/Geometry/src/Crystal/SpaceGroupFactory.cpp
index 545a5392e84d59a60115daaf38c83e1b12fa4302..40347ad953f16910205ba67ca5e16e8507057217 100644
--- a/Framework/Geometry/src/Crystal/SpaceGroupFactory.cpp
+++ b/Framework/Geometry/src/Crystal/SpaceGroupFactory.cpp
@@ -24,7 +24,7 @@ bool isValidGeneratorString(const std::string &generatorString) {
   for (auto &generatorString : generatorStrings) {
     try {
       SymmetryOperationSymbolParser::parseIdentifier(generatorString);
-    } catch (Kernel::Exception::ParseError) {
+    } catch (const Kernel::Exception::ParseError &) {
       return false;
     }
   }
diff --git a/Framework/Kernel/src/Interpolation.cpp b/Framework/Kernel/src/Interpolation.cpp
index 1307286d3bb37cb64e06c2329b3cc0c8173e62a3..407dc23909d61c2222a0b5f683c2fd2b35244e97 100644
--- a/Framework/Kernel/src/Interpolation.cpp
+++ b/Framework/Kernel/src/Interpolation.cpp
@@ -82,7 +82,7 @@ double Interpolation::value(const double &at) const {
     return m_y[idx - 1] +
            (at - m_x[idx - 1]) * (m_y[idx] - m_y[idx - 1]) /
                (m_x[idx] - m_x[idx - 1]);
-  } catch (std::range_error) {
+  } catch (const std::range_error &) {
     return 0.0;
   }
 }
diff --git a/Framework/MDAlgorithms/src/ConvertCWSDExpToMomentum.cpp b/Framework/MDAlgorithms/src/ConvertCWSDExpToMomentum.cpp
index a6e05402bd0c9e12fc34093d420a17dd362a947d..c3ceb29ea17ccbdce5cf9d5f56dc624a7f96dc82 100644
--- a/Framework/MDAlgorithms/src/ConvertCWSDExpToMomentum.cpp
+++ b/Framework/MDAlgorithms/src/ConvertCWSDExpToMomentum.cpp
@@ -279,7 +279,7 @@ void ConvertCWSDExpToMomentum::addMDEvents(bool usevirtual) {
     try {
       float time_f = m_expDataTableWS->cell<float>(ir, m_iTime);
       time = static_cast<double>(time_f);
-    } catch (std::runtime_error) {
+    } catch (const std::runtime_error &) {
       time = m_expDataTableWS->cell<double>(ir, m_iTime);
     }
 
diff --git a/Framework/MDAlgorithms/src/IntegratePeaksCWSD.cpp b/Framework/MDAlgorithms/src/IntegratePeaksCWSD.cpp
index 99fb4f12e50c0f43a8d35a6da9fc92b17b06c92b..4c724bcb83d0a2615662feb52351fe6496cc42e0 100644
--- a/Framework/MDAlgorithms/src/IntegratePeaksCWSD.cpp
+++ b/Framework/MDAlgorithms/src/IntegratePeaksCWSD.cpp
@@ -489,7 +489,7 @@ IntegratePeaksCWSD::createPeakworkspace(Kernel::V3D peakCenter,
       Geometry::Instrument_const_sptr instrument = expinfo->getInstrument();
       newpeak.setInstrument(instrument);
       newpeak.setGoniometerMatrix(expinfo->run().getGoniometerMatrix());
-    } catch (std::exception) {
+    } catch (const std::exception &) {
       throw std::runtime_error(
           "Unable to set instrument and goniometer matrix.");
     }
diff --git a/Framework/MDAlgorithms/src/LoadSQW.cpp b/Framework/MDAlgorithms/src/LoadSQW.cpp
index 1c4b76220cd326f94e8f4fb3e38151237fc69917..dcda30704a79e32fb176c27ea7f6cd0ed19b16ee 100644
--- a/Framework/MDAlgorithms/src/LoadSQW.cpp
+++ b/Framework/MDAlgorithms/src/LoadSQW.cpp
@@ -209,8 +209,8 @@ void LoadSQW::readEvents(
 
   size_t maxNPix = ~size_t(0);
   if (m_nDataPoints > maxNPix) {
-    throw new std::runtime_error("Not possible to address all datapoints in "
-                                 "memory using this architecture ");
+    throw std::runtime_error("Not possible to address all datapoints in "
+                             "memory using this architecture ");
   }
 
   const size_t ncolumns = 9; // qx, qy, qz, en, s, err, irunid, idetid, ien
diff --git a/Framework/MDAlgorithms/src/MaskMD.cpp b/Framework/MDAlgorithms/src/MaskMD.cpp
index 1b64c9dcc6bc992235fbb67faa1acc00569e512e..72970550e3724315c692e698fa3758290d8cffcd 100644
--- a/Framework/MDAlgorithms/src/MaskMD.cpp
+++ b/Framework/MDAlgorithms/src/MaskMD.cpp
@@ -116,7 +116,7 @@ size_t tryFetchDimensionIndex(Mantid::API::IMDWorkspace_sptr ws,
   size_t dimWorkspaceIndex;
   try {
     dimWorkspaceIndex = ws->getDimensionIndexById(candidateNameOrId);
-  } catch (std::runtime_error) {
+  } catch (const std::runtime_error &) {
     // this will throw if the name is unknown.
     dimWorkspaceIndex = ws->getDimensionIndexByName(candidateNameOrId);
   }
@@ -213,7 +213,7 @@ std::map<std::string, std::string> MaskMD::validateInputs() {
   for (const auto &dimension_name : dimensions) {
     try {
       tryFetchDimensionIndex(ws, dimension_name);
-    } catch (std::runtime_error) {
+    } catch (const std::runtime_error &) {
       messageStream << "Dimension '" << dimension_name << "' not found. ";
     }
   }
diff --git a/Framework/SINQ/src/PoldiFitPeaks1D2.cpp b/Framework/SINQ/src/PoldiFitPeaks1D2.cpp
index 87bf2f854cf5f07866bb172642f24a57d72b93f3..3ec195ea9c419cf29b95e1d0e817ab54ead13c4d 100644
--- a/Framework/SINQ/src/PoldiFitPeaks1D2.cpp
+++ b/Framework/SINQ/src/PoldiFitPeaks1D2.cpp
@@ -338,7 +338,7 @@ int PoldiFitPeaks1D2::getBestChebyshevPolynomialDegree(
 
       ++n;
     }
-  } catch (std::runtime_error) {
+  } catch (const std::runtime_error &) {
     nMin = -1;
   }
 
diff --git a/Framework/SINQ/src/PoldiFitPeaks2D.cpp b/Framework/SINQ/src/PoldiFitPeaks2D.cpp
index cc55548d2fbe79b32ea878644694c720a85aaed8..6f91161bcbf10be04aa9c1079581b97ad4af9aa8 100644
--- a/Framework/SINQ/src/PoldiFitPeaks2D.cpp
+++ b/Framework/SINQ/src/PoldiFitPeaks2D.cpp
@@ -95,7 +95,7 @@ PoldiFitPeaks2D::getPeakCollectionsFromInput() const {
   if (peakTable) {
     try {
       peakCollections.push_back(getPeakCollection(peakTable));
-    } catch (std::runtime_error) {
+    } catch (const std::runtime_error &) {
       // do nothing
     }
 
@@ -115,7 +115,7 @@ PoldiFitPeaks2D::getPeakCollectionsFromInput() const {
       if (peakTable) {
         try {
           peakCollections.push_back(getPeakCollection(peakTable));
-        } catch (std::runtime_error) {
+        } catch (const std::runtime_error &) {
           // do nothing
         }
       }
@@ -320,7 +320,7 @@ std::vector<PoldiPeakCollection_sptr> PoldiFitPeaks2D::getCountPeakCollections(
           getPeakCollectionFromFunction(localFunction);
 
       countPeakCollections.push_back(getCountPeakCollection(normalizedPeaks));
-    } catch (std::invalid_argument) {
+    } catch (const std::invalid_argument &) {
       // not a Poldi2DFunction - skip (the background functions)
     }
 
@@ -1313,7 +1313,7 @@ void PoldiFitPeaks2D::exec() {
           ITableWorkspace_sptr cell =
               getRefinedCellParameters(poldi2DFunction->getFunction(i));
           cells.push_back(cell);
-        } catch (std::invalid_argument) {
+        } catch (const std::invalid_argument &) {
           // do nothing
         }
       }
diff --git a/Framework/SINQ/src/PoldiIndexKnownCompounds.cpp b/Framework/SINQ/src/PoldiIndexKnownCompounds.cpp
index 36010ba3c079d53542a0719877c99ae40a7460a3..bb77d1898de08efae066b479abb9480503b782f1 100644
--- a/Framework/SINQ/src/PoldiIndexKnownCompounds.cpp
+++ b/Framework/SINQ/src/PoldiIndexKnownCompounds.cpp
@@ -210,7 +210,7 @@ std::vector<Workspace_sptr> PoldiIndexKnownCompounds::getWorkspaces(
       } else {
         workspaces.insert(workspaces.end(), currentWorkspace);
       }
-    } catch (Kernel::Exception::NotFoundError) {
+    } catch (const Kernel::Exception::NotFoundError &) {
       Workspace_sptr invalid;
       workspaces.insert(workspaces.end(), invalid);
     }
diff --git a/Framework/SINQ/src/PoldiTruncateData.cpp b/Framework/SINQ/src/PoldiTruncateData.cpp
index 8206e5622262d91a4e0e0cb1ae05f91726123932..741701334617331abf30dc6adb9a43842ac78d7b 100644
--- a/Framework/SINQ/src/PoldiTruncateData.cpp
+++ b/Framework/SINQ/src/PoldiTruncateData.cpp
@@ -160,12 +160,12 @@ void PoldiTruncateData::exec() {
             "ExtraCountsWorkspace", extraCountsWorkspaceName,
             Direction::Output));
         setProperty("ExtraCountsWorkspace", extraCounts);
-      } catch (std::invalid_argument) {
+      } catch (const std::invalid_argument &) {
         m_log.warning() << "Extra count information was requested, but there "
                            "are no extra bins.\n";
       }
     }
-  } catch (std::invalid_argument) {
+  } catch (const std::invalid_argument &) {
     m_log.error()
         << "Cannot crop workspace. Please check the timing information.\n";
     m_log.error() << "  Calculated bin count: " << getCalculatedBinCount()
diff --git a/Framework/SINQ/src/PoldiUtilities/PoldiAutoCorrelationCore.cpp b/Framework/SINQ/src/PoldiUtilities/PoldiAutoCorrelationCore.cpp
index bd62179cc946e391f07a078d7ef8fecff7f7961c..4911e091580115b3a7cbdac6c93d2c07bfaad3e1 100644
--- a/Framework/SINQ/src/PoldiUtilities/PoldiAutoCorrelationCore.cpp
+++ b/Framework/SINQ/src/PoldiUtilities/PoldiAutoCorrelationCore.cpp
@@ -326,7 +326,7 @@ PoldiAutoCorrelationCore::getRawCorrelatedIntensity(double dValue,
      * The algorithm used for this depends on the intended use.
      */
     return reduceChopperSlitList(current, weight);
-  } catch (std::domain_error) {
+  } catch (const std::domain_error &) {
     /* Trying to construct an UncertainValue with negative error will throw, so
      * to preserve
      * the old "checking behavior", this exception is caught here.
@@ -552,7 +552,7 @@ double PoldiAutoCorrelationCore::reduceChopperSlitList(
     return pow(static_cast<double>(valuesWithSigma.size()), 2.0) /
            std::accumulate(signalToNoise.begin(), signalToNoise.end(), 0.0) *
            weight;
-  } catch (std::domain_error) {
+  } catch (const std::domain_error &) {
     return 0.0;
   }
 }
diff --git a/Framework/SINQ/src/PoldiUtilities/PoldiInstrumentAdapter.cpp b/Framework/SINQ/src/PoldiUtilities/PoldiInstrumentAdapter.cpp
index ac4c7526b1e254efa4c13566eed525c0a629d9dd..a60b53186be57fa56d185df71f9ac49fbd98162b 100644
--- a/Framework/SINQ/src/PoldiUtilities/PoldiInstrumentAdapter.cpp
+++ b/Framework/SINQ/src/PoldiUtilities/PoldiInstrumentAdapter.cpp
@@ -221,7 +221,7 @@ bool PoldiInstrumentAdapter::chopperSpeedMatchesTarget(
   try {
     double targetChopperSpeed = getChopperSpeedTargetFromRun(runInformation);
     return fabs(targetChopperSpeed - chopperSpeed) <= 1e-4;
-  } catch (std::runtime_error) {
+  } catch (const std::runtime_error &) {
     // Old data files don't have information on target chopper speed. Do
     // nothing.
     return true;
diff --git a/Framework/SINQ/src/PoldiUtilities/PoldiPeakCollection.cpp b/Framework/SINQ/src/PoldiUtilities/PoldiPeakCollection.cpp
index ce0c956ca4a2010a49a0d4622ba417b54f4f3a2f..0c2e06baf19cf3ba8183c4a2a08930473226d662 100644
--- a/Framework/SINQ/src/PoldiUtilities/PoldiPeakCollection.cpp
+++ b/Framework/SINQ/src/PoldiUtilities/PoldiPeakCollection.cpp
@@ -320,7 +320,7 @@ UnitCell PoldiPeakCollection::unitCellFromString(
 
   try {
     cell = strToUnitCell(unitCellString);
-  } catch (std::runtime_error) {
+  } catch (const std::runtime_error &) {
     // do nothing
   }