Index: /trunk/sources/HeuristicLab.Core/3.3/Attributes/CreatableAttribute.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/Attributes/CreatableAttribute.cs	(revision 12505)
+++ /trunk/sources/HeuristicLab.Core/3.3/Attributes/CreatableAttribute.cs	(revision 12506)
@@ -27,24 +27,27 @@
     #region Predefined Categories
     public static class Categories {
-      public const string Splitter = "###";
+      public const string SplitToken = "###";
+      public const string OrderToken = "$$$";
 
-      public const string Algorithms = "Algorithms";
-      public const string PopulationBasedAlgorithms = Algorithms + Splitter + "Population Based";
-      public const string SingleSolutionAlgorithms = Algorithms + Splitter + "Single Solution";
+      public const string Algorithms = "1" + OrderToken + "Algorithms";
+      public const string PopulationBasedAlgorithms = Algorithms + SplitToken + "1" + OrderToken + "Population Based";
+      public const string SingleSolutionAlgorithms = Algorithms + SplitToken + "2" + OrderToken + "Single Solution";
 
-      public const string Problems = "Problems";
-      public const string CombinatorialProblems = Problems + Splitter + "Combinatorial";
-      public const string GeneticProgrammingProblems = Problems + Splitter + "Genetic Programming";
-      public const string ExternalEvaluationProblems = Problems + Splitter + "External Evaluation";
+      public const string Problems = "2" + OrderToken + "Problems";
+      public const string CombinatorialProblems = Problems + SplitToken + "1" + OrderToken + "Combinatorial";
+      public const string GeneticProgrammingProblems = Problems + SplitToken + "2" + OrderToken + "Genetic Programming";
+      public const string ExternalEvaluationProblems = Problems + SplitToken + "3" + OrderToken + "External Evaluation";
 
-      public const string DataAnalysis = "Data Analysis";
-      public const string DataAnalysisClassification = DataAnalysis + Splitter + "Classification";
-      public const string DataAnalysisRegression = DataAnalysis + Splitter + "Regression";
-      public const string DataAnalysisEnsembles = DataAnalysis + Splitter + "Ensembles";
+      public const string DataAnalysis = "3" + OrderToken + "Data Analysis";
+      public const string DataAnalysisRegression = DataAnalysis + SplitToken + "1" + OrderToken + "Regression";
+      public const string DataAnalysisClassification = DataAnalysis + SplitToken + "2" + OrderToken + "Classification";
+      public const string DataAnalysisEnsembles = DataAnalysis + SplitToken + "3" + OrderToken + "Ensembles";
 
-      public const string TestingAndAnalysis = "Testing & Analysis";
-      public const string TestingAndAnalysisOKB = TestingAndAnalysis + Splitter + "OKB";
+      public const string TestingAndAnalysis = "4" + OrderToken + "Testing & Analysis";
+      public const string TestingAndAnalysisOKB = TestingAndAnalysis + SplitToken + "1" + OrderToken + "OKB";
 
-      public const string Scripts = "5 - Scripts";
+      public const string Scripts = "5" + OrderToken + "Scripts";
+
+
     }
     #endregion
Index: /trunk/sources/HeuristicLab.Optimizer/3.3/NewItemDialog.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimizer/3.3/NewItemDialog.cs	(revision 12505)
+++ /trunk/sources/HeuristicLab.Optimizer/3.3/NewItemDialog.cs	(revision 12506)
@@ -96,7 +96,8 @@
       foreach (var category in categories) {
         var fullName = category.Key;
-        var tokens = fullName.Split(new[] { CreatableAttribute.Categories.Splitter }, StringSplitOptions.RemoveEmptyEntries);
+        var tokensWithOrdering = fullName.Split(new[] { CreatableAttribute.Categories.SplitToken }, StringSplitOptions.RemoveEmptyEntries);
+        var tokens = tokensWithOrdering.Select(t => t.Split(new[] { CreatableAttribute.Categories.OrderToken }, StringSplitOptions.RemoveEmptyEntries).Last()).ToList();
         var name = tokens.Last();
-        var parents = tokens.Take(tokens.Length - 1);
+        var parents = tokensWithOrdering.Take(tokens.Count - 1);
 
         var categoryNode = new TreeNode(name, imageIndex: 1, selectedImageIndex: 1) {
@@ -118,5 +119,5 @@
       string fullName = null;
       foreach (string parentCategory in parentCategories) {
-        fullName = fullName == null ? parentCategory : fullName + "#" + parentCategory;
+        fullName = fullName == null ? parentCategory : fullName + CreatableAttribute.Categories.SplitToken + parentCategory;
         parentNode = node.Nodes.Find(fullName, searchAllChildren: false).SingleOrDefault();
         if (parentNode == null) {
