diff --git a/Framework/Algorithms/inc/MantidAlgorithms/CalculateZscore.h b/Framework/Algorithms/inc/MantidAlgorithms/CalculateZscore.h
index df88cbf1bc1c5fb8e1f644c1a14d188b732fc0fb..1ad6ae3a20961a7b0d1fb0da32c7574aed188da1 100644
--- a/Framework/Algorithms/inc/MantidAlgorithms/CalculateZscore.h
+++ b/Framework/Algorithms/inc/MantidAlgorithms/CalculateZscore.h
@@ -46,7 +46,7 @@ public:
   virtual int version() const { return 1; }
 
   /// Algorithm's category for identification overriding a virtual method
-  virtual const std::string category() const { return "Utility"; }
+  virtual const std::string category() const { return "Utility\\Calculation"; }
 
 private:
   /// Implement abstract Algorithm methods
diff --git a/Framework/Algorithms/inc/MantidAlgorithms/ChangeTimeZero.h b/Framework/Algorithms/inc/MantidAlgorithms/ChangeTimeZero.h
index c20dd17461a34116e41e5d03a03eb9264404dfe5..1bd283f85e1abf0cadc65e7e807ca499f85e2d79 100644
--- a/Framework/Algorithms/inc/MantidAlgorithms/ChangeTimeZero.h
+++ b/Framework/Algorithms/inc/MantidAlgorithms/ChangeTimeZero.h
@@ -28,7 +28,7 @@ public:
   /// Algorithm's version for identification
   virtual int version() const { return 1; };
   /// Algorithm's category for identification
-  virtual const std::string category() const { return "Utility"; }
+  virtual const std::string category() const { return "Utility\\Workspaces"; }
 
 private:
   /// Initialise the properties
diff --git a/Framework/Algorithms/inc/MantidAlgorithms/CrossCorrelate.h b/Framework/Algorithms/inc/MantidAlgorithms/CrossCorrelate.h
index b838209bd507f5211a6ba421ccf6ae05d60e21c8..eb60ad91ab59c5774af661ff71589a9fdc14f38f 100644
--- a/Framework/Algorithms/inc/MantidAlgorithms/CrossCorrelate.h
+++ b/Framework/Algorithms/inc/MantidAlgorithms/CrossCorrelate.h
@@ -77,7 +77,7 @@ public:
   /// Algorithm's version
   virtual int version() const { return (1); }
   /// Algorithm's category for identification
-  virtual const std::string category() const { return "Utility;Arithmetic"; }
+  virtual const std::string category() const { return "Arithmetic"; }
 
 private:
   /// Initialisation code
diff --git a/Framework/Algorithms/inc/MantidAlgorithms/FindPeakBackground.h b/Framework/Algorithms/inc/MantidAlgorithms/FindPeakBackground.h
index 25443414ec02844abd0e363f6926c0246ffc809f..e29dd69b107b333c88b0071039a2cbfd195ebd25 100644
--- a/Framework/Algorithms/inc/MantidAlgorithms/FindPeakBackground.h
+++ b/Framework/Algorithms/inc/MantidAlgorithms/FindPeakBackground.h
@@ -46,7 +46,7 @@ public:
   virtual int version() const { return 1; }
 
   /// Algorithm's category for identification overriding a virtual method
-  virtual const std::string category() const { return "Utility"; }
+  virtual const std::string category() const { return "Utility\\Calculation"; }
 
 private:
   std::string m_backgroundType; //< The type of background to fit
diff --git a/Framework/Algorithms/inc/MantidAlgorithms/GenerateIPythonNotebook.h b/Framework/Algorithms/inc/MantidAlgorithms/GenerateIPythonNotebook.h
index 126afef6d20446b353571ccb22daf282e8006d36..fa720c8015368b3505a3b9b8b563bb68820821e7 100644
--- a/Framework/Algorithms/inc/MantidAlgorithms/GenerateIPythonNotebook.h
+++ b/Framework/Algorithms/inc/MantidAlgorithms/GenerateIPythonNotebook.h
@@ -55,7 +55,7 @@ public:
   /// Algorithm's version for identification
   virtual int version() const { return 1; };
   /// Algorithm's category for identification
-  virtual const std::string category() const { return "Utility\\Development"; }
+  virtual const std::string category() const { return "Utility\\Python"; }
 
 protected:
   /// Initialise the properties
diff --git a/Framework/Algorithms/inc/MantidAlgorithms/GeneratePythonScript.h b/Framework/Algorithms/inc/MantidAlgorithms/GeneratePythonScript.h
index 23df6bb7a6d9922c2af8cda5919dec6606891beb..923a9874432cac4c2192d4a2911ed6cc93e4ad04 100644
--- a/Framework/Algorithms/inc/MantidAlgorithms/GeneratePythonScript.h
+++ b/Framework/Algorithms/inc/MantidAlgorithms/GeneratePythonScript.h
@@ -58,7 +58,7 @@ public:
   /// Algorithm's version for identification
   virtual int version() const { return 1; };
   /// Algorithm's category for identification
-  virtual const std::string category() const { return "Utility\\Development"; }
+  virtual const std::string category() const { return "Utility\\Python"; }
 
 protected:
   /// Initialise the properties
diff --git a/Framework/Algorithms/inc/MantidAlgorithms/RecordPythonScript.h b/Framework/Algorithms/inc/MantidAlgorithms/RecordPythonScript.h
index aaccb88f198bd6be1687c6baef82eea85b1d5447..59e9c3ffaaaad2ad550762f7f01ed2250c5ab15b 100644
--- a/Framework/Algorithms/inc/MantidAlgorithms/RecordPythonScript.h
+++ b/Framework/Algorithms/inc/MantidAlgorithms/RecordPythonScript.h
@@ -58,7 +58,7 @@ public:
   virtual int version() const { return 1; };
   /// Algorithm's category for identification
   virtual const std::string category() const {
-    return "Utility";
+    return "Utility\\Python";
   }
 
 private:
diff --git a/Framework/Algorithms/inc/MantidAlgorithms/ReplaceSpecialValues.h b/Framework/Algorithms/inc/MantidAlgorithms/ReplaceSpecialValues.h
index 52b5618c38dcb6c6b9da90c8095907aca697f2b4..230b841e913cda17d60449f0c30293553798c405 100644
--- a/Framework/Algorithms/inc/MantidAlgorithms/ReplaceSpecialValues.h
+++ b/Framework/Algorithms/inc/MantidAlgorithms/ReplaceSpecialValues.h
@@ -71,7 +71,7 @@ public:
   virtual int version() const { return 1; }
   /// Algorithm's category for identification
   virtual const std::string category() const {
-    return "Utility;CorrectionFunctions\\SpecialCorrections";
+    return "CorrectionFunctions\\SpecialCorrections";
   }
 
 private:
diff --git a/Framework/Algorithms/inc/MantidAlgorithms/SortEvents.h b/Framework/Algorithms/inc/MantidAlgorithms/SortEvents.h
index dbb110decd15454e47f8b623994b7fb58f903d31..17a37c84d29d0ebaaec62f06271451dfa3e575b1 100644
--- a/Framework/Algorithms/inc/MantidAlgorithms/SortEvents.h
+++ b/Framework/Algorithms/inc/MantidAlgorithms/SortEvents.h
@@ -58,7 +58,7 @@ public:
   /// Algorithm's version for identification overriding a virtual method
   virtual int version() const { return 1; }
   /// Algorithm's category for identification overriding a virtual method
-  virtual const std::string category() const { return "Events"; }
+  virtual const std::string category() const { return "Events;Utility\\Sorting"; }
 
 protected:
   // Overridden Algorithm methods
diff --git a/Framework/Algorithms/src/ClearMaskFlag.cpp b/Framework/Algorithms/src/ClearMaskFlag.cpp
index ba16cd12b7f8044256c751457a1aa14eeb3b6a06..030859d043850e4ffc592dd62c7ed6555c0fd46d 100644
--- a/Framework/Algorithms/src/ClearMaskFlag.cpp
+++ b/Framework/Algorithms/src/ClearMaskFlag.cpp
@@ -27,7 +27,7 @@ const std::string ClearMaskFlag::name() const { return "ClearMaskFlag"; }
 int ClearMaskFlag::version() const { return 1; }
 
 /// Algorithm's category for identification. @see Algorithm::category
-const std::string ClearMaskFlag::category() const { return "Utility"; }
+const std::string ClearMaskFlag::category() const { return "Transforms\\Masking"; }
 
 //----------------------------------------------------------------------------------------------
 /** Initialize the algorithm's properties.
diff --git a/Framework/Algorithms/src/Comment.cpp b/Framework/Algorithms/src/Comment.cpp
index 85e41a1ef5aa8798cc2b1af7e5a1c5baabf4b76b..277fdeeabcc3a97c0cf740d35c2f2b4e9830365b 100644
--- a/Framework/Algorithms/src/Comment.cpp
+++ b/Framework/Algorithms/src/Comment.cpp
@@ -31,7 +31,7 @@ const std::string Comment::name() const { return "Comment"; }
 int Comment::version() const { return 1; }
 
 /// Algorithm's category for identification. @see Algorithm::category
-const std::string Comment::category() const { return "Utility"; }
+const std::string Comment::category() const { return "Utility\\Workspaces"; }
 
 /// Algorithm's summary for use in the GUI and help. @see Algorithm::summary
 const std::string Comment::summary() const {
diff --git a/Framework/Algorithms/src/RemoveWorkspaceHistory.cpp b/Framework/Algorithms/src/RemoveWorkspaceHistory.cpp
index 4d6ecc74b7c086e20ae676fb58379e41b5325b97..d1805e8a63d6530efe74c0421d103573250e8571 100644
--- a/Framework/Algorithms/src/RemoveWorkspaceHistory.cpp
+++ b/Framework/Algorithms/src/RemoveWorkspaceHistory.cpp
@@ -30,7 +30,7 @@ const std::string RemoveWorkspaceHistory::name() const {
 int RemoveWorkspaceHistory::version() const { return 1; }
 
 /// Algorithm's category for identification. @see Algorithm::category
-const std::string RemoveWorkspaceHistory::category() const { return "Utility"; }
+const std::string RemoveWorkspaceHistory::category() const { return "Utility\\Workspaces"; }
 
 /// Algorithm's summary for identification. @see Algorithm::summary
 const std::string RemoveWorkspaceHistory::summary() const {
diff --git a/Framework/Algorithms/src/ResetNegatives.cpp b/Framework/Algorithms/src/ResetNegatives.cpp
index 695b8237766acd006e37905b21e70e281b91d4ed..d960470c1f39d44528bb2fd879e98ed7c861e2d1 100644
--- a/Framework/Algorithms/src/ResetNegatives.cpp
+++ b/Framework/Algorithms/src/ResetNegatives.cpp
@@ -29,7 +29,7 @@ const std::string ResetNegatives::name() const { return "ResetNegatives"; }
 int ResetNegatives::version() const { return 1; }
 
 /// @copydoc Mantid::API::IAlgorithm::category()
-const std::string ResetNegatives::category() const { return "Utility"; }
+const std::string ResetNegatives::category() const { return "CorrectionFunctions\\SpecialCorrections"; }
 
 //----------------------------------------------------------------------------------------------
 /// @copydoc Mantid::API::Algorithm::init()
diff --git a/Framework/Algorithms/src/UpdateScriptRepository.cpp b/Framework/Algorithms/src/UpdateScriptRepository.cpp
index 45e620542ce14a6f0d2a28b3e1af3f2bdea1df28..4143a6e9065e7d994dd19c7772394fe20f5e2b88 100644
--- a/Framework/Algorithms/src/UpdateScriptRepository.cpp
+++ b/Framework/Algorithms/src/UpdateScriptRepository.cpp
@@ -28,7 +28,7 @@ const std::string UpdateScriptRepository::name() const {
 int UpdateScriptRepository::version() const { return 1; }
 
 /// Algorithm's category for identification. @see Algorithm::category
-const std::string UpdateScriptRepository::category() const { return "Utility"; }
+const std::string UpdateScriptRepository::category() const { return "Utility\\Python"; }
 
 //----------------------------------------------------------------------------------------------
 
diff --git a/Framework/Crystal/inc/MantidCrystal/SortHKL.h b/Framework/Crystal/inc/MantidCrystal/SortHKL.h
index 7b7f1cac1a2749c1b95b62bcec74bc6f43e7d71b..ce4362c8c0f032245c78acea419ffa2f57d2b69e 100644
--- a/Framework/Crystal/inc/MantidCrystal/SortHKL.h
+++ b/Framework/Crystal/inc/MantidCrystal/SortHKL.h
@@ -32,7 +32,7 @@ public:
   virtual int version() const { return 1; };
   /// Algorithm's category for identification
   virtual const std::string category() const {
-    return "Crystal\\Peaks;DataHandling\\Text";
+    return "Crystal\\Peaks;DataHandling\\Text;Utility\\Sorting";
   }
 
 private:
diff --git a/Framework/Crystal/src/SortPeaksWorkspace.cpp b/Framework/Crystal/src/SortPeaksWorkspace.cpp
index a6c3d78d50305f3880a6485713fdc7d37551cfe7..e42ddd7b3387705e13509f81219daeaf5772c064 100644
--- a/Framework/Crystal/src/SortPeaksWorkspace.cpp
+++ b/Framework/Crystal/src/SortPeaksWorkspace.cpp
@@ -31,7 +31,7 @@ const std::string SortPeaksWorkspace::name() const {
 int SortPeaksWorkspace::version() const { return 1; }
 
 /// Algorithm's category for identification. @see Algorithm::category
-const std::string SortPeaksWorkspace::category() const { return "Crystal\\Peaks"; }
+const std::string SortPeaksWorkspace::category() const { return "Crystal\\Peaks;Utility\\Sorting"; }
 
 //----------------------------------------------------------------------------------------------
 
diff --git a/Framework/DataHandling/inc/MantidDataHandling/FindDetectorsInShape.h b/Framework/DataHandling/inc/MantidDataHandling/FindDetectorsInShape.h
index 1c7c33b13f0552b88456f570e2b0e0489b19b798..5e5bf5684e4818955e6cd94de129c9115459a4c7 100644
--- a/Framework/DataHandling/inc/MantidDataHandling/FindDetectorsInShape.h
+++ b/Framework/DataHandling/inc/MantidDataHandling/FindDetectorsInShape.h
@@ -71,7 +71,7 @@ public:
   /// Algorithm's version for identification overriding a virtual method
   virtual int version() const { return 1; };
   /// Algorithm's category for identification overriding a virtual method
-  virtual const std::string category() const { return "Utility"; }
+  virtual const std::string category() const { return "Utility\\Instrument"; }
 
 private:
   // Implement abstract Algorithm methods
diff --git a/Framework/DataHandling/src/SortTableWorkspace.cpp b/Framework/DataHandling/src/SortTableWorkspace.cpp
index cb9119ca6ec786f4b093ddceffa395efa77bee75..b8b5cd62d6c5fa4a577576be14e0d2470c217ba5 100644
--- a/Framework/DataHandling/src/SortTableWorkspace.cpp
+++ b/Framework/DataHandling/src/SortTableWorkspace.cpp
@@ -27,7 +27,7 @@ SortTableWorkspace::~SortTableWorkspace() {}
 int SortTableWorkspace::version() const { return 1; }
 
 /// Algorithm's category for identification. @see Algorithm::category
-const std::string SortTableWorkspace::category() const { return "Utility"; }
+const std::string SortTableWorkspace::category() const { return "Utility\\Sorting"; }
 
 /// Algorithm's summary for use in the GUI and help. @see Algorithm::summary
 const std::string SortTableWorkspace::summary() const {
diff --git a/Framework/PythonInterface/plugins/algorithms/ExportSampleLogsToCSVFile.py b/Framework/PythonInterface/plugins/algorithms/ExportSampleLogsToCSVFile.py
index cba8c10f0c444eca57be4cd1f758de1b50719b6b..7d6d8de90228ec813b48537ab90ba3dcda83a64d 100644
--- a/Framework/PythonInterface/plugins/algorithms/ExportSampleLogsToCSVFile.py
+++ b/Framework/PythonInterface/plugins/algorithms/ExportSampleLogsToCSVFile.py
@@ -24,7 +24,7 @@ class ExportSampleLogsToCSVFile(PythonAlgorithm):
     def category(self):
         """ Category
         """
-        return "Utility"
+        return "DataHandling\\Logs"
 
     def name(self):
         """ Algorithm name
diff --git a/Framework/PythonInterface/plugins/algorithms/RetrieveRunInfo.py b/Framework/PythonInterface/plugins/algorithms/RetrieveRunInfo.py
index 4acaafd30e3fd1415a60f4c91e626e1889f37a26..cf8a3e34f4e35b0348f26c23d811433c7aeb9f52 100644
--- a/Framework/PythonInterface/plugins/algorithms/RetrieveRunInfo.py
+++ b/Framework/PythonInterface/plugins/algorithms/RetrieveRunInfo.py
@@ -177,7 +177,7 @@ class FileBackedWsIterator(object):
 
 class RetrieveRunInfo(PythonAlgorithm):
     def category(self):
-        return 'Utility'
+        return 'DataHandling\\Catalog'
 
     def summary(self):
         return "Given a range of run numbers and an output workspace name, will compile a table of info for "+\
diff --git a/Framework/PythonInterface/plugins/algorithms/SavePlot1DAsJson.py b/Framework/PythonInterface/plugins/algorithms/SavePlot1DAsJson.py
index 7bc6cc433707c03185ec1ec1402151f124a6de45..66c1c7e330ede33705b7df112f6f4d3c2dee10fe 100644
--- a/Framework/PythonInterface/plugins/algorithms/SavePlot1DAsJson.py
+++ b/Framework/PythonInterface/plugins/algorithms/SavePlot1DAsJson.py
@@ -11,7 +11,7 @@ class SavePlot1DAsJson(PythonAlgorithm):
     def category(self):
         """
         """
-        return "Utility"
+        return "DataHandling\\Plots"
 
     def name(self):
         """
diff --git a/Framework/PythonInterface/plugins/algorithms/SortByQVectors.py b/Framework/PythonInterface/plugins/algorithms/SortByQVectors.py
index 8dc7728057aec05e15dfe8454c608e6c2261a81c..d55f6ed5cb8ade7725e3c67be66e0801da5c0ec1 100644
--- a/Framework/PythonInterface/plugins/algorithms/SortByQVectors.py
+++ b/Framework/PythonInterface/plugins/algorithms/SortByQVectors.py
@@ -11,7 +11,7 @@ class SortByQVectors(PythonAlgorithm):
     """
 
     def category(self):
-        return "Transforms\\Merging"
+        return "Transforms\\Merging;Utility\\Sorting"
 
     def name(self):
         return "SortByQVectors"
diff --git a/Framework/PythonInterface/plugins/algorithms/SortDetectors.py b/Framework/PythonInterface/plugins/algorithms/SortDetectors.py
index 5d92140055ef5d5be76b32623f649f42fe0c196a..6a1744585231ee8740bce406962fd138cb79f5f3 100644
--- a/Framework/PythonInterface/plugins/algorithms/SortDetectors.py
+++ b/Framework/PythonInterface/plugins/algorithms/SortDetectors.py
@@ -10,7 +10,7 @@ class SortDetectors(PythonAlgorithm):
     def category(self):
         """ Return category
         """
-        return "Utility"
+        return "Utility\\Sorting"
 
     def name(self):
         """ Return name
diff --git a/Framework/PythonInterface/plugins/algorithms/SortXAxis.py b/Framework/PythonInterface/plugins/algorithms/SortXAxis.py
index a839e7a3783c6c0a7ce9ddfc980f1c43838e0ea7..13483e879972ca532c55858c6cfc3612609b374e 100644
--- a/Framework/PythonInterface/plugins/algorithms/SortXAxis.py
+++ b/Framework/PythonInterface/plugins/algorithms/SortXAxis.py
@@ -8,7 +8,7 @@ import numpy as np
 class SortXAxis(PythonAlgorithm):
 
     def category(self):
-        return "Transforms\\Axes"
+        return "Transforms\\Axes;Utility\\Sorting"
 
 
     def name(self):
diff --git a/Framework/PythonInterface/plugins/algorithms/StatisticsOfTableWorkspace.py b/Framework/PythonInterface/plugins/algorithms/StatisticsOfTableWorkspace.py
index bc4591b6ae3db28a731ac7326c00fb4acbbc7bc4..829e4a4d07bd0ddfa6a922d1939fa44ac7b3b6e4 100644
--- a/Framework/PythonInterface/plugins/algorithms/StatisticsOfTableWorkspace.py
+++ b/Framework/PythonInterface/plugins/algorithms/StatisticsOfTableWorkspace.py
@@ -25,7 +25,7 @@ def _stats_to_dict(stats):
 class StatisticsOfTableWorkspace(PythonAlgorithm):
 
     def category(self):
-        return 'Utility'
+        return 'Utility\\Workspaces'
 
 
     def summary(self):
diff --git a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SavePlot1D.py b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SavePlot1D.py
index b29f7cea0b96004c2632536028c543543fc75ab0..c8974dcf3d11fb0de9969ce7c7e239feccea9639 100644
--- a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SavePlot1D.py
+++ b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SavePlot1D.py
@@ -8,7 +8,7 @@ class SavePlot1D(mantid.api.PythonAlgorithm):
     def category(self):
         """ Category
         """
-        return "Utility"
+        return "DataHandling\\Plots"
 
     def name(self):
         """ Algorithm name
diff --git a/Framework/WorkflowAlgorithms/src/SendUsage.cpp b/Framework/WorkflowAlgorithms/src/SendUsage.cpp
index c8c2e87b64417fe78028c8c937190b93f46ac9aa..3e0426e53bb5d74a9cfc366227a8bb24ebf322ee 100644
--- a/Framework/WorkflowAlgorithms/src/SendUsage.cpp
+++ b/Framework/WorkflowAlgorithms/src/SendUsage.cpp
@@ -76,7 +76,7 @@ const std::string SendUsage::name() const { return "SendUsage"; }
 int SendUsage::version() const { return 1; }
 
 /// Algorithm's category for identification. @see Algorithm::category
-const std::string SendUsage::category() const { return "Workflow"; }
+const std::string SendUsage::category() const { return "Workflow\\Reporting"; }
 
 /// Algorithm's summary for use in the GUI and help. @see Algorithm::summary
 const std::string SendUsage::summary() const {