Index: /stable/HeuristicLab.Encodings.LinearLinkageEncoding/3.3/Manipulators/MultiLLEManipulator.cs
===================================================================
--- /stable/HeuristicLab.Encodings.LinearLinkageEncoding/3.3/Manipulators/MultiLLEManipulator.cs	(revision 12746)
+++ /stable/HeuristicLab.Encodings.LinearLinkageEncoding/3.3/Manipulators/MultiLLEManipulator.cs	(revision 12747)
@@ -58,6 +58,4 @@
           Operators.Add((ILinearLinkageManipulator)Activator.CreateInstance(type), true);
       }
-      Operators.SetItemCheckedState(Operators.OfType<SwapItemManipulator>().First(), false);
-      Operators.SetItemCheckedState(Operators.OfType<GraftManipulator>().First(), false);
       SelectedOperatorParameter.ActualName = "SelectedManipulationOperator";
     }
Index: /stable/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj
===================================================================
--- /stable/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj	(revision 12746)
+++ /stable/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj	(revision 12747)
@@ -146,4 +146,5 @@
     <EmbeddedResource Include="Documents\GridSearch_SVM_Regression_Script.hl" />
     <EmbeddedResource Include="Documents\VNS_OP.hl" />
+    <EmbeddedResource Include="Documents\GA_Grouping.hl" />
     <None Include="Plugin.cs.frame" />
     <Compile Include="OptimizerSingleDocumentMainForm.cs">
Index: /stable/HeuristicLab.Optimizer/3.3/StartPage.cs
===================================================================
--- /stable/HeuristicLab.Optimizer/3.3/StartPage.cs	(revision 12746)
+++ /stable/HeuristicLab.Optimizer/3.3/StartPage.cs	(revision 12747)
@@ -65,6 +65,5 @@
         using (Stream stream = assembly.GetManifestResourceStream(typeof(StartPage), "Documents.FirstSteps.rtf"))
           firstStepsRichTextBox.LoadFile(stream, RichTextBoxStreamType.RichText);
-      }
-      catch (Exception) { }
+      } catch (Exception) { }
 
       samplesListView.Enabled = false;
@@ -112,6 +111,5 @@
 
         OnAllSamplesLoaded();
-      }
-      finally {
+      } finally {
         MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().RemoveOperationProgressFromView(samplesListView);
       }
@@ -126,8 +124,6 @@
           OnSampleLoaded(item, group, 1.0 / count);
         }
-      }
-      catch (Exception) {
-      }
-      finally {
+      } catch (Exception) {
+      } finally {
         if (File.Exists(path)) {
           File.Delete(path); // make sure we remove the temporary file
@@ -137,5 +133,5 @@
 
     private void FillGroupLookup() {
-      var standardProblems = new List<string> { "ES_Griewank", "GA_TSP", "GA_VRP", "GE_ArtificialAnt",
+      var standardProblems = new List<string> { "ES_Griewank", "GA_Grouping", "GA_TSP", "GA_VRP", "GE_ArtificialAnt",
                 "IslandGA_TSP", "LS_Knapsack", "PSO_Schwefel", "RAPGA_JSSP",
                 "SA_Rastrigin", "SGP_SantaFe","GP_Multiplexer", "SS_VRP", "TS_TSP", "TS_VRP", "VNS_OP" ,"VNS_TSP"
@@ -185,6 +181,5 @@
           mainForm.SetWaitCursor();
           mainForm.ShowContent((IContent)((IItem)samplesListView.SelectedItems[0].Tag).Clone());
-        }
-        finally {
+        } finally {
           mainForm.ResetWaitCursor();
         }
Index: /stable/HeuristicLab.Tests/HeuristicLab-3.3/Samples/GAGroupingProblemSampleTest.cs
===================================================================
--- /stable/HeuristicLab.Tests/HeuristicLab-3.3/Samples/GAGroupingProblemSampleTest.cs	(revision 12747)
+++ /stable/HeuristicLab.Tests/HeuristicLab-3.3/Samples/GAGroupingProblemSampleTest.cs	(revision 12747)
@@ -0,0 +1,133 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.IO;
+using HeuristicLab.Algorithms.GeneticAlgorithm;
+using HeuristicLab.Encodings.LinearLinkageEncoding;
+using HeuristicLab.Persistence.Default.Xml;
+using HeuristicLab.Problems.Programmable;
+using HeuristicLab.Selection;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace HeuristicLab.Tests {
+  [TestClass]
+  public class GAGroupingProblemSampleTest {
+    private const string SampleFileName = "GA_Grouping";
+    #region Code
+    private const string ProblemCode = @"
+using System;
+using System.Linq;
+using System.Collections.Generic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.LinearLinkageEncoding;
+using HeuristicLab.Optimization;
+using HeuristicLab.Problems.Programmable;
+
+namespace HeuristicLab.Problems.Programmable {
+  public class CompiledSingleObjectiveProblemDefinition : CompiledProblemDefinition, ISingleObjectiveProblemDefinition {
+    private const int ProblemSize = 100;
+    public bool Maximization { get { return false; } }
+
+    private bool[,] allowedTogether;
+      
+    public override void Initialize() {
+      var encoding = new LinearLinkageEncoding(""lle"", length: ProblemSize);
+      allowedTogether = new bool[encoding.Length, encoding.Length];
+      var random = new System.Random(13);
+      for (var i = 0; i < encoding.Length - 1; i++)
+        for (var j = i + 1; j < encoding.Length; j++)
+          allowedTogether[i, j] = allowedTogether[j, i] = random.Next(2) == 0;
+      
+      Encoding = encoding;
+    }
+
+    public double Evaluate(Individual individual, IRandom random) {
+      var penalty = 0;
+      var groups = individual.LinearLinkage(""lle"").GetGroups().ToList();
+      for (var i = 0; i < groups.Count; i++) {
+        for (var j = 0; j < groups[i].Count; j++)
+          for (var k = j + 1; k < groups[i].Count; k++)
+            if (!allowedTogether[groups[i][j], groups[i][k]]) penalty++;
+      }
+      if (penalty > 0) return penalty + ProblemSize;
+      else return groups.Count;
+    }
+
+    public void Analyze(Individual[] individuals, double[] qualities, ResultCollection results, IRandom random) { }
+
+    public IEnumerable<Individual> GetNeighbors(Individual individual, IRandom random) {
+      foreach (var move in ExhaustiveSwap2MoveGenerator.Generate(individual.LinearLinkage(""lle""))) {
+        var neighbor = individual.Copy();
+        var lle = neighbor.LinearLinkage(""lle"");
+        Swap2MoveMaker.Apply(lle, move);
+        yield return neighbor;
+      }
+    }
+  }
+}
+";
+    #endregion
+
+    [TestMethod]
+    [TestCategory("Samples.Create")]
+    [TestProperty("Time", "medium")]
+    public void CreateGaGroupingProblemSampleTest() {
+      var ga = CreateGaGroupingProblemSample();
+      string path = Path.Combine(SamplesUtils.SamplesDirectory, SampleFileName + SamplesUtils.SampleFileExtension);
+      XmlGenerator.Serialize(ga, path);
+    }
+
+    [TestMethod]
+    [TestCategory("Samples.Execute")]
+    [TestProperty("Time", "long")]
+    public void RunGaGroupingProblemSampleTest() {
+      var ga = CreateGaGroupingProblemSample();
+      ga.SetSeedRandomly.Value = false;
+      SamplesUtils.RunAlgorithm(ga);
+      Assert.AreEqual(26, SamplesUtils.GetDoubleResult(ga, "BestQuality"));
+      Assert.AreEqual(27.58, SamplesUtils.GetDoubleResult(ga, "CurrentAverageQuality"));
+      Assert.AreEqual(105, SamplesUtils.GetDoubleResult(ga, "CurrentWorstQuality"));
+      Assert.AreEqual(99100, SamplesUtils.GetIntResult(ga, "EvaluatedSolutions"));
+    }
+
+    private GeneticAlgorithm CreateGaGroupingProblemSample() {
+      GeneticAlgorithm ga = new GeneticAlgorithm();
+
+      #region Problem Configuration
+      var problem = new SingleObjectiveProgrammableProblem() {
+        ProblemScript = { Code = ProblemCode }
+      };
+      problem.ProblemScript.Compile();
+      #endregion
+      #region Algorithm Configuration
+      ga.Name = "Genetic Algorithm - Grouping Problem";
+      ga.Description = "A genetic algorithm which solves a grouping problem using the linear linkage encoding.";
+      ga.Problem = problem;
+      SamplesUtils.ConfigureGeneticAlgorithmParameters<TournamentSelector, MultiLinearLinkageCrossover, MultiLinearLinkageManipulator>(
+        ga, 100, 1, 1000, 0.05, 2);
+      #endregion
+
+      return ga;
+    }
+  }
+}
Index: /stable/HeuristicLab.Tests/HeuristicLab.Tests.csproj
===================================================================
--- /stable/HeuristicLab.Tests/HeuristicLab.Tests.csproj	(revision 12746)
+++ /stable/HeuristicLab.Tests/HeuristicLab.Tests.csproj	(revision 12747)
@@ -189,4 +189,8 @@
       <Private>False</Private>
       <HintPath>..\bin\HeuristicLab.Encodings.IntegerVectorEncoding-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Encodings.LinearLinkageEncoding-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\bin\HeuristicLab.Encodings.LinearLinkageEncoding-3.3.dll</HintPath>
     </Reference>
     <Reference Include="HeuristicLab.Encodings.PermutationEncoding-3.3">
@@ -422,4 +426,5 @@
     <Compile Include="HeuristicLab-3.3\PluginDependenciesTest.cs" />
     <Compile Include="HeuristicLab-3.3\PluginLoader.cs" />
+    <Compile Include="HeuristicLab-3.3\Samples\GAGroupingProblemSampleTest.cs" />
     <Compile Include="HeuristicLab-3.3\Samples\VnsOpSampleTest.cs" />
     <Compile Include="HeuristicLab-3.3\Samples\EsGriewankSampleTest.cs" />
