Index: branches/3073_IA_constraint_splitting/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Converters/TreeSimplifier.cs
===================================================================
--- branches/3073_IA_constraint_splitting/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Converters/TreeSimplifier.cs	(revision 17825)
+++ branches/3073_IA_constraint_splitting/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Converters/TreeSimplifier.cs	(revision 17827)
@@ -934,10 +934,15 @@
         var constBValue = Math.Round(constB.Value);
         if (constBValue == 1.0) {
+          // root(a, 1) => a
           return a;
         } else if (constBValue == 0.0) {
-          return MakeConstant(1.0);
+          // root(a, 0) is not defined 
+          //return MakeConstant(1.0);
+          return MakeConstant(double.NaN);
         } else if (constBValue == -1.0) {
+          // root(a, -1) => a^(-1/1) => 1/a
           return MakeFraction(MakeConstant(1.0), a);
         } else if (constBValue < 0) {
+          // root(a, -b) => a^(-1/b) => (1/a)^(1/b) => root(1, b) / root(a, b) => 1 / root(a, b)
           var rootNode = rootSymbol.CreateTreeNode();
           rootNode.AddSubtree(a);
@@ -988,10 +993,14 @@
         double exponent = Math.Round(constB.Value);
         if (exponent == 0.0) {
+          // a^0 => 1
           return MakeConstant(1.0);
         } else if (exponent == 1.0) {
+          // a^1 => a
           return a;
         } else if (exponent == -1.0) {
+          // a^-1 => 1/a
           return MakeFraction(MakeConstant(1.0), a);
         } else if (exponent < 0) {
+          // a^-b => (1/a)^b => 1/(a^b)
           var powNode = powSymbol.CreateTreeNode();
           powNode.AddSubtree(a);
@@ -1019,4 +1028,5 @@
         return MakeConstant(((ConstantTreeNode)a).Value / ((ConstantTreeNode)b).Value);
       } else if ((IsConstant(a) && ((ConstantTreeNode)a).Value != 1.0)) {
+        // a / x => (a * 1/a) / (x * 1/a) => 1 / (x * 1/a)
         return MakeFraction(MakeConstant(1.0), MakeProduct(b, Invert(a)));
       } else if (IsVariableBase(a) && IsConstant(b)) {
Index: branches/3073_IA_constraint_splitting/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Converters/TreeToAutoDiffTermConverter.cs
===================================================================
--- branches/3073_IA_constraint_splitting/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Converters/TreeToAutoDiffTermConverter.cs	(revision 17825)
+++ branches/3073_IA_constraint_splitting/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Converters/TreeToAutoDiffTermConverter.cs	(revision 17827)
@@ -258,4 +258,13 @@
       if (node.Symbol is CubeRoot) {
         return cbrt(ConvertToAutoDiff(node.GetSubtree(0)));
+      }
+      if (node.Symbol is Power) {
+        var powerNode = node.GetSubtree(1) as ConstantTreeNode;
+        if (powerNode == null)
+          throw new NotSupportedException("Only integer powers are allowed in parameter optimization. Try to use exp() and log() instead of the power symbol.");
+        var intPower = Math.Truncate(powerNode.Value);
+        if (intPower != powerNode.Value)
+          throw new NotSupportedException("Only integer powers are allowed in parameter optimization. Try to use exp() and log() instead of the power symbol.");
+        return AutoDiff.TermBuilder.Power(ConvertToAutoDiff(node.GetSubtree(0)), intPower);
       }
       if (node.Symbol is Sine) {
@@ -340,5 +349,6 @@
           !(n.Symbol is AnalyticQuotient) &&
           !(n.Symbol is Cube) &&
-          !(n.Symbol is CubeRoot)
+          !(n.Symbol is CubeRoot) &&
+          !(n.Symbol is Power)
         select n).Any();
       return !containsUnknownSymbol;
Index: branches/3073_IA_constraint_splitting/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/InfixExpressionFormatter.cs
===================================================================
--- branches/3073_IA_constraint_splitting/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/InfixExpressionFormatter.cs	(revision 17825)
+++ branches/3073_IA_constraint_splitting/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/InfixExpressionFormatter.cs	(revision 17827)
@@ -29,5 +29,4 @@
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
-using Microsoft.SqlServer.Server;
 
 namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
@@ -39,6 +38,5 @@
         // operators
         if (token == "+" || token == "-" || token == "OR" || token == "XOR" ||
-            token == "*" || token == "/" || token == "AND" ||
-            token == "^") {
+            token == "*" || token == "/" || token == "AND") {
           strBuilder.Append("(");
           FormatRecursively(node.Subtrees.First(), strBuilder, numberFormat, formatString, constants);
@@ -47,4 +45,18 @@
             strBuilder.Append(" ").Append(token).Append(" ");
             FormatRecursively(subtree, strBuilder, numberFormat, formatString, constants);
+          }
+
+          strBuilder.Append(")");
+        } else if (token == "^") {
+          // handle integer powers directly
+          strBuilder.Append("(");
+          FormatRecursively(node.Subtrees.First(), strBuilder, numberFormat, formatString, constants);
+
+          var power = node.GetSubtree(1);
+          if(power is ConstantTreeNode constNode && Math.Truncate(constNode.Value) == constNode.Value) {
+            strBuilder.Append(" ").Append(token).Append(" ").Append(constNode.Value.ToString(formatString, numberFormat));
+          } else {
+            strBuilder.Append(" ").Append(token).Append(" ");
+            FormatRecursively(power, strBuilder, numberFormat, formatString, constants);
           }
 
@@ -131,5 +143,5 @@
         } else if (node.Symbol is Constant) {
           var constNode = node as ConstantTreeNode;
-          if(constants==null && constNode.Value < 0) {
+          if (constants == null && constNode.Value < 0) {
             strBuilder.Append("(").Append(constNode.Value.ToString(formatString, numberFormat))
                       .Append(")"); // (-1
Index: branches/3073_IA_constraint_splitting/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/SymbolicDataAnalysisExpressionLatexFormatter.cs
===================================================================
--- branches/3073_IA_constraint_splitting/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/SymbolicDataAnalysisExpressionLatexFormatter.cs	(revision 17825)
+++ branches/3073_IA_constraint_splitting/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/SymbolicDataAnalysisExpressionLatexFormatter.cs	(revision 17827)
@@ -517,5 +517,5 @@
 
     private void FormatStartSymbol(StringBuilder strBuilder) {
-      strBuilder.Append(EscapeLatexString(targetVariable) ?? "target_{" + targetCount++ + "}");
+      strBuilder.Append(targetVariable != null ? EscapeLatexString(targetVariable) : "\\text{target}_{" + targetCount++ + "}");
       if (containsTimeSeriesSymbol)
         strBuilder.Append("(t)");
