Index: branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj	(revision 7585)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj	(revision 7589)
@@ -206,4 +206,5 @@
     <Compile Include="Query\QueryMenuItem.cs" />
     <Compile Include="Query\ServiceClient\CombinedFilter.cs" />
+    <Compile Include="Query\ServiceClient\ValueName.cs" />
     <Compile Include="Query\ServiceClient\OrdinalComparisonTimeSpanFilter.cs" />
     <Compile Include="Query\ServiceClient\NameOrdinalComparisonTimeSpanFilter.cs" />
Index: branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Query/QueryClient.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Query/QueryClient.cs	(revision 7585)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Query/QueryClient.cs	(revision 7589)
@@ -43,8 +43,13 @@
       get { return filters; }
     }
+    private List<ValueName> valueNames;
+    public IEnumerable<ValueName> ValueNames {
+      get { return valueNames; }
+    }
     #endregion
 
     private QueryClient() {
       filters = new List<Filter>();
+      valueNames = new List<ValueName>();
     }
 
@@ -55,4 +60,5 @@
       try {
         filters.AddRange(CallQueryService<List<Filter>>(s => s.GetFilters()));
+        valueNames.AddRange(CallQueryService<List<ValueName>>(s => s.GetValueNames()));
       }
       finally {
@@ -86,4 +92,7 @@
     public IEnumerable<Run> GetRuns(IEnumerable<long> ids, bool includeBinaryValues) {
       return CallQueryService<IEnumerable<Run>>(s => s.GetRuns(ids.ToList(), includeBinaryValues));
+    }
+    public IEnumerable<Run> GetRunsWithValues(IEnumerable<long> ids, bool includeBinaryValues, IEnumerable<ValueName> vn) {
+      return CallQueryService<IEnumerable<Run>>(s => s.GetRunsWithValues(ids.ToList(), includeBinaryValues, vn.ToList()));
     }
     #endregion
Index: branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/QueryServiceClient.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/QueryServiceClient.cs	(revision 7585)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/QueryServiceClient.cs	(revision 7589)
@@ -19,4 +19,6 @@
         "fer")]
     [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.OrdinalComparisonFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.OrdinalComparisonDoubleFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonDoubleFilter))]
     [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.OrdinalComparisonTimeSpanFilter))]
     [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonTimeSpanFilter))]
@@ -28,12 +30,10 @@
     [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.OrdinalComparisonFloatFilter))]
     [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonFloatFilter))]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.OrdinalComparisonDoubleFilter))]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonDoubleFilter))]
     [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.OrdinalComparisonPercentFilter))]
     [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonPercentFilter))]
     [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.StringComparisonFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameStringComparisonFilter))]
     [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.StringComparisonAvailableValuesFilter))]
     [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameStringComparisonAvailableValuesFilter))]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameStringComparisonFilter))]
     [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.CombinedFilter))]
     [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.EqualityComparisonFilter))]
@@ -113,4 +113,6 @@
     [System.Runtime.Serialization.DataContractAttribute(Name="OrdinalComparisonFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
         "fer")]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.OrdinalComparisonDoubleFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonDoubleFilter))]
     [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.OrdinalComparisonTimeSpanFilter))]
     [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonTimeSpanFilter))]
@@ -122,6 +124,4 @@
     [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.OrdinalComparisonFloatFilter))]
     [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonFloatFilter))]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.OrdinalComparisonDoubleFilter))]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonDoubleFilter))]
     [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.OrdinalComparisonPercentFilter))]
     [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonPercentFilter))]
@@ -151,4 +151,59 @@
     [System.Diagnostics.DebuggerStepThroughAttribute()]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="OrdinalComparisonDoubleFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonDoubleFilter))]
+    public partial class OrdinalComparisonDoubleFilter : HeuristicLab.Clients.OKB.Query.OrdinalComparisonFilter
+    {
+        
+        private double ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public double Value
+        {
+            get
+            {
+                return this.ValueField;
+            }
+            set
+            {
+                if ((this.ValueField.Equals(value) != true))
+                {
+                    this.ValueField = value;
+                    this.RaisePropertyChanged("Value");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="NameOrdinalComparisonDoubleFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class NameOrdinalComparisonDoubleFilter : HeuristicLab.Clients.OKB.Query.OrdinalComparisonDoubleFilter
+    {
+        
+        private string NameField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Name
+        {
+            get
+            {
+                return this.NameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.NameField, value) != true))
+                {
+                    this.NameField = value;
+                    this.RaisePropertyChanged("Name");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
     [System.Runtime.Serialization.DataContractAttribute(Name="OrdinalComparisonTimeSpanFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
         "fer")]
@@ -398,8 +453,8 @@
     [System.Diagnostics.DebuggerStepThroughAttribute()]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="OrdinalComparisonDoubleFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
-        "fer")]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonDoubleFilter))]
-    public partial class OrdinalComparisonDoubleFilter : HeuristicLab.Clients.OKB.Query.OrdinalComparisonFilter
+    [System.Runtime.Serialization.DataContractAttribute(Name="OrdinalComparisonPercentFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonPercentFilter))]
+    public partial class OrdinalComparisonPercentFilter : HeuristicLab.Clients.OKB.Query.OrdinalComparisonFilter
     {
         
@@ -426,7 +481,7 @@
     [System.Diagnostics.DebuggerStepThroughAttribute()]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="NameOrdinalComparisonDoubleFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
-        "fer")]
-    public partial class NameOrdinalComparisonDoubleFilter : HeuristicLab.Clients.OKB.Query.OrdinalComparisonDoubleFilter
+    [System.Runtime.Serialization.DataContractAttribute(Name="NameOrdinalComparisonPercentFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class NameOrdinalComparisonPercentFilter : HeuristicLab.Clients.OKB.Query.OrdinalComparisonPercentFilter
     {
         
@@ -453,14 +508,35 @@
     [System.Diagnostics.DebuggerStepThroughAttribute()]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="OrdinalComparisonPercentFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
-        "fer")]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameOrdinalComparisonPercentFilter))]
-    public partial class OrdinalComparisonPercentFilter : HeuristicLab.Clients.OKB.Query.OrdinalComparisonFilter
-    {
-        
-        private double ValueField;
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public double Value
+    [System.Runtime.Serialization.DataContractAttribute(Name="StringComparisonFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameStringComparisonFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.StringComparisonAvailableValuesFilter))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameStringComparisonAvailableValuesFilter))]
+    public partial class StringComparisonFilter : HeuristicLab.Clients.OKB.Query.Filter
+    {
+        
+        private HeuristicLab.Clients.OKB.Query.StringComparison ComparisonField;
+        
+        private string ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Clients.OKB.Query.StringComparison Comparison
+        {
+            get
+            {
+                return this.ComparisonField;
+            }
+            set
+            {
+                if ((this.ComparisonField.Equals(value) != true))
+                {
+                    this.ComparisonField = value;
+                    this.RaisePropertyChanged("Comparison");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Value
         {
             get
@@ -470,5 +546,5 @@
             set
             {
-                if ((this.ValueField.Equals(value) != true))
+                if ((object.ReferenceEquals(this.ValueField, value) != true))
                 {
                     this.ValueField = value;
@@ -481,7 +557,7 @@
     [System.Diagnostics.DebuggerStepThroughAttribute()]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="NameOrdinalComparisonPercentFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
-        "fer")]
-    public partial class NameOrdinalComparisonPercentFilter : HeuristicLab.Clients.OKB.Query.OrdinalComparisonPercentFilter
+    [System.Runtime.Serialization.DataContractAttribute(Name="NameStringComparisonFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class NameStringComparisonFilter : HeuristicLab.Clients.OKB.Query.StringComparisonFilter
     {
         
@@ -508,53 +584,4 @@
     [System.Diagnostics.DebuggerStepThroughAttribute()]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="StringComparisonFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
-        "fer")]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.StringComparisonAvailableValuesFilter))]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameStringComparisonAvailableValuesFilter))]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.NameStringComparisonFilter))]
-    public partial class StringComparisonFilter : HeuristicLab.Clients.OKB.Query.Filter
-    {
-        
-        private HeuristicLab.Clients.OKB.Query.StringComparison ComparisonField;
-        
-        private string ValueField;
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public HeuristicLab.Clients.OKB.Query.StringComparison Comparison
-        {
-            get
-            {
-                return this.ComparisonField;
-            }
-            set
-            {
-                if ((this.ComparisonField.Equals(value) != true))
-                {
-                    this.ComparisonField = value;
-                    this.RaisePropertyChanged("Comparison");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public string Value
-        {
-            get
-            {
-                return this.ValueField;
-            }
-            set
-            {
-                if ((object.ReferenceEquals(this.ValueField, value) != true))
-                {
-                    this.ValueField = value;
-                    this.RaisePropertyChanged("Value");
-                }
-            }
-        }
-    }
-    
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
     [System.Runtime.Serialization.DataContractAttribute(Name="StringComparisonAvailableValuesFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
         "fer")]
@@ -588,31 +615,4 @@
         "fer")]
     public partial class NameStringComparisonAvailableValuesFilter : HeuristicLab.Clients.OKB.Query.StringComparisonAvailableValuesFilter
-    {
-        
-        private string NameField;
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public string Name
-        {
-            get
-            {
-                return this.NameField;
-            }
-            set
-            {
-                if ((object.ReferenceEquals(this.NameField, value) != true))
-                {
-                    this.NameField = value;
-                    this.RaisePropertyChanged("Name");
-                }
-            }
-        }
-    }
-    
-    [System.Diagnostics.DebuggerStepThroughAttribute()]
-    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="NameStringComparisonFilter", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
-        "fer")]
-    public partial class NameStringComparisonFilter : HeuristicLab.Clients.OKB.Query.StringComparisonFilter
     {
         
@@ -1345,13 +1345,13 @@
     [System.Runtime.Serialization.DataContractAttribute(Name="Value", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
         "fer")]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.StringValue))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.PercentValue))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.LongValue))]
     [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.BoolValue))]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.LongValue))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.DoubleValue))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.BinaryValue))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.FloatValue))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.TimeSpanValue))]
     [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.IntValue))]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.TimeSpanValue))]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.FloatValue))]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.DoubleValue))]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.StringValue))]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.BinaryValue))]
-    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Query.PercentValue))]
     public partial class Value : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
     {
@@ -1494,13 +1494,13 @@
     [System.Diagnostics.DebuggerStepThroughAttribute()]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="BoolValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
-        "fer")]
-    public partial class BoolValue : HeuristicLab.Clients.OKB.Query.Value
-    {
-        
-        private bool ValueField;
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public bool Value
+    [System.Runtime.Serialization.DataContractAttribute(Name="StringValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class StringValue : HeuristicLab.Clients.OKB.Query.Value
+    {
+        
+        private string ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Value
         {
             get
@@ -1510,5 +1510,5 @@
             set
             {
-                if ((this.ValueField.Equals(value) != true))
+                if ((object.ReferenceEquals(this.ValueField, value) != true))
                 {
                     this.ValueField = value;
@@ -1521,13 +1521,13 @@
     [System.Diagnostics.DebuggerStepThroughAttribute()]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="LongValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
-        "fer")]
-    public partial class LongValue : HeuristicLab.Clients.OKB.Query.Value
-    {
-        
-        private long ValueField;
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public long Value
+    [System.Runtime.Serialization.DataContractAttribute(Name="PercentValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class PercentValue : HeuristicLab.Clients.OKB.Query.Value
+    {
+        
+        private double ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public double Value
         {
             get
@@ -1548,13 +1548,13 @@
     [System.Diagnostics.DebuggerStepThroughAttribute()]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="IntValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
-        "fer")]
-    public partial class IntValue : HeuristicLab.Clients.OKB.Query.Value
-    {
-        
-        private int ValueField;
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public int Value
+    [System.Runtime.Serialization.DataContractAttribute(Name="LongValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class LongValue : HeuristicLab.Clients.OKB.Query.Value
+    {
+        
+        private long ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public long Value
         {
             get
@@ -1575,13 +1575,13 @@
     [System.Diagnostics.DebuggerStepThroughAttribute()]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="TimeSpanValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
-        "fer")]
-    public partial class TimeSpanValue : HeuristicLab.Clients.OKB.Query.Value
-    {
-        
-        private long ValueField;
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public long Value
+    [System.Runtime.Serialization.DataContractAttribute(Name="BoolValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class BoolValue : HeuristicLab.Clients.OKB.Query.Value
+    {
+        
+        private bool ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public bool Value
         {
             get
@@ -1602,13 +1602,13 @@
     [System.Diagnostics.DebuggerStepThroughAttribute()]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="FloatValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
-        "fer")]
-    public partial class FloatValue : HeuristicLab.Clients.OKB.Query.Value
-    {
-        
-        private float ValueField;
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public float Value
+    [System.Runtime.Serialization.DataContractAttribute(Name="DoubleValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class DoubleValue : HeuristicLab.Clients.OKB.Query.Value
+    {
+        
+        private double ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public double Value
         {
             get
@@ -1629,13 +1629,13 @@
     [System.Diagnostics.DebuggerStepThroughAttribute()]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="DoubleValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
-        "fer")]
-    public partial class DoubleValue : HeuristicLab.Clients.OKB.Query.Value
-    {
-        
-        private double ValueField;
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public double Value
+    [System.Runtime.Serialization.DataContractAttribute(Name="BinaryValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class BinaryValue : HeuristicLab.Clients.OKB.Query.Value
+    {
+        
+        private byte[] ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public byte[] Value
         {
             get
@@ -1645,5 +1645,5 @@
             set
             {
-                if ((this.ValueField.Equals(value) != true))
+                if ((object.ReferenceEquals(this.ValueField, value) != true))
                 {
                     this.ValueField = value;
@@ -1656,13 +1656,13 @@
     [System.Diagnostics.DebuggerStepThroughAttribute()]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="StringValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
-        "fer")]
-    public partial class StringValue : HeuristicLab.Clients.OKB.Query.Value
-    {
-        
-        private string ValueField;
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public string Value
+    [System.Runtime.Serialization.DataContractAttribute(Name="FloatValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class FloatValue : HeuristicLab.Clients.OKB.Query.Value
+    {
+        
+        private float ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public float Value
         {
             get
@@ -1672,5 +1672,5 @@
             set
             {
-                if ((object.ReferenceEquals(this.ValueField, value) != true))
+                if ((this.ValueField.Equals(value) != true))
                 {
                     this.ValueField = value;
@@ -1683,13 +1683,13 @@
     [System.Diagnostics.DebuggerStepThroughAttribute()]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="BinaryValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
-        "fer")]
-    public partial class BinaryValue : HeuristicLab.Clients.OKB.Query.Value
-    {
-        
-        private byte[] ValueField;
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public byte[] Value
+    [System.Runtime.Serialization.DataContractAttribute(Name="TimeSpanValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class TimeSpanValue : HeuristicLab.Clients.OKB.Query.Value
+    {
+        
+        private long ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public long Value
         {
             get
@@ -1699,5 +1699,5 @@
             set
             {
-                if ((object.ReferenceEquals(this.ValueField, value) != true))
+                if ((this.ValueField.Equals(value) != true))
                 {
                     this.ValueField = value;
@@ -1710,13 +1710,13 @@
     [System.Diagnostics.DebuggerStepThroughAttribute()]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-    [System.Runtime.Serialization.DataContractAttribute(Name="PercentValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
-        "fer")]
-    public partial class PercentValue : HeuristicLab.Clients.OKB.Query.Value
-    {
-        
-        private double ValueField;
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public double Value
+    [System.Runtime.Serialization.DataContractAttribute(Name="IntValue", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class IntValue : HeuristicLab.Clients.OKB.Query.Value
+    {
+        
+        private int ValueField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int Value
         {
             get
@@ -1733,4 +1733,106 @@
             }
         }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="ValueName", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.Query.DataTrans" +
+        "fer")]
+    public partial class ValueName : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private HeuristicLab.Clients.OKB.Query.ValueNameCategory CategoryField;
+        
+        private long IdField;
+        
+        private string NameField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Clients.OKB.Query.ValueNameCategory Category
+        {
+            get
+            {
+                return this.CategoryField;
+            }
+            set
+            {
+                if ((this.CategoryField.Equals(value) != true))
+                {
+                    this.CategoryField = value;
+                    this.RaisePropertyChanged("Category");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public long Id
+        {
+            get
+            {
+                return this.IdField;
+            }
+            set
+            {
+                if ((this.IdField.Equals(value) != true))
+                {
+                    this.IdField = value;
+                    this.RaisePropertyChanged("Id");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Name
+        {
+            get
+            {
+                return this.NameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.NameField, value) != true))
+                {
+                    this.NameField = value;
+                    this.RaisePropertyChanged("Name");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName)
+        {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null))
+            {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="ValueNameCategory", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataAccess")]
+    public enum ValueNameCategory : int
+    {
+        
+        [System.Runtime.Serialization.EnumMemberAttribute()]
+        Parameter = 0,
+        
+        [System.Runtime.Serialization.EnumMemberAttribute()]
+        Result = 1,
     }
     
@@ -1751,4 +1853,10 @@
         [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IQueryService/GetRuns", ReplyAction="http://tempuri.org/IQueryService/GetRunsResponse")]
         System.Collections.Generic.List<HeuristicLab.Clients.OKB.Query.Run> GetRuns(System.Collections.Generic.List<long> ids, bool includeBinaryValues);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IQueryService/GetRunsWithValues", ReplyAction="http://tempuri.org/IQueryService/GetRunsWithValuesResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.OKB.Query.Run> GetRunsWithValues(System.Collections.Generic.List<long> ids, bool includeBinaryValues, System.Collections.Generic.List<HeuristicLab.Clients.OKB.Query.ValueName> valueNames);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IQueryService/GetValueNames", ReplyAction="http://tempuri.org/IQueryService/GetValueNamesResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.OKB.Query.ValueName> GetValueNames();
     }
     
@@ -1806,4 +1914,14 @@
             return base.Channel.GetRuns(ids, includeBinaryValues);
         }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.OKB.Query.Run> GetRunsWithValues(System.Collections.Generic.List<long> ids, bool includeBinaryValues, System.Collections.Generic.List<HeuristicLab.Clients.OKB.Query.ValueName> valueNames)
+        {
+            return base.Channel.GetRunsWithValues(ids, includeBinaryValues, valueNames);
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.OKB.Query.ValueName> GetValueNames()
+        {
+            return base.Channel.GetValueNames();
+        }
     }
 }
Index: branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/ValueName.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/ValueName.cs	(revision 7589)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Query/ServiceClient/ValueName.cs	(revision 7589)
@@ -0,0 +1,36 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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
+
+namespace HeuristicLab.Clients.OKB.Query {
+  public partial class ValueName {
+    public override string ToString() {
+      string valueNameString = string.Empty;
+
+      if (Category == ValueNameCategory.Parameter) {
+        valueNameString += "Parameter ";
+      } else {
+        valueNameString += "Result ";
+      }
+      valueNameString += Name + " Value";
+      return valueNameString;
+    }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Query/Views/QueryView.Designer.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Query/Views/QueryView.Designer.cs	(revision 7585)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Query/Views/QueryView.Designer.cs	(revision 7589)
@@ -50,7 +50,10 @@
       this.runCollectionView = new HeuristicLab.Optimization.Views.RunCollectionView();
       this.splitContainer = new System.Windows.Forms.SplitContainer();
+      this.filterTabControl = new System.Windows.Forms.TabControl();
+      this.filterTabPage = new System.Windows.Forms.TabPage();
       this.filtersGroupBox = new System.Windows.Forms.GroupBox();
       this.filterPanel = new System.Windows.Forms.Panel();
       this.refreshFiltersButton = new System.Windows.Forms.Button();
+      this.constraintsTabPage = new System.Windows.Forms.TabPage();
       this.resultsGroupBox = new System.Windows.Forms.GroupBox();
       this.includeBinaryValuesCheckBox = new System.Windows.Forms.CheckBox();
@@ -61,9 +64,15 @@
       this.filtersInfoPanel = new System.Windows.Forms.Panel();
       this.filtersInfoLabel = new System.Windows.Forms.Label();
+      this.constraintsCheckedListBox = new System.Windows.Forms.CheckedListBox();
+      this.selectAllButton = new System.Windows.Forms.Button();
+      this.deselectAllButton = new System.Windows.Forms.Button();
       ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
       this.splitContainer.Panel1.SuspendLayout();
       this.splitContainer.Panel2.SuspendLayout();
       this.splitContainer.SuspendLayout();
+      this.filterTabControl.SuspendLayout();
+      this.filterTabPage.SuspendLayout();
       this.filtersGroupBox.SuspendLayout();
+      this.constraintsTabPage.SuspendLayout();
       this.resultsGroupBox.SuspendLayout();
       this.resultsInfoPanel.SuspendLayout();
@@ -106,5 +115,5 @@
       // splitContainer.Panel1
       // 
-      this.splitContainer.Panel1.Controls.Add(this.filtersGroupBox);
+      this.splitContainer.Panel1.Controls.Add(this.filterTabControl);
       // 
       // splitContainer.Panel2
@@ -115,4 +124,28 @@
       this.splitContainer.TabIndex = 0;
       // 
+      // filterTabControl
+      // 
+      this.filterTabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.filterTabControl.Controls.Add(this.filterTabPage);
+      this.filterTabControl.Controls.Add(this.constraintsTabPage);
+      this.filterTabControl.Location = new System.Drawing.Point(3, 3);
+      this.filterTabControl.Name = "filterTabControl";
+      this.filterTabControl.SelectedIndex = 0;
+      this.filterTabControl.Size = new System.Drawing.Size(832, 276);
+      this.filterTabControl.TabIndex = 1;
+      // 
+      // filterTabPage
+      // 
+      this.filterTabPage.Controls.Add(this.filtersGroupBox);
+      this.filterTabPage.Location = new System.Drawing.Point(4, 22);
+      this.filterTabPage.Name = "filterTabPage";
+      this.filterTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.filterTabPage.Size = new System.Drawing.Size(824, 250);
+      this.filterTabPage.TabIndex = 0;
+      this.filterTabPage.Text = "Filter";
+      this.filterTabPage.UseVisualStyleBackColor = true;
+      // 
       // filtersGroupBox
       // 
@@ -122,7 +155,7 @@
       this.filtersGroupBox.Controls.Add(this.filterPanel);
       this.filtersGroupBox.Controls.Add(this.refreshFiltersButton);
-      this.filtersGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.filtersGroupBox.Location = new System.Drawing.Point(6, 6);
       this.filtersGroupBox.Name = "filtersGroupBox";
-      this.filtersGroupBox.Size = new System.Drawing.Size(838, 279);
+      this.filtersGroupBox.Size = new System.Drawing.Size(812, 238);
       this.filtersGroupBox.TabIndex = 0;
       this.filtersGroupBox.TabStop = false;
@@ -136,5 +169,5 @@
       this.filterPanel.Location = new System.Drawing.Point(6, 19);
       this.filterPanel.Name = "filterPanel";
-      this.filterPanel.Size = new System.Drawing.Size(796, 254);
+      this.filterPanel.Size = new System.Drawing.Size(770, 213);
       this.filterPanel.TabIndex = 1;
       // 
@@ -143,5 +176,5 @@
       this.refreshFiltersButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
       this.refreshFiltersButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Refresh;
-      this.refreshFiltersButton.Location = new System.Drawing.Point(808, 21);
+      this.refreshFiltersButton.Location = new System.Drawing.Point(782, 21);
       this.refreshFiltersButton.Name = "refreshFiltersButton";
       this.refreshFiltersButton.Size = new System.Drawing.Size(24, 24);
@@ -149,4 +182,17 @@
       this.refreshFiltersButton.UseVisualStyleBackColor = true;
       this.refreshFiltersButton.Click += new System.EventHandler(this.refreshFiltersButton_Click);
+      // 
+      // constraintsTabPage
+      // 
+      this.constraintsTabPage.Controls.Add(this.deselectAllButton);
+      this.constraintsTabPage.Controls.Add(this.selectAllButton);
+      this.constraintsTabPage.Controls.Add(this.constraintsCheckedListBox);
+      this.constraintsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.constraintsTabPage.Name = "constraintsTabPage";
+      this.constraintsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.constraintsTabPage.Size = new System.Drawing.Size(824, 250);
+      this.constraintsTabPage.TabIndex = 1;
+      this.constraintsTabPage.Text = "Downloaded Values";
+      this.constraintsTabPage.UseVisualStyleBackColor = true;
       // 
       // resultsGroupBox
@@ -245,4 +291,39 @@
       this.filtersInfoLabel.Text = "Loading Filters ...";
       this.filtersInfoLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+      // 
+      // constraintsCheckedListBox
+      // 
+      this.constraintsCheckedListBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.constraintsCheckedListBox.CheckOnClick = true;
+      this.constraintsCheckedListBox.FormattingEnabled = true;
+      this.constraintsCheckedListBox.Location = new System.Drawing.Point(6, 6);
+      this.constraintsCheckedListBox.Name = "constraintsCheckedListBox";
+      this.constraintsCheckedListBox.Size = new System.Drawing.Size(812, 214);
+      this.constraintsCheckedListBox.Sorted = true;
+      this.constraintsCheckedListBox.TabIndex = 0;
+      // 
+      // selectAllButton
+      // 
+      this.selectAllButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.selectAllButton.Location = new System.Drawing.Point(6, 221);
+      this.selectAllButton.Name = "selectAllButton";
+      this.selectAllButton.Size = new System.Drawing.Size(75, 23);
+      this.selectAllButton.TabIndex = 1;
+      this.selectAllButton.Text = "Select all";
+      this.selectAllButton.UseVisualStyleBackColor = true;
+      this.selectAllButton.Click += new System.EventHandler(this.selectAllButton_Click);
+      // 
+      // deselectAllButton
+      // 
+      this.deselectAllButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.deselectAllButton.Location = new System.Drawing.Point(88, 221);
+      this.deselectAllButton.Name = "deselectAllButton";
+      this.deselectAllButton.Size = new System.Drawing.Size(75, 23);
+      this.deselectAllButton.TabIndex = 2;
+      this.deselectAllButton.Text = "Deselect all";
+      this.deselectAllButton.UseVisualStyleBackColor = true;
+      this.deselectAllButton.Click += new System.EventHandler(this.deselectAllButton_Click);
       // 
       // QueryView
@@ -259,5 +340,8 @@
       ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
       this.splitContainer.ResumeLayout(false);
+      this.filterTabControl.ResumeLayout(false);
+      this.filterTabPage.ResumeLayout(false);
       this.filtersGroupBox.ResumeLayout(false);
+      this.constraintsTabPage.ResumeLayout(false);
       this.resultsGroupBox.ResumeLayout(false);
       this.resultsGroupBox.PerformLayout();
@@ -285,4 +369,10 @@
     private System.Windows.Forms.Button refreshFiltersButton;
     private System.Windows.Forms.CheckBox includeBinaryValuesCheckBox;
+    private System.Windows.Forms.TabControl filterTabControl;
+    private System.Windows.Forms.TabPage filterTabPage;
+    private System.Windows.Forms.TabPage constraintsTabPage;
+    private System.Windows.Forms.Button deselectAllButton;
+    private System.Windows.Forms.Button selectAllButton;
+    private System.Windows.Forms.CheckedListBox constraintsCheckedListBox;
 
   }
Index: branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Query/Views/QueryView.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Query/Views/QueryView.cs	(revision 7585)
+++ branches/OKB (trunk integration)/HeuristicLab.Clients.OKB/3.3/Query/Views/QueryView.cs	(revision 7589)
@@ -21,4 +21,6 @@
 
 using System;
+using System.Collections;
+using System.Collections.Generic;
 using System.IO;
 using System.Linq;
@@ -75,4 +77,5 @@
     private void LoadResultsAsync(int batchSize) {
       bool includeBinaryValues = includeBinaryValuesCheckBox.Checked;
+      IEnumerable<ValueName> valueNames = constraintsCheckedListBox.CheckedItems.Cast<ValueName>();
 
       Cursor = Cursors.AppStarting;
@@ -99,5 +102,9 @@
         while (ids.Count() > 0) {
           cancellationToken.ThrowIfCancellationRequested();
-          runs.AddRange(QueryClient.Instance.GetRuns(ids.Take(batchSize), includeBinaryValues).Select(x => ConvertToOptimizationRun(x)));
+          if (AllValueNamesChecked()) {
+            runs.AddRange(QueryClient.Instance.GetRuns(ids.Take(batchSize), includeBinaryValues).Select(x => ConvertToOptimizationRun(x)));
+          } else {
+            runs.AddRange(QueryClient.Instance.GetRunsWithValues(ids.Take(batchSize), includeBinaryValues, valueNames).Select(x => ConvertToOptimizationRun(x)));
+          }
           ids = ids.Skip(batchSize);
           Invoke(new Action(() => {
@@ -146,4 +153,5 @@
       } else {
         CreateFilterView();
+        CreateConstraintsView();
         filtersInfoPanel.Visible = false;
         splitContainer.Enabled = true;
@@ -179,4 +187,10 @@
         }
       }
+    }
+
+    private void CreateConstraintsView() {
+      constraintsCheckedListBox.Items.Clear();
+      constraintsCheckedListBox.Items.AddRange(QueryClient.Instance.ValueNames.ToArray());
+      SetCheckedState(true);
     }
 
@@ -221,4 +235,22 @@
       return null;
     }
+
+    private void SetCheckedState(bool val) {
+      for (int i = 0; i < constraintsCheckedListBox.Items.Count; i++) {
+        constraintsCheckedListBox.SetItemChecked(i, val);
+      }
+    }
+
+    private bool AllValueNamesChecked() {
+      return constraintsCheckedListBox.Items.Count == constraintsCheckedListBox.CheckedItems.Count;
+    }
+
+    private void selectAllButton_Click(object sender, EventArgs e) {
+      SetCheckedState(true);
+    }
+
+    private void deselectAllButton_Click(object sender, EventArgs e) {
+      SetCheckedState(false);
+    }
   }
 }
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/ValueNameCategory.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/ValueNameCategory.cs	(revision 7585)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB.DataAccess/3.3/ValueNameCategory.cs	(revision 7589)
@@ -20,7 +20,11 @@
 #endregion
 
+using System.Runtime.Serialization;
 namespace HeuristicLab.Services.OKB.DataAccess {
+  [DataContract]
   public enum ValueNameCategory {
+    [EnumMember]
     Parameter = 0,
+    [EnumMember]
     Result = 1
   }
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj	(revision 7585)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj	(revision 7589)
@@ -147,4 +147,5 @@
     <Compile Include="Query\DataTransfer\BoolValue.cs" />
     <Compile Include="Query\DataTransfer\CombinedFilter.cs" />
+    <Compile Include="Query\DataTransfer\ValueName.cs" />
     <Compile Include="Query\DataTransfer\NameOrdinalComparisonTimeSpanFilter.cs" />
     <Compile Include="Query\DataTransfer\OrdinalComparisonTimeSpanFilter.cs" />
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Convert.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Convert.cs	(revision 7585)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/Convert.cs	(revision 7589)
@@ -21,4 +21,5 @@
 
 using System;
+using System.Collections.Generic;
 using System.Linq;
 using DA = HeuristicLab.Services.OKB.DataAccess;
@@ -32,4 +33,12 @@
       dto.ParameterValues = source.Values.Where(x => x.ValueName.Category == DA.ValueNameCategory.Parameter).Select(x => Convert.ToDto(x, includeBinaryValues)).ToArray();
       dto.ResultValues = source.Values.Where(x => x.ValueName.Category == DA.ValueNameCategory.Result).Select(x => Convert.ToDto(x, includeBinaryValues)).ToArray();
+      return dto;
+    }
+
+    public static DT.Run ToDto(DA.Run source, bool includeBinaryValues, IEnumerable<DT.ValueName> valueNames) {
+      if (source == null) return null;
+      var dto = new DT.Run { Id = source.Id, Algorithm = Convert.ToDto(source.Algorithm), Problem = Convert.ToDto(source.Problem), CreatedDate = source.CreatedDate, ClientId = source.ClientId, UserId = source.UserId };
+      dto.ParameterValues = source.Values.Where(x => x.ValueName.Category == DA.ValueNameCategory.Parameter && valueNames.Count(y => y.Name == x.ValueName.Name) > 0).Select(x => Convert.ToDto(x, includeBinaryValues)).ToArray();
+      dto.ResultValues = source.Values.Where(x => x.ValueName.Category == DA.ValueNameCategory.Result && valueNames.Count(y => y.Name == x.ValueName.Name) > 0).Select(x => Convert.ToDto(x, includeBinaryValues)).ToArray();
       return dto;
     }
@@ -74,4 +83,9 @@
       }
     }
+
+    public static DT.ValueName ToDto(DA.ValueName source) {
+      if (source == null) return null;
+      return new DT.ValueName() { Id = source.Id, Category = source.Category, Name = source.Name };
+    }
   }
 }
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/DataTransfer/ValueName.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/DataTransfer/ValueName.cs	(revision 7589)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/DataTransfer/ValueName.cs	(revision 7589)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Runtime.Serialization;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB.Query.DataTransfer {
+  [DataContract]
+  public class ValueName {
+    [DataMember]
+    public long Id { get; set; }
+    [DataMember]
+    public string Name { get; set; }
+    [DataMember]
+    public ValueNameCategory Category { get; set; }
+  }
+}
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/IQueryService.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/IQueryService.cs	(revision 7585)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/IQueryService.cs	(revision 7589)
@@ -42,4 +42,10 @@
     [OperationContract]
     IEnumerable<Run> GetRuns(IEnumerable<long> ids, bool includeBinaryValues);
+
+    [OperationContract]
+    IEnumerable<Run> GetRunsWithValues(IEnumerable<long> ids, bool includeBinaryValues, IEnumerable<DataTransfer.ValueName> valueNames);
+
+    [OperationContract]
+    IEnumerable<ValueName> GetValueNames();
   }
 }
Index: branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/QueryService.cs
===================================================================
--- branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/QueryService.cs	(revision 7585)
+++ branches/OKB (trunk integration)/HeuristicLab.Services.OKB/3.3/Query/QueryService.cs	(revision 7589)
@@ -258,4 +258,20 @@
     }
 
+    public IEnumerable<DataTransfer.Run> GetRunsWithValues(IEnumerable<long> ids, bool includeBinaryValues, IEnumerable<DataTransfer.ValueName> valueNames) {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        DataLoadOptions dlo = new DataLoadOptions();
+        // TODO: specify LoadWiths
+        okb.LoadOptions = dlo;
+
+        return okb.Runs.Where(x => ids.Contains(x.Id)).Select(x => Convert.ToDto(x, includeBinaryValues, valueNames)).ToArray();
+      }
+    }
+
+    public IEnumerable<DataTransfer.ValueName> GetValueNames() {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        return okb.ValueNames.Select(x => Convert.ToDto(x)).ToArray();
+      }
+    }
+
     private IQueryable<DataAccess.Run> FilterRuns(IQueryable<DataAccess.Run> runs, Filter filter) {
       IFilter f = (IFilter)Activator.CreateInstance(Type.GetType(filter.FilterTypeName), filter);
