Index: /stable/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithm.cs
===================================================================
--- /stable/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithm.cs	(revision 13133)
+++ /stable/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithm.cs	(revision 13134)
@@ -339,6 +339,11 @@
       ParameterizeSelectors();
 
-      foreach (IMigrator migrator in ApplicationManager.Manager.GetInstances<IMigrator>().OrderBy(x => x.Name))
+      foreach (IMigrator migrator in ApplicationManager.Manager.GetInstances<IMigrator>().OrderBy(x => x.Name)) {
+        // BackwardsCompatibility3.3
+        // Set the migration direction to counterclockwise
+        var unidirectionalRing = migrator as UnidirectionalRingMigrator;
+        if (unidirectionalRing != null) unidirectionalRing.ClockwiseMigrationParameter.Value = new BoolValue(false);
         MigratorParameter.ValidValues.Add(migrator);
+      }
 
       qualityAnalyzer = new BestAverageWorstQualityAnalyzer();
Index: /stable/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/IslandOffspringSelectionGeneticAlgorithm.cs
===================================================================
--- /stable/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/IslandOffspringSelectionGeneticAlgorithm.cs	(revision 13133)
+++ /stable/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/IslandOffspringSelectionGeneticAlgorithm.cs	(revision 13134)
@@ -405,6 +405,11 @@
       ParameterizeSelectors();
 
-      foreach (IMigrator migrator in ApplicationManager.Manager.GetInstances<IMigrator>().OrderBy(x => x.Name))
+      foreach (IMigrator migrator in ApplicationManager.Manager.GetInstances<IMigrator>().OrderBy(x => x.Name)) {
+        // BackwardsCompatibility3.3
+        // Set the migration direction to counterclockwise
+        var unidirectionalRing = migrator as UnidirectionalRingMigrator;
+        if (unidirectionalRing != null) unidirectionalRing.ClockwiseMigrationParameter.Value = new BoolValue(false);
         MigratorParameter.ValidValues.Add(migrator);
+      }
 
       foreach (IDiscreteDoubleValueModifier modifier in ApplicationManager.Manager.GetInstances<IDiscreteDoubleValueModifier>().OrderBy(x => x.Name))
Index: /stable/HeuristicLab.Optimization.Operators/3.3/UnidirectionalRingMigrator.cs
===================================================================
--- /stable/HeuristicLab.Optimization.Operators/3.3/UnidirectionalRingMigrator.cs	(revision 13133)
+++ /stable/HeuristicLab.Optimization.Operators/3.3/UnidirectionalRingMigrator.cs	(revision 13134)
@@ -23,5 +23,7 @@
 using HeuristicLab.Common;
 using HeuristicLab.Core;
+using HeuristicLab.Data;
 using HeuristicLab.Operators;
+using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
@@ -33,9 +35,26 @@
   [StorableClass]
   public class UnidirectionalRingMigrator : SingleSuccessorOperator, IMigrator {
+    public IValueLookupParameter<BoolValue> ClockwiseMigrationParameter {
+      get { return (IValueLookupParameter<BoolValue>)Parameters["ClockwiseMigration"]; }
+    }
+
     [StorableConstructor]
     protected UnidirectionalRingMigrator(bool deserializing) : base(deserializing) { }
     protected UnidirectionalRingMigrator(UnidirectionalRingMigrator original, Cloner cloner) : base(original, cloner) { }
-    public UnidirectionalRingMigrator() : base() { }
 
+    public UnidirectionalRingMigrator()
+      : base() {
+      Parameters.Add(new ValueLookupParameter<BoolValue>("ClockwiseMigration", "True to migrate individuals clockwise, false to migrate individuals counterclockwise.", new BoolValue(true)));
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      // BackwardsCompatibility3.3
+      #region Backwards compatible code (remove with 3.4)
+      if (!Parameters.ContainsKey("ClockwiseMigration")) {
+        Parameters.Add(new ValueLookupParameter<BoolValue>("ClockwiseMigration", "True to migrate individuals clockwise, false to migrate individuals counterclockwise.", new BoolValue(false)));
+      }
+      #endregion
+    }
     public override IDeepCloneable Clone(Cloner cloner) {
       return new UnidirectionalRingMigrator(this, cloner);
@@ -43,6 +62,7 @@
 
     /// <summary>
-    /// Migrates every first sub scope of each child to its left neighbour (like a ring).
-    /// <pre>                                                               
+    /// Migrates every first sub scope of each child to its right or left neighbour (like a ring).
+    /// If clockwise migration (default) is used the selected scopes A D G becomes G A D, contrary to counterclockwise where A D G becomes D G A.
+    /// <pre>
     ///          __ scope __              __ scope __
     ///         /     |     \            /     |     \
@@ -56,4 +76,5 @@
     /// <returns>The next operation.</returns>
     public override IOperation Apply() {
+      bool clockwise = ClockwiseMigrationParameter.ActualValue.Value;
       IScope scope = ExecutionContext.Scope;
       List<IScope> emigrantsList = new List<IScope>();
@@ -65,7 +86,13 @@
       }
 
-      // shift first emigrants to end of list
-      emigrantsList.Add(emigrantsList[0]);
-      emigrantsList.RemoveAt(0);
+      if (clockwise) {
+        // shift last emigrants to start of list
+        emigrantsList.Insert(0, emigrantsList[emigrantsList.Count - 1]);
+        emigrantsList.RemoveAt(emigrantsList.Count - 1);
+      } else {
+        // shift first emigrants to end of list
+        emigrantsList.Add(emigrantsList[0]);
+        emigrantsList.RemoveAt(0);
+      }
 
       for (int i = 0; i < scope.SubScopes.Count; i++)
