Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Grammars/TypeCoherentExpressionGrammar.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Grammars/TypeCoherentExpressionGrammar.cs	(revision 17368)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Grammars/TypeCoherentExpressionGrammar.cs	(revision 17369)
@@ -42,4 +42,7 @@
     private const string SpecialFunctionsName = "Special Functions";
     private const string TimeSeriesSymbolsName = "Time Series Symbols";
+    private const string BasicVectorOperationSymbolsName = "Basic Vector Operations";
+    private const string VectorAggregationSymbolsName = "Vector Aggregation";
+    private const string VectorSymbolsName = "Vector Symbols";
 
     [StorableConstructor]
@@ -113,10 +116,18 @@
       var laggedVariable = new LaggedVariable();
       var autoregressiveVariable = new AutoregressiveTargetVariable();
+
+      var vectorVariable = new VectorVariable();
+      var vectorAdd = new VectorAddition();
+      var vectorSub = new VectorSubtraction();
+      var vectorMul = new VectorMultiplication();
+      var vectorDiv = new VectorDivision();
+      var vectorSum = new VectorSum();
+      var vectorAvg = new VectorAverage();
       #endregion
 
       #region group symbol declaration
       var arithmeticSymbols = new GroupSymbol(ArithmeticFunctionsName, new List<ISymbol>() { add, sub, mul, div, mean });
-      var trigonometricSymbols = new GroupSymbol(TrigonometricFunctionsName, new List<ISymbol>() { sin, cos, tan, tanh});
-      var exponentialAndLogarithmicSymbols = new GroupSymbol(ExponentialFunctionsName, new List<ISymbol> { exp, log});
+      var trigonometricSymbols = new GroupSymbol(TrigonometricFunctionsName, new List<ISymbol>() { sin, cos, tan, tanh });
+      var exponentialAndLogarithmicSymbols = new GroupSymbol(ExponentialFunctionsName, new List<ISymbol> { exp, log });
       var specialFunctions = new GroupSymbol(SpecialFunctionsName, new List<ISymbol> { abs, airyA, airyB, bessel, cosineIntegral, dawson, erf, expIntegralEi,
         fresnelCosineIntegral,fresnelSineIntegral,gamma,hypCosineIntegral,hypSineIntegral,norm, psi, sineIntegral, analyticalQuotient});
@@ -132,4 +143,8 @@
 
       var timeSeriesSymbols = new GroupSymbol(TimeSeriesSymbolsName, new List<ISymbol> { timeLag, integral, derivative, laggedVariable, autoregressiveVariable });
+
+      var basicVectorOperationSymbols = new GroupSymbol(BasicVectorOperationSymbolsName, new List<ISymbol>() { vectorAdd, vectorSub, vectorMul, vectorDiv });
+      var vectorAggregationSymbols = new GroupSymbol(VectorAggregationSymbolsName, new List<ISymbol>() { vectorSum, vectorAvg });
+      var vectorSymbols = new GroupSymbol(VectorSymbolsName, new List<ISymbol>() { vectorVariable, basicVectorOperationSymbols, vectorAggregationSymbols });
       #endregion
 
@@ -138,4 +153,5 @@
       AddSymbol(conditionalSymbols);
       AddSymbol(timeSeriesSymbols);
+      AddSymbol(vectorSymbols);
 
       #region subtree count configuration
@@ -149,5 +165,5 @@
       SetSubtreeCount(cubeRoot, 1, 1);
       SetSubtreeCount(exponentialAndLogarithmicSymbols, 1, 1);
-      foreach(var sy in specialFunctions.Symbols.Except(new[] { analyticalQuotient})) {
+      foreach (var sy in specialFunctions.Symbols.Except(new[] { analyticalQuotient })) {
         SetSubtreeCount(sy, 1, 1);
       }
@@ -169,4 +185,9 @@
       SetSubtreeCount(laggedVariable, 0, 0);
       SetSubtreeCount(autoregressiveVariable, 0, 0);
+
+
+      SetSubtreeCount(vectorVariable, 0, 0);
+      SetSubtreeCount(basicVectorOperationSymbols, 2, 2);
+      SetSubtreeCount(vectorAggregationSymbols, 1, 1);
       #endregion
 
@@ -237,4 +258,10 @@
       AddAllowedChildSymbol(derivative, powerSymbols);
       AddAllowedChildSymbol(derivative, conditionSymbols);
+
+      AddAllowedChildSymbol(realValuedSymbols, vectorAggregationSymbols);
+      AddAllowedChildSymbol(vectorAggregationSymbols, basicVectorOperationSymbols);
+      AddAllowedChildSymbol(vectorAggregationSymbols, vectorVariable);
+      AddAllowedChildSymbol(basicVectorOperationSymbols, basicVectorOperationSymbols);
+      AddAllowedChildSymbol(basicVectorOperationSymbols, vectorVariable);
       #endregion
     }
@@ -249,4 +276,5 @@
       Symbols.First(s => s.Name == ConditionalSymbolsName).Enabled = false;
       Symbols.First(s => s.Name == TimeSeriesSymbolsName).Enabled = false;
+      Symbols.First(s => s.Name == VectorSymbolsName).Enabled = false;
     }
 
@@ -262,4 +290,5 @@
       Symbols.First(s => s.Name == PowerFunctionsName).Enabled = false;
       Symbols.First(s => s.Name == TimeSeriesSymbolsName).Enabled = false;
+      Symbols.First(s => s.Name == VectorSymbolsName).Enabled = false;
     }
 
@@ -272,4 +301,5 @@
       Symbols.First(s => s.Name == ConditionalSymbolsName).Enabled = false;
       Symbols.First(s => s.Name == SpecialFunctionsName).Enabled = false;
+      Symbols.First(s => s.Name == VectorSymbolsName).Enabled = false;
 
       Symbols.Single(s => s.Name == "Variable").Enabled = false;
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj	(revision 17368)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj	(revision 17369)
@@ -219,4 +219,10 @@
     <Compile Include="SymbolicDataAnalysisProblem.cs" />
     <Compile Include="SymbolicDataAnalysisSolutionImpactValuesCalculator.cs" />
+    <Compile Include="Symbols\VectorAverage.cs" />
+    <Compile Include="Symbols\VectorSum.cs" />
+    <Compile Include="Symbols\VectorSubtraction.cs" />
+    <Compile Include="Symbols\VectorMultiplication.cs" />
+    <Compile Include="Symbols\VectorDivision.cs" />
+    <Compile Include="Symbols\VectorAddition.cs" />
     <Compile Include="Symbols\Addition.cs" />
     <Compile Include="Symbols\AnalyticQuotient.cs" />
@@ -237,4 +243,6 @@
     <Compile Include="Symbols\CubeRoot.cs" />
     <Compile Include="Symbols\HyperbolicTangent.cs" />
+    <Compile Include="Symbols\VectorVariableTreeNode.cs" />
+    <Compile Include="Symbols\VectorVariable.cs" />
     <Compile Include="Symbols\VariableBase.cs" />
     <Compile Include="Symbols\VariableTreeNodeBase.cs" />
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeInterpreter.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeInterpreter.cs	(revision 17368)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeInterpreter.cs	(revision 17369)
@@ -552,5 +552,5 @@
             DoubleVector s = VectorEvaluate(dataset, ref row, state);
             for (int i = 1; i < currentInstr.nArguments; i++) {
-              s += Evaluate(dataset, ref row, state);
+              s += VectorEvaluate(dataset, ref row, state);
             }
             return s;
@@ -559,5 +559,5 @@
             DoubleVector s = VectorEvaluate(dataset, ref row, state);
             for (int i = 1; i < currentInstr.nArguments; i++) {
-              s -= Evaluate(dataset, ref row, state);
+              s -= VectorEvaluate(dataset, ref row, state);
             }
             return s;
@@ -566,5 +566,5 @@
             DoubleVector s = VectorEvaluate(dataset, ref row, state);
             for (int i = 1; i < currentInstr.nArguments; i++) {
-              s *= Evaluate(dataset, ref row, state);
+              s *= VectorEvaluate(dataset, ref row, state);
             }
             return s;
@@ -573,5 +573,5 @@
             DoubleVector s = VectorEvaluate(dataset, ref row, state);
             for (int i = 1; i < currentInstr.nArguments; i++) {
-              s /= Evaluate(dataset, ref row, state);
+              s /= VectorEvaluate(dataset, ref row, state);
             }
             return s;
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisProblem.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisProblem.cs	(revision 17368)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisProblem.cs	(revision 17369)
@@ -239,4 +239,10 @@
         }
       }
+      foreach (var vectorVariableSymbol in grammar.Symbols.OfType<VectorVariable>()) {
+        if (!vectorVariableSymbol.Fixed) {
+          vectorVariableSymbol.AllVariableNames = problemData.InputVariables.Select(x => x.Value).Where(x => ds.VariableHasType<DoubleVector>(x));
+          vectorVariableSymbol.VariableNames = problemData.AllowedInputVariables.Where(x => ds.VariableHasType<DoubleVector>(x));
+        }
+      }
     }
 
Index: /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Symbols/VectorVariable.cs
===================================================================
--- /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Symbols/VectorVariable.cs	(revision 17368)
+++ /branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Symbols/VectorVariable.cs	(revision 17369)
@@ -32,5 +32,5 @@
     private VectorVariable(StorableConstructorFlag _) : base(_) {
     }
-    private VectorVariable(Variable original, Cloner cloner)
+    private VectorVariable(VectorVariable original, Cloner cloner)
       : base(original, cloner) {
     }
