Index: branches/GrammaticalEvolution/HeuristicLab.Problems.GrammaticalEvolution/ArtificialAnt/GEArtificialAntEvaluator.cs
===================================================================
--- branches/GrammaticalEvolution/HeuristicLab.Problems.GrammaticalEvolution/ArtificialAnt/GEArtificialAntEvaluator.cs	(revision 10296)
+++ branches/GrammaticalEvolution/HeuristicLab.Problems.GrammaticalEvolution/ArtificialAnt/GEArtificialAntEvaluator.cs	(revision 10328)
@@ -90,5 +90,5 @@
 
       Parameters.Add(new LookupParameter<IntMatrix>("Bounds", "The integer number range in which the single genomes of a genotype are created."));
-      Parameters.Add(new LookupParameter<IntValue>("MaximumExpressionLength", "Maximal length of the expression to control the artificial ant."));
+      Parameters.Add(new LookupParameter<IntValue>("MaximumExpressionLength", "Maximal length of the expression to control the artificial ant (genotype length)."));
     }
 
Index: branches/GrammaticalEvolution/HeuristicLab.Problems.GrammaticalEvolution/ArtificialAnt/GEArtificialAntProblem.cs
===================================================================
--- branches/GrammaticalEvolution/HeuristicLab.Problems.GrammaticalEvolution/ArtificialAnt/GEArtificialAntProblem.cs	(revision 10296)
+++ branches/GrammaticalEvolution/HeuristicLab.Problems.GrammaticalEvolution/ArtificialAnt/GEArtificialAntProblem.cs	(revision 10328)
@@ -158,5 +158,5 @@
       : base(new GEArtificialAntEvaluator(), new UniformRandomIntegerVectorCreator()) {
       BoolMatrix world = new BoolMatrix(santaFeAntTrail);
-      Parameters.Add(new ValueParameter<IntValue>("MaximumExpressionLength", "Maximal length of the expression to control the artificial ant.", new IntValue(30)));
+      Parameters.Add(new ValueParameter<IntValue>("MaximumExpressionLength", "Maximal length of the expression to control the artificial ant (genotype length).", new IntValue(30)));
       Parameters.Add(new ValueParameter<ISymbolicExpressionGrammar>("ArtificialAntExpressionGrammar", "The grammar that should be used for artificial ant expressions.", new ArtificialAntExpressionGrammar()));
       Parameters.Add(new ValueParameter<BoolMatrix>("World", "The world for the artificial ant with scattered food items.", world));
Index: branches/GrammaticalEvolution/HeuristicLab.Problems.GrammaticalEvolution/Mappers/BreathFirstMapper.cs
===================================================================
--- branches/GrammaticalEvolution/HeuristicLab.Problems.GrammaticalEvolution/Mappers/BreathFirstMapper.cs	(revision 10296)
+++ branches/GrammaticalEvolution/HeuristicLab.Problems.GrammaticalEvolution/Mappers/BreathFirstMapper.cs	(revision 10328)
@@ -52,4 +52,6 @@
     /// </summary>
     /// <param name="random">random number generator</param>
+    /// <param name="bounds">only used for PIGEMapper (ignore here)</param>
+    /// <param name="length">only used for PIGEMapper (ignore here)</param>
     /// <param name="grammar">grammar definition</param>
     /// <param name="genotype">integer vector, which should be mapped to a tree</param>
Index: branches/GrammaticalEvolution/HeuristicLab.Problems.GrammaticalEvolution/Mappers/DepthFirstMapper.cs
===================================================================
--- branches/GrammaticalEvolution/HeuristicLab.Problems.GrammaticalEvolution/Mappers/DepthFirstMapper.cs	(revision 10296)
+++ branches/GrammaticalEvolution/HeuristicLab.Problems.GrammaticalEvolution/Mappers/DepthFirstMapper.cs	(revision 10328)
@@ -52,4 +52,6 @@
     /// </summary>
     /// <param name="random">random number generator</param>
+    /// <param name="bounds">only used for PIGEMapper (ignore here)</param>
+    /// <param name="length">only used for PIGEMapper (ignore here)</param>
     /// <param name="grammar">grammar definition</param>
     /// <param name="genotype">integer vector, which should be mapped to a tree</param>
Index: branches/GrammaticalEvolution/HeuristicLab.Problems.GrammaticalEvolution/Mappers/GenotypeToPhenotypeMapper.cs
===================================================================
--- branches/GrammaticalEvolution/HeuristicLab.Problems.GrammaticalEvolution/Mappers/GenotypeToPhenotypeMapper.cs	(revision 10296)
+++ branches/GrammaticalEvolution/HeuristicLab.Problems.GrammaticalEvolution/Mappers/GenotypeToPhenotypeMapper.cs	(revision 10328)
@@ -97,5 +97,5 @@
       if (prodRuleCount < 1) return null;
 
-      // genotypeIndex % genotype.Length
+      // genotypeIndex % genotype.Length, if wrapping is allowed
       int prodRuleIndex = genotype[genotypeIndex] % prodRuleCount;
 
Index: branches/GrammaticalEvolution/HeuristicLab.Problems.GrammaticalEvolution/Mappers/PIGEMapper.cs
===================================================================
--- branches/GrammaticalEvolution/HeuristicLab.Problems.GrammaticalEvolution/Mappers/PIGEMapper.cs	(revision 10296)
+++ branches/GrammaticalEvolution/HeuristicLab.Problems.GrammaticalEvolution/Mappers/PIGEMapper.cs	(revision 10328)
@@ -97,4 +97,6 @@
     /// </summary>
     /// <param name="random">random number generator</param>
+    /// <param name="bounds">integer number range for genomes (codons) of the nont vector</param>
+    /// <param name="length">length of the nont vector to create</param>
     /// <param name="grammar">grammar definition</param>
     /// <param name="genotype">integer vector, which should be mapped to a tree</param>
@@ -121,4 +123,12 @@
 
 
+    /// <summary>
+    /// Genotype-to-Phenotype mapper (iterative 𝜋GE approach, using a list of not expanded nonTerminals).
+    /// </summary>
+    /// <param name="startNode">first node of the tree with arity 1</param>
+    /// <param name="genotype">integer vector, which should be mapped to a tree</param>
+    /// <param name="grammar">grammar to determine the allowed child symbols for each node</param>
+    /// <param name="maxSubtreeCount">maximum allowed subtrees (= number of used genomes)</param>
+    /// <param name="random">random number generator</param>
     private void MapPIGEIteratively(ISymbolicExpressionTreeNode startNode,
                                     IntegerVector genotype,
Index: branches/GrammaticalEvolution/HeuristicLab.Problems.GrammaticalEvolution/Mappers/RandomMapper.cs
===================================================================
--- branches/GrammaticalEvolution/HeuristicLab.Problems.GrammaticalEvolution/Mappers/RandomMapper.cs	(revision 10296)
+++ branches/GrammaticalEvolution/HeuristicLab.Problems.GrammaticalEvolution/Mappers/RandomMapper.cs	(revision 10328)
@@ -20,4 +20,5 @@
 #endregion
 
+using System.Collections.Generic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -31,5 +32,5 @@
   /// RandomMapper
   /// </summary>
-  [Item("RandomMapper", "")]
+  [Item("RandomMapper", "Randomly determines the next non-terminal symbol to expand.")]
   [StorableClass]
   public class RandomMapper : GenotypeToPhenotypeMapper {
@@ -50,4 +51,6 @@
     /// </summary>
     /// <param name="random">random number generator</param>
+    /// <param name="bounds">only used for PIGEMapper (ignore here)</param>
+    /// <param name="length">only used for PIGEMapper (ignore here)</param>
     /// <param name="grammar">grammar definition</param>
     /// <param name="genotype">integer vector, which should be mapped to a tree</param>
@@ -63,8 +66,53 @@
       tree.Root = rootNode;
 
-      // TODO
+      MapRandomIteratively(startNode, genotype, grammar,
+                           genotype.Length, random);
 
       return tree;
     }
+
+
+    /// <summary>
+    /// Genotype-to-Phenotype mapper (iterative random approach, where the next non-terminal
+    /// symbol to expand is randomly determined).
+    /// </summary>
+    /// <param name="startNode">first node of the tree with arity 1</param>
+    /// <param name="genotype">integer vector, which should be mapped to a tree</param>
+    /// <param name="grammar">grammar to determine the allowed child symbols for each node</param>
+    /// <param name="maxSubtreeCount">maximum allowed subtrees (= number of used genomes)</param>
+    /// <param name="random">random number generator</param>
+    private void MapRandomIteratively(ISymbolicExpressionTreeNode startNode,
+                                     IntegerVector genotype,
+                                     ISymbolicExpressionGrammar grammar,
+                                     int maxSubtreeCount, IRandom random) {
+
+      List<ISymbolicExpressionTreeNode> nonTerminals = new List<ISymbolicExpressionTreeNode>();
+
+      int genotypeIndex = 0;
+      nonTerminals.Add(startNode);
+
+      while (nonTerminals.Count > 0) {
+        if (genotypeIndex >= maxSubtreeCount) {
+          // if all genomes were used, only add terminal nodes to the remaining subtrees
+          ISymbolicExpressionTreeNode current = nonTerminals[0];
+          nonTerminals.RemoveAt(0);
+          current.AddSubtree(GetRandomTerminalNode(current, grammar, random));
+        } else {
+          // similar to PIGEMapper, but here the current node is determined randomly ...
+          ISymbolicExpressionTreeNode current = nonTerminals.SelectRandom(random);
+          nonTerminals.Remove(current);
+
+          ISymbolicExpressionTreeNode newNode = GetNewChildNode(current, genotype, grammar, genotypeIndex, random);
+          int arity = SampleArity(random, newNode, grammar);
+
+          current.AddSubtree(newNode);
+          genotypeIndex++;
+          // new node has subtrees, so add "arity" number of copies of this node to the nonTerminals list
+          for (int i = 0; i < arity; ++i) {
+            nonTerminals.Add(newNode);
+          }
+        }
+      }
+    }
   }
 }
Index: branches/GrammaticalEvolution/HeuristicLab.Problems.GrammaticalEvolution/Symbolic/GESymbolicRegressionSingleObjectiveProblem.cs
===================================================================
--- branches/GrammaticalEvolution/HeuristicLab.Problems.GrammaticalEvolution/Symbolic/GESymbolicRegressionSingleObjectiveProblem.cs	(revision 10296)
+++ branches/GrammaticalEvolution/HeuristicLab.Problems.GrammaticalEvolution/Symbolic/GESymbolicRegressionSingleObjectiveProblem.cs	(revision 10328)
@@ -38,5 +38,5 @@
                                                             IRegressionProblem {
     private const double PunishmentFactor = 10;
-    private const int InitialMaximumTreeLength = 25;
+    private const int InitialMaximumTreeLength = 30;
     private const string EstimationLimitsParameterName = "EstimationLimits";
     private const string EstimationLimitsParameterDescription
