diff --git a/Framework/Algorithms/inc/MantidAlgorithms/SortXAxis2.h b/Framework/Algorithms/inc/MantidAlgorithms/SortXAxis2.h
index cc91d13156c656324380141672066e1ece5fee6a..31442cce2ab320dc02421d8b906e28377ee8dc23 100644
--- a/Framework/Algorithms/inc/MantidAlgorithms/SortXAxis2.h
+++ b/Framework/Algorithms/inc/MantidAlgorithms/SortXAxis2.h
@@ -71,7 +71,7 @@ private:
                         Mantid::API::MatrixWorkspace_const_sptr inputWorkspace,
                         Mantid::API::MatrixWorkspace_sptr outputWorkspace,
                         const size_t sizeOfX, const size_t sizeOfY,
-                        unsigned int specNum);
+                        unsigned int specNum);              
 };
 
 } // namespace Algorithms
diff --git a/Framework/Algorithms/src/SortXAxis2.cpp b/Framework/Algorithms/src/SortXAxis2.cpp
index 6747920f126908444e32506fecda4933c042e366..60f0c2c7599f7502635ce7db9a0c4c5a8edada71 100644
--- a/Framework/Algorithms/src/SortXAxis2.cpp
+++ b/Framework/Algorithms/src/SortXAxis2.cpp
@@ -67,22 +67,26 @@ std::vector<std::size_t> SortXAxis::createIndexes(const size_t sizeOfX) {
   return workspaceIndicies;
 }
 
+template <typename Comparator>
+void sortByXValue(std::vector<std::size_t> &workspaceIndicies,
+                  MatrixWorkspace_const_sptr inputWorkspace, 
+                  unsigned int specNum,
+                  Comparator const& compare) {
+  std::sort(workspaceIndicies.begin(), workspaceIndicies.end(), 
+    [&](std::size_t lhs, std::size_t rhs) -> bool {
+      return compare(inputWorkspace->x(specNum)[lhs], 
+                     inputWorkspace->x(specNum)[rhs]);
+    });
+}
+
 void SortXAxis::sortIndicesByX(std::vector<std::size_t> &workspaceIndicies,
                                std::string order,
                                MatrixWorkspace_const_sptr inputWorkspace,
                                unsigned int specNum) {
   if (order == "Ascending") {
-    std::sort(workspaceIndicies.begin(), workspaceIndicies.end(),
-              [&](std::size_t lhs, std::size_t rhs) -> bool {
-                return inputWorkspace->x(specNum)[lhs] <
-                       inputWorkspace->x(specNum)[rhs];
-              });
+    sortByXValue(workspaceIndicies, inputWorkspace, specNum, std::less<double>());
   } else if (order == "Descending") {
-    std::sort(workspaceIndicies.begin(), workspaceIndicies.end(),
-              [&](std::size_t lhs, std::size_t rhs) -> bool {
-                return inputWorkspace->x(specNum)[lhs] >
-                       inputWorkspace->x(specNum)[rhs];
-              });
+    sortByXValue(workspaceIndicies, inputWorkspace, specNum, std::greater<double>());
   }
 }