diff --git a/CEP/DP3/AOFlagger/include/AOFlagger/strategy/algorithms/thresholdtools.h b/CEP/DP3/AOFlagger/include/AOFlagger/strategy/algorithms/thresholdtools.h
index 95f102f5d2cff64fe181fa385a53aedfe664ffb4..a8c3524ceeb0952c6d432ee10659b4b43e70952d 100644
--- a/CEP/DP3/AOFlagger/include/AOFlagger/strategy/algorithms/thresholdtools.h
+++ b/CEP/DP3/AOFlagger/include/AOFlagger/strategy/algorithms/thresholdtools.h
@@ -82,6 +82,19 @@ class ThresholdTools {
 			}
 			return image;
 		}
+		
+		static Mask2DPtr Threshold(Image2DCPtr image, num_t threshold)
+		{
+			Mask2DPtr mask = Mask2D::CreateUnsetMaskPtr(image->Width(), image->Height());
+			for(size_t y=0;y<image->Height();++y)
+			{
+				for(size_t x=0;x<image->Width();++x)
+				{
+					mask->SetValue(x, y, image->Value(x, y) >= threshold);
+				}
+			}
+			return mask;
+		}
 	private:
 		ThresholdTools() { }
 
diff --git a/CEP/DP3/AOFlagger/include/AOFlagger/test/experiments/experimentstestgroup.h b/CEP/DP3/AOFlagger/include/AOFlagger/test/experiments/experimentstestgroup.h
index 9825b8dc148f1a0e4b063b521a6cd7930e73633b..f8b088dae9c791b916351414dbd93f1070b8a527 100644
--- a/CEP/DP3/AOFlagger/include/AOFlagger/test/experiments/experimentstestgroup.h
+++ b/CEP/DP3/AOFlagger/include/AOFlagger/test/experiments/experimentstestgroup.h
@@ -25,7 +25,7 @@
 //#include <AOFlagger/test/experiments/defaultstrategyspeedtest.h>
 #include <AOFlagger/test/experiments/filterresultstest.h>
 //#include <AOFlagger/test/experiments/scaleinvariantdilationexperiment.h>
-//#include <AOFlagger/test/experiments/rankoperatorrocexperiment.h>
+#include <AOFlagger/test/experiments/rankoperatorrocexperiment.h>
 
 class ExperimentsTestGroup : public TestGroup {
 	public:
@@ -33,9 +33,9 @@ class ExperimentsTestGroup : public TestGroup {
 		
 		virtual void Initialize()
 		{
-			//Add(new RankOperatorROCExperiment());
+			Add(new RankOperatorROCExperiment());
 			//Add(new DefaultStrategySpeedTest());
-			Add(new FilterResultsTest());
+			//Add(new FilterResultsTest());
 			//Add(new ScaleInvariantDilationExperiment());
 		}
 };
diff --git a/CEP/DP3/AOFlagger/include/AOFlagger/test/experiments/rankoperatorrocexperiment.h b/CEP/DP3/AOFlagger/include/AOFlagger/test/experiments/rankoperatorrocexperiment.h
index fe0950c3bc72e65b8fb69f2e9b61c701a7e31bd1..ecf22b0b847218d45ee1b67aa8ab6bdc16475044 100644
--- a/CEP/DP3/AOFlagger/include/AOFlagger/test/experiments/rankoperatorrocexperiment.h
+++ b/CEP/DP3/AOFlagger/include/AOFlagger/test/experiments/rankoperatorrocexperiment.h
@@ -52,6 +52,21 @@ class RankOperatorROCExperiment : public UnitTest {
 		}
 		
 	private:
+		struct EvaluationResult
+		{
+			EvaluationResult() :
+				tpRatio(0.0), fpRatio(0.0),
+				tpFuzzy(0.0), fpFuzzy(0.0)
+			{
+			}
+			
+			double tpRatio;
+			double fpRatio;
+			double tpFuzzy;
+			double fpFuzzy;
+			std::vector<double> tpRefTP, tpRefFP;
+		};
+
 		struct RankOperatorROCGaussian : public Asserter
 		{
 			void operator()();
@@ -66,6 +81,7 @@ class RankOperatorROCExperiment : public UnitTest {
 		enum TestType { GaussianBroadband, SinusoidalBroadband};
 		
 		static void TestNoisePerformance(size_t totalRFI, double totalRFISum, const std::string &testname);
+		static void evaluateIterationResults(Mask2DPtr result, Mask2DPtr maskGroundTruth, Image2DPtr fuzzyGroundTruth, const size_t totalRFI, struct EvaluationResult &evaluationResult);
 		
 		static rfiStrategy::Strategy *createThresholdStrategy();
 		static void executeTest(enum TestType testType);
@@ -93,7 +109,7 @@ class RankOperatorROCExperiment : public UnitTest {
 		}
 };
 
-const unsigned RankOperatorROCExperiment::_repeatCount = 100;
+const unsigned RankOperatorROCExperiment::_repeatCount = 1;
 
 inline rfiStrategy::Strategy *RankOperatorROCExperiment::createThresholdStrategy()
 {
@@ -153,6 +169,40 @@ inline void RankOperatorROCExperiment::RankOperatorROCSinusoidal::operator()()
 	executeTest(SinusoidalBroadband);
 }
 
+void RankOperatorROCExperiment::evaluateIterationResults(Mask2DPtr result, Mask2DPtr maskGroundTruth, Image2DPtr fuzzyGroundTruth, const size_t totalRFI, EvaluationResult &evaluationResult)
+{
+	size_t totalPositives = result->GetCount<true>();
+	double tpFuzzyRatio = getRatio(fuzzyGroundTruth, result, false, false);
+	double fpFuzzyRatio = getRatio(fuzzyGroundTruth, result, true, false);
+	
+	Mask2DCPtr originalResult = Mask2D::CreateCopy(result);
+	result->Intersect(maskGroundTruth);
+	size_t truePositives = result->GetCount<true>();
+	size_t falsePositives = totalPositives - truePositives;
+	
+	double tpR = (double) truePositives / totalRFI;
+	double fpR = (double) falsePositives / totalRFI;
+	
+	evaluationResult.tpRatio += tpR;
+	evaluationResult.fpRatio += fpR;
+	evaluationResult.tpFuzzy += tpFuzzyRatio;
+	evaluationResult.fpFuzzy += fpFuzzyRatio;
+	
+	for(size_t i=1;i<=10;++i)
+	{
+		double groundTruthThreshold = (double) i / 20;
+		Mask2DPtr thrGroundTruth = ThresholdTools::Threshold(fuzzyGroundTruth, groundTruthThreshold);
+		Mask2DPtr intersectResult = Mask2D::CreateCopy(originalResult);
+		size_t refTotalRFI = thrGroundTruth->GetCount<true>();
+		intersectResult->Intersect(thrGroundTruth);
+		size_t refTruePositives = intersectResult->GetCount<true>();
+		size_t refFalsePositives = totalPositives - refTruePositives;
+		
+		evaluationResult.tpRefTP.push_back((double) refTruePositives / refTotalRFI);
+		evaluationResult.tpRefFP.push_back((double) refFalsePositives / refTotalRFI);
+	}
+}
+
 void RankOperatorROCExperiment::executeTest(enum TestType testType)
 {
 	const size_t ETA_STEPS = 100, DIL_STEPS = 128;
@@ -170,25 +220,7 @@ void RankOperatorROCExperiment::executeTest(enum TestType testType)
 			break;
 	}
 	
-	numl_t
-		grRankTpRatio[ETA_STEPS+1], grRankFpRatio[ETA_STEPS+1],
-		grRankTpSum[ETA_STEPS+1], grRankFpSum[ETA_STEPS+1],
-		grDilTpRatio[DIL_STEPS+1], grDilFpRatio[DIL_STEPS+1],
-		grDilTpSum[DIL_STEPS+1], grDilFpSum[DIL_STEPS+1];
-	for(unsigned i=0;i<ETA_STEPS+1;++i)
-	{
-		grRankTpRatio[i] = 0.0;
-		grRankFpRatio[i] = 0.0;
-		grRankTpSum[i] = 0.0;
-		grRankFpSum[i] = 0.0;
-	}
-	for(unsigned i=0;i<DIL_STEPS;++i)
-	{
-		grDilTpRatio[i] = 0.0;
-		grDilFpRatio[i] = 0.0;
-		grDilTpSum[i] = 0.0;
-		grDilFpSum[i] = 0.0;
-	}
+	EvaluationResult rocResults[ETA_STEPS+1], dilResults[DIL_STEPS+1];
 	
 	for(unsigned repeatIndex=0 ; repeatIndex<_repeatCount ; ++repeatIndex)
 	{
@@ -263,48 +295,20 @@ void RankOperatorROCExperiment::executeTest(enum TestType testType)
 		for(unsigned i=0;i<ETA_STEPS+1;++i)
 		{
 			const num_t eta = (num_t) i / (num_t) ETA_STEPS;
-			Mask2DPtr tempMask = Mask2D::CreateCopy(input);
-			ScaleInvariantDilation::DilateVertically(tempMask, eta);
-			
-			size_t totalPositives = tempMask->GetCount<true>();
-			double tpFuzzyRatio = getRatio(groundTruth, tempMask, false, false);
-			double fpFuzzyRatio = getRatio(groundTruth, tempMask, true, false);
-			
-			tempMask->Intersect(mask);
-			size_t truePositives = tempMask->GetCount<true>();
-			size_t falsePositives = totalPositives - truePositives;
-			
-			double tpRatio = (double) truePositives / totalRFI;
-			double fpRatio = (double) falsePositives / totalRFI;
+			Mask2DPtr resultMask = Mask2D::CreateCopy(input);
+			ScaleInvariantDilation::DilateVertically(resultMask, eta);
 			
-			grRankTpRatio[i] += tpRatio;
-			grRankFpRatio[i] += fpRatio;
-			grRankTpSum[i] += tpFuzzyRatio;
-			grRankFpSum[i] += fpFuzzyRatio;
+			evaluateIterationResults(resultMask, mask, groundTruth, totalRFI, rocResults[i]);
 		}
 			
 		for(size_t i=0;i<DIL_STEPS;++i)
 		{
 			const size_t dilSize = i * MAX_DILATION / DIL_STEPS;
 			
-			Mask2DPtr tempMask = Mask2D::CreateCopy(input);
-			StatisticalFlagger::EnlargeFlags(tempMask, 0, dilSize);
-			
-			size_t totalPositives = tempMask->GetCount<true>();
-			double tpFuzzyRatio = getRatio(groundTruth, tempMask, false, false);
-			double fpFuzzyRatio = getRatio(groundTruth, tempMask, true, false);
-			
-			tempMask->Intersect(mask);
-			size_t truePositives = tempMask->GetCount<true>();
-			size_t falsePositives = totalPositives - truePositives;
+			Mask2DPtr resultMask = Mask2D::CreateCopy(input);
+			StatisticalFlagger::EnlargeFlags(resultMask, 0, dilSize);
 			
-			double tpRatio = (double) truePositives / totalRFI;
-			double fpRatio = (double) falsePositives / totalRFI;
-			
-			grDilTpRatio[i] += tpRatio;
-			grDilFpRatio[i] += fpRatio;
-			grDilTpSum[i] += tpFuzzyRatio;
-			grDilFpSum[i] += fpFuzzyRatio;
+			evaluateIterationResults(resultMask, mask, groundTruth, totalRFI, dilResults[i]);
 		}
 		
 		//grTotalRFI += totalRFI;
@@ -320,11 +324,15 @@ void RankOperatorROCExperiment::executeTest(enum TestType testType)
 		const num_t eta = (num_t) i / (num_t) ETA_STEPS;
 			rankOperatorFile
 			<< "eta\t" << eta
-			<< "\tTP\t" << grRankTpRatio[i] / _repeatCount
-			<< "\tFP\t" << grRankFpRatio[i] / _repeatCount
-			<< "\ttpSum\t" << grRankTpSum[i] / _repeatCount
-			<< "\tfpSum\t" << grRankFpSum[i] / _repeatCount
-			<< '\n';
+			<< "\tTP\t" << rocResults[i].tpRatio / _repeatCount
+			<< "\tFP\t" << rocResults[i].fpRatio / _repeatCount
+			<< "\ttpSum\t" << rocResults[i].tpFuzzy / _repeatCount
+			<< "\tfpSum\t" << rocResults[i].fpFuzzy / _repeatCount;
+			for(size_t j=0;j<rocResults[i].tpRefTP.size();++j)
+			{
+				rankOperatorFile << "\t" << rocResults[i].tpRefTP[j] << "\t" << rocResults[i].tpRefFP[j];
+			}
+			rankOperatorFile << '\n';
 	}
 	const std::string dilationFilename(std::string("dilation-roc-") + testname + ".txt");
 	std::ofstream dilationFile(dilationFilename.c_str());
@@ -333,11 +341,15 @@ void RankOperatorROCExperiment::executeTest(enum TestType testType)
 		const size_t dilSize = i * MAX_DILATION / DIL_STEPS;
 		dilationFile
 		<< "size\t" << dilSize
-		<< "\tTP\t" << grDilTpRatio[i] / _repeatCount
-		<< "\tFP\t" << grDilFpRatio[i] / _repeatCount
-		<< "\ttpSum\t" << grDilTpSum[i] / _repeatCount
-		<< "\tfpSum\t" << grDilFpSum[i] / _repeatCount
-		<< '\n';
+		<< "\tTP\t" << dilResults[i].tpRatio / _repeatCount
+		<< "\tFP\t" << dilResults[i].fpRatio / _repeatCount
+		<< "\ttpSum\t" << dilResults[i].tpFuzzy / _repeatCount
+		<< "\tfpSum\t" << dilResults[i].fpFuzzy / _repeatCount;
+			for(size_t j=0;j<dilResults[i].tpRefTP.size();++j)
+			{
+				dilationFile << "\t" << dilResults[i].tpRefTP[j] << "\t" << dilResults[i].tpRefFP[j];
+			}
+			dilationFile << '\n';
 	}
 	
 	//TestNoisePerformance(grTotalRFI / _repeatCount, grTotalRFISum / _repeatCount, testname);