diff --git a/VectoCore/VectoCore/Utils/SearchAlgorithm.cs b/VectoCore/VectoCore/Utils/SearchAlgorithm.cs
index 63c56cdb7a712ee20e94bcb1ece91512b652f3a9..9cff57e03547eae0111b2c84af6d7a6e208e9a9b 100644
--- a/VectoCore/VectoCore/Utils/SearchAlgorithm.cs
+++ b/VectoCore/VectoCore/Utils/SearchAlgorithm.cs
@@ -31,7 +31,10 @@
 
 using System;
 using System.Data;
+using System.Diagnostics;
+using System.IO;
 using System.Linq;
+using System.Threading;
 using TUGraz.VectoCore.Configuration;
 using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.Models;
@@ -92,7 +95,8 @@ namespace TUGraz.VectoCore.Utils
 			try {
 				result = InterpolateSearch(x, y, interval, getYValue, evaluateFunction, criterion, abortCriterion,
 					ref iterationCount);
-			} catch (VectoException ex) {
+			}
+			catch (VectoException ex) {
 				var log = LogManager.GetLogger(typeof(SearchAlgorithm).FullName);
 				log.Debug("Falling back to LineSearch. InterpolationSearch failed: " + ex.Message);
 				result = LineSearch(x, y, interval, getYValue, evaluateFunction, criterion, abortCriterion, ref iterationCount);
@@ -125,7 +129,6 @@ namespace TUGraz.VectoCore.Utils
 
 					interval *= intervalFactor;
 					x += interval * -y.Sign();
-
 					var result = evaluateFunction(x);
 					y = getYValue(result);
 					debug.Add(new { x, y, delta = criterion(result), result });
@@ -134,6 +137,7 @@ namespace TUGraz.VectoCore.Utils
 						log.Debug("LineSearch found an operating point after {0} function calls.", count);
 						//iterationCount += count;
 						LogManager.DisableLogging();
+						AppendDebug(debug);
 						return x;
 					}
 					if (abortCriterion != null && abortCriterion(result, iterationCount)) {
@@ -152,10 +156,32 @@ namespace TUGraz.VectoCore.Utils
 			log.Error("Exceeded max iterations when searching for operating point!");
 			log.Error("debug: {0}", debug);
 
-			//WriteSearch(debug, "LineSearch.csv");
+			WriteSearch(debug, "LineSearch.csv");
 			throw new VectoSearchFailedException("Failed to find operating point! points: {0}", debug);
 		}
 
+		[Conditional("TRACE")]
+		private static void AppendDebug(DebugData debug)
+		{
+			var xmin = debug.Data.Min(d => d.x).Value();
+			var xmax = debug.Data.Max(d => d.x).Value();
+			var ymin = debug.Data.Min(d => d.y).Value();
+			var ymax = debug.Data.Max(d => d.y).Value();
+			
+			var rand = new Random().Next();
+			using (var f = new StreamWriter(File.Open("LineSearch-" + Thread.CurrentThread.ManagedThreadId + "-statistics.csv", FileMode.Append))) {
+				foreach (var d in debug.Data) {
+					f.WriteLine(string.Format("{0}, {1}, {2}, {3}, {4}, {5}, {6}", 
+						rand, 
+						(d.x.Value()-xmin)/(xmax-xmin), 
+						(d.y.Value()-ymin)/(ymax-ymin), 
+						d.x.Value()/Math.Max(Math.Abs(xmax),Math.Abs(xmin)), 
+						d.y.Value()/Math.Max(Math.Abs(ymax),Math.Abs(ymin)), 
+						d.x, d.y));
+				}
+			}
+		}
+
 		/// <summary>
 		/// Interpolating Search algorithm.
 		/// Calculates linear equation of 2 points and jumps directly to root-point.
@@ -175,6 +201,7 @@ namespace TUGraz.VectoCore.Utils
 				if (criterion(result).IsEqual(0, Constants.SimulationSettings.InterpolateSearchTolerance)) {
 					LogManager.EnableLogging();
 					log.Debug("InterpolateSearch found an operating point after 1 function call.");
+					AppendDebug(debug);
 					LogManager.DisableLogging();
 					iterationCount++;
 					return x2;
@@ -197,6 +224,7 @@ namespace TUGraz.VectoCore.Utils
 						LogManager.EnableLogging();
 						log.Debug("InterpolateSearch could not get more exact. Aborting after {0} function calls.", count);
 						LogManager.DisableLogging();
+						AppendDebug(debug);
 						//iterationCount += count;
 						return x2;
 					}
@@ -207,6 +235,7 @@ namespace TUGraz.VectoCore.Utils
 						LogManager.EnableLogging();
 						log.Debug("InterpolateSearch found an operating point after {0} function calls.", count);
 						LogManager.DisableLogging();
+						AppendDebug(debug);
 						return x2;
 					}
 					if (abortCriterion != null && abortCriterion(result, iterationCount)) {
@@ -225,10 +254,11 @@ namespace TUGraz.VectoCore.Utils
 			log.Error("Exceeded max iterations when searching for operating point!");
 			log.Error("debug: {0}", debug);
 
-			//WriteSearch(debug, "InterpolateSearch.csv");
+			WriteSearch(debug, "InterpolateSearch.csv");
 			throw new VectoSearchFailedException("Failed to find operating point! points: {0}", debug);
 		}
 
+		[Conditional("TRACE")]
 		private static void WriteSearch(DebugData debug, string filename)
 		{
 			var table = new DataTable();
diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj
index 71f7388d082861fc29f121920673360f11e6bc15..645bd17134fda1be7be7c8c3e5b1b02410d7ae60 100644
--- a/VectoCore/VectoCore/VectoCore.csproj
+++ b/VectoCore/VectoCore/VectoCore.csproj
@@ -19,7 +19,7 @@
     <DebugType>full</DebugType>
     <Optimize>false</Optimize>
     <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>TRACE;DEBUG</DefineConstants>
+    <DefineConstants>DEBUG</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>
@@ -74,7 +74,8 @@
     <DebugType>pdbonly</DebugType>
     <Optimize>true</Optimize>
     <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
+    <DefineConstants>
+    </DefineConstants>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
index 03f6e29088d687f9e3f121c814f82c3abf3a9cc9..e82aba9749d65345bc5b1b1b59317a29b58b5dda 100644
--- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj
+++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
@@ -30,7 +30,8 @@
     <DebugType>pdbonly</DebugType>
     <Optimize>true</Optimize>
     <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
+    <DefineConstants>
+    </DefineConstants>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>