diff --git a/targets/tests/NumericalTests/Tests/L2NormTest/L2NormTest.cpp b/targets/tests/NumericalTests/Tests/L2NormTest/L2NormTest.cpp
index b79fa26dd0e3cb7a12065f269997551bef60ccff..fd9d7250baa473e862d8655b0e89af254e68d0f6 100644
--- a/targets/tests/NumericalTests/Tests/L2NormTest/L2NormTest.cpp
+++ b/targets/tests/NumericalTests/Tests/L2NormTest/L2NormTest.cpp
@@ -5,9 +5,11 @@
 #include "Utilities\Results\AnalyticalResults\AnalyticalResult.h"
 #include "Utilities\Results\SimulationResults\SimulationResults.h"
 
-std::shared_ptr<L2NormTest> L2NormTest::getNewInstance(std::shared_ptr< AnalyticalResults> analyticalResult, std::shared_ptr< ColorConsoleOutput> colorOutput)
+#include <iomanip>
+
+std::shared_ptr<L2NormTest> L2NormTest::getNewInstance(std::shared_ptr< AnalyticalResults> analyticalResult, std::shared_ptr< ColorConsoleOutput> colorOutput, std::string dataToCalculate, double maxL2NormDiff, unsigned int basicTimeStep, unsigned int divergentTimeStep)
 {
-	return std::shared_ptr<L2NormTest>(new L2NormTest(analyticalResult, colorOutput));
+	return std::shared_ptr<L2NormTest>(new L2NormTest(analyticalResult, colorOutput, dataToCalculate, maxL2NormDiff, basicTimeStep, divergentTimeStep));
 }
 
 void L2NormTest::update()
@@ -24,27 +26,62 @@ void L2NormTest::evaluate()
 {
 	analyticalResult->calc(simResults.at(0));
 
-	std::vector< double> results = calculator->calc(analyticalResult->getVx(), simResults.at(0)->getVx(), simResults.at(0)->getLevels());
+	int basicTimeStepInResults = calcTimeStepInResults(basicTimeStep);
+	int divergentTimeStepInResults = calcTimeStepInResults(divergentTimeStep);
+
+	resultBasicTimestep = calcL2NormForTimeStep(basicTimeStepInResults);
+	resultDivergentTimeStep = calcL2NormForTimeStep(divergentTimeStep);
+
+	diffL2Norm = resultDivergentTimeStep - resultBasicTimestep;
+
+	testPassed = maxL2NormDiff > diffL2Norm;
 
 	makeConsoleOutput();
 }
 
 std::string L2NormTest::getLogFileOutput()
 {
-	return std::string();
+	std::ostringstream oss;
+	oss << "L2Norm_BasicTimeStep_L" << simResults.at(0)->getNumberOfXNodes() << ":" << resultBasicTimestep << std::endl;
+	oss << "L2Norm_DivergentTimeStep_L" << simResults.at(0)->getNumberOfXNodes() << ":" << resultDivergentTimeStep << std::endl;
+	oss << "L2Norm_Diff_L" << simResults.at(0)->getNumberOfXNodes() << ":" << diffL2Norm << std::endl << std::endl;
+	return oss.str();
 }
 
 std::vector<bool> L2NormTest::getPassedTests()
 {
-	return std::vector<bool>();
+	return std::vector<bool>(1, testPassed);
 }
 
 void L2NormTest::makeConsoleOutput()
 {
+	colorOutput->makeTestOutput(testPassed, simInfos.at(0), "L2Norm", "L2Norm", "L2NormDiff", resultBasicTimestep, resultDivergentTimeStep, diffL2Norm);
+}
+
+int L2NormTest::calcTimeStepInResults(unsigned int timeStep)
+{
+	for (int i = 0; i < simResults.at(0)->getTimeSteps().size(); i++) {
+		if (timeStep == simResults.at(0)->getTimeSteps().at(i))
+			return simResults.at(0)->getTimeSteps().at(i);
+	}
+}
+
+double L2NormTest::calcL2NormForTimeStep(unsigned int timeStep)
+{
+	if (dataToCalculate == "Vx")
+		return calculator->calc(analyticalResult->getVx().at(timeStep), simResults.at(0)->getVx().at(timeStep), simResults.at(0)->getLevels().at(timeStep));
+	if (dataToCalculate == "Vy")
+		return calculator->calc(analyticalResult->getVy().at(timeStep), simResults.at(0)->getVy().at(timeStep), simResults.at(0)->getLevels().at(timeStep));
+	if (dataToCalculate == "Vz")
+		return calculator->calc(analyticalResult->getVz().at(timeStep), simResults.at(0)->getVz().at(timeStep), simResults.at(0)->getLevels().at(timeStep));
+	if (dataToCalculate == "Press")
+		return calculator->calc(analyticalResult->getPress().at(timeStep), simResults.at(0)->getPress().at(timeStep), simResults.at(0)->getLevels().at(timeStep));
+	if (dataToCalculate == "Rho")
+		return calculator->calc(analyticalResult->getRho().at(timeStep), simResults.at(0)->getRho().at(timeStep), simResults.at(0)->getLevels().at(timeStep));
 
 }
 
-L2NormTest::L2NormTest(std::shared_ptr< AnalyticalResults> analyticalResult, std::shared_ptr< ColorConsoleOutput> colorOutput) : TestImp(colorOutput), analyticalResult(analyticalResult)
+L2NormTest::L2NormTest(std::shared_ptr< AnalyticalResults> analyticalResult, std::shared_ptr< ColorConsoleOutput> colorOutput, std::string dataToCalculate, double maxL2NormDiff, unsigned int basicTimeStep, unsigned int divergentTimeStep) : TestImp(colorOutput), analyticalResult(analyticalResult), basicTimeStep(basicTimeStep), divergentTimeStep(divergentTimeStep), dataToCalculate(dataToCalculate), maxL2NormDiff(maxL2NormDiff)
 {
 	calculator = L2NormCalculator::getNewInstance();
 }
\ No newline at end of file
diff --git a/targets/tests/NumericalTests/Tests/L2NormTest/L2NormTest.h b/targets/tests/NumericalTests/Tests/L2NormTest/L2NormTest.h
index 50b053f973eb0ab8aa19c203161b48850f91db26..54aa4c7e081ec0928e10552897655a23e2a05371 100644
--- a/targets/tests/NumericalTests/Tests/L2NormTest/L2NormTest.h
+++ b/targets/tests/NumericalTests/Tests/L2NormTest/L2NormTest.h
@@ -11,7 +11,7 @@ class AnalyticalResults;
 class L2NormTest : public TestImp
 {
 public:
-	static std::shared_ptr<L2NormTest> getNewInstance(std::shared_ptr< AnalyticalResults> analyticalResult, std::shared_ptr< ColorConsoleOutput> colorOutput);
+	static std::shared_ptr<L2NormTest> getNewInstance(std::shared_ptr< AnalyticalResults> analyticalResult, std::shared_ptr< ColorConsoleOutput> colorOutput, std::string dataToCalculate, double maxL2NormDiff, unsigned int basicTimeStep, unsigned int divergentTimeStep);
 
 	void update();
 	void addSimulation(std::shared_ptr< TestSimulation> sim, std::shared_ptr< SimulationInfo> simInfo);
@@ -19,11 +19,20 @@ public:
 	std::string getLogFileOutput();
 	std::vector< bool> getPassedTests();
 	void makeConsoleOutput();
+	int calcTimeStepInResults(unsigned int timeStep);
+	double calcL2NormForTimeStep(unsigned int timeStep);
+
 
 private:
-	L2NormTest(std::shared_ptr< AnalyticalResults> analyticalResult, std::shared_ptr< ColorConsoleOutput> colorOutput);
+	L2NormTest(std::shared_ptr< AnalyticalResults> analyticalResult, std::shared_ptr< ColorConsoleOutput> colorOutput, std::string dataToCalculate, double maxL2NormDiff, unsigned int basicTimeStep, unsigned int divergentTimeStep);
 
 	std::shared_ptr< L2NormCalculator> calculator;
 	std::shared_ptr< AnalyticalResults> analyticalResult;
+	unsigned int basicTimeStep, divergentTimeStep;
+	double resultBasicTimestep, resultDivergentTimeStep;
+	std::string dataToCalculate;
+	double diffL2Norm;
+	double maxL2NormDiff;
+	bool testPassed;
 };
 #endif 
\ No newline at end of file
diff --git a/targets/tests/NumericalTests/Tests/L2NormTest/LogFileInformation/L2NormLogFileInformation.cpp b/targets/tests/NumericalTests/Tests/L2NormTest/LogFileInformation/L2NormLogFileInformation.cpp
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5b54312c6ca698c40ccaea27d514373d81b24639 100644
--- a/targets/tests/NumericalTests/Tests/L2NormTest/LogFileInformation/L2NormLogFileInformation.cpp
+++ b/targets/tests/NumericalTests/Tests/L2NormTest/LogFileInformation/L2NormLogFileInformation.cpp
@@ -0,0 +1,30 @@
+#include "L2NormLogFileInformation.h"
+
+#include "Tests\L2NormTest\L2NormTest.h"
+
+#include <iomanip>
+#include <sstream>
+
+std::shared_ptr<L2NormInformation> L2NormInformation::getNewInstance(std::vector<std::shared_ptr<L2NormTest>> tests)
+{
+	return std::shared_ptr<L2NormInformation>(new L2NormInformation(tests));
+}
+
+std::string L2NormInformation::getOutput()
+{
+	std::ostringstream headName;
+	headName << tests.at(0)->getSimulationName() << " L2Norm Test";
+	makeCenterHead(headName.str());
+
+	oss << std::endl;
+
+	for (int i = 0; i < tests.size(); i++)
+		oss << tests.at(i)->getLogFileOutput();
+
+	return oss.str();
+}
+
+L2NormInformation::L2NormInformation(std::vector<std::shared_ptr<L2NormTest>> tests) : tests(tests)
+{
+
+}
\ No newline at end of file
diff --git a/targets/tests/NumericalTests/Tests/L2NormTest/LogFileInformation/L2NormLogFileInformation.h b/targets/tests/NumericalTests/Tests/L2NormTest/LogFileInformation/L2NormLogFileInformation.h
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1ffdec0bec4596ea86fe78472f1f98331c194652 100644
--- a/targets/tests/NumericalTests/Tests/L2NormTest/LogFileInformation/L2NormLogFileInformation.h
+++ b/targets/tests/NumericalTests/Tests/L2NormTest/LogFileInformation/L2NormLogFileInformation.h
@@ -0,0 +1,24 @@
+#ifndef L2NORM_LOGFILE_INFORMATION_H
+#define L2NORM_LOGFILE_INFORMATION_H
+
+#include "Utilities\LogFileInformation\TestLogFileInformation\TestLogFileInformation.h"
+
+#include <memory>
+#include <vector>
+
+class L2NormTest;
+
+class L2NormInformation : public TestLogFileInformation
+{
+public:
+	static std::shared_ptr< L2NormInformation> getNewInstance(std::vector< std::shared_ptr< L2NormTest>> tests);
+
+	std::string getOutput();
+
+private:
+	L2NormInformation() {};
+	L2NormInformation(std::vector< std::shared_ptr< L2NormTest>> tests);
+
+	std::vector< std::shared_ptr< L2NormTest>> tests;
+};
+#endif
\ No newline at end of file
diff --git a/targets/tests/NumericalTests/Utilities/Calculator/L2NormCalculator/L2NormCalculator.cpp b/targets/tests/NumericalTests/Utilities/Calculator/L2NormCalculator/L2NormCalculator.cpp
index ed0add4ff879691a91335618232594750b1779e0..3e80e7ef5cb0ffec027da45bedf721cedb7f9f87 100644
--- a/targets/tests/NumericalTests/Utilities/Calculator/L2NormCalculator/L2NormCalculator.cpp
+++ b/targets/tests/NumericalTests/Utilities/Calculator/L2NormCalculator/L2NormCalculator.cpp
@@ -8,22 +8,17 @@ std::shared_ptr<L2NormCalculator> L2NormCalculator::getNewInstance()
 	return std::shared_ptr<L2NormCalculator>(new L2NormCalculator());
 }
 
-std::vector< double> L2NormCalculator::calc(std::vector<std::vector<double>> basicData, std::vector<std::vector<double>> divergentData, std::vector<std::vector<unsigned int>> level)
+double L2NormCalculator::calc(std::vector<double> basicData, std::vector<double> divergentData, std::vector<unsigned int> level)
 {
-	std::vector< double> results;
-
+	double zaehler = 0;
+	double nenner = 0;
 	for (int i = 0; i < basicData.size(); i++) {
-		double zaehler = 0;
-		double nenner = 0;
-		for (int j = 0; j < basicData.at(i).size(); j++) {
-			double flaeche = (1 / pow(2.0, level.at(i).at(j))) * (1 / pow(2.0, level.at(i).at(j)));
-			zaehler += ((divergentData.at(i).at(j) - basicData.at(i).at(j))*(divergentData.at(i).at(j) - basicData.at(i).at(j))) * flaeche;
-			nenner += (basicData.at(i).at(j)*basicData.at(i).at(j)) * flaeche;
-		}
-		results.push_back(sqrt(zaehler/nenner));
+		double flaeche = (1 / pow(2.0, level.at(i))) * (1 / pow(2.0, level.at(i)));
+		zaehler += ((divergentData.at(i) - basicData.at(i))*(divergentData.at(i) - basicData.at(i))) * flaeche;
+		nenner += (basicData.at(i)*basicData.at(i)) * flaeche;
 	}
 	
-	return results;
+	return sqrt(zaehler / nenner);
 }
 
 L2NormCalculator::L2NormCalculator()
diff --git a/targets/tests/NumericalTests/Utilities/Calculator/L2NormCalculator/L2NormCalculator.h b/targets/tests/NumericalTests/Utilities/Calculator/L2NormCalculator/L2NormCalculator.h
index 022c6d2d7a17e1463b2d67fc32ad2d27726c911c..f914ecba563e714a40d61fb9d718710b525ac9c7 100644
--- a/targets/tests/NumericalTests/Utilities/Calculator/L2NormCalculator/L2NormCalculator.h
+++ b/targets/tests/NumericalTests/Utilities/Calculator/L2NormCalculator/L2NormCalculator.h
@@ -9,7 +9,7 @@ class L2NormCalculator
 public:
 	static std::shared_ptr< L2NormCalculator> getNewInstance();
 
-	std::vector< double> calc(std::vector<std::vector<double>> basicData, std::vector<std::vector<double>> divergentData, std::vector<std::vector<unsigned int>> level);
+	double calc(std::vector<double> basicData, std::vector<double> divergentData, std::vector<unsigned int> level);
 
 private:
 	L2NormCalculator();
diff --git a/targets/tests/NumericalTests/Utilities/ColorConsoleOutput/ColorConsoleOutput.h b/targets/tests/NumericalTests/Utilities/ColorConsoleOutput/ColorConsoleOutput.h
index a7d6ea66bf6b957a7ef709ebaf5b7bd1bd2820c7..ccd59877d569345f2afcfba7332cee676cbd601e 100644
--- a/targets/tests/NumericalTests/Utilities/ColorConsoleOutput/ColorConsoleOutput.h
+++ b/targets/tests/NumericalTests/Utilities/ColorConsoleOutput/ColorConsoleOutput.h
@@ -10,6 +10,7 @@ class ColorConsoleOutput
 {
 public:
 	virtual void makeTestOutput(bool testPassed, std::shared_ptr< SimulationInfo> simInfo1, std::shared_ptr<SimulationInfo> simInfo2, std::string nameWerte1, std::string nameWerte2, std::string nameWerte3, double testWert1, double testWert2, double testWert3) = 0;
+	virtual void makeTestOutput(bool testPassed, std::shared_ptr< SimulationInfo> simInfo, std::string nameWerte1, std::string nameWerte2, std::string nameWerte3, double testWert1, double testWert2, double testWert3) = 0;
 	virtual void makeSimulationHeadOutput(std::shared_ptr< SimulationInfo> simInfo) = 0;
 	virtual void makeFinalTestOutputHead(int numberOfPassedTests, int numberOfTests) = 0;
 	virtual void makeFinalTestOutputFoot(int numberOfPassedTests, int numberOfTests) = 0;
diff --git a/targets/tests/NumericalTests/Utilities/ColorConsoleOutput/ColorConsoleOutputImp.cpp b/targets/tests/NumericalTests/Utilities/ColorConsoleOutput/ColorConsoleOutputImp.cpp
index 31540f06351677746ce65178a1c5135043c3aef7..ee02d8b6c76ed76dfb8844730aaf10d0d755ea31 100644
--- a/targets/tests/NumericalTests/Utilities/ColorConsoleOutput/ColorConsoleOutputImp.cpp
+++ b/targets/tests/NumericalTests/Utilities/ColorConsoleOutput/ColorConsoleOutputImp.cpp
@@ -51,6 +51,39 @@ void ColorConsoleOutputImp::makeTestOutput(bool testPassed, std::shared_ptr<Simu
 	printTestEnd(testPassed);
 }
 
+void ColorConsoleOutputImp::makeTestOutput(bool testPassed, std::shared_ptr<SimulationInfo> simInfo, std::string nameWerte1, std::string nameWerte2, std::string nameWerte3, double testWert1, double testWert2, double testWert3)
+{
+	setColor(testPassed);
+	printTestStart();
+
+	std::ostringstream oss;
+	oss << "Kernel: " << simInfo->getKernelName();
+	print(oss.str());
+	oss.str(std::string());
+
+	oss << "Viscosity: " << simInfo->getViscosity();
+	print(oss.str());
+	oss.str(std::string());
+
+	oss << simInfo->getSimulationName();
+	print(oss.str());
+	oss.str(std::string());
+
+	oss << "L: " << simInfo->getLx() << simInfo->getSimulationParameterString();
+	print(oss.str());
+	oss.str(std::string());
+
+	oss << nameWerte1 << ": " << testWert1 << std::setw(5) << "\t" << nameWerte2 << ": " << testWert2;
+	print(oss.str());
+	oss.str(std::string());
+
+	oss << nameWerte3 << ": " << testWert3;
+	print(oss.str());
+	oss.str(std::string());
+
+	printTestEnd(testPassed);
+}
+
 void ColorConsoleOutputImp::makeSimulationHeadOutput(std::shared_ptr< SimulationInfo> simInfo)
 {
 	std::ostringstream ossLine1;
diff --git a/targets/tests/NumericalTests/Utilities/ColorConsoleOutput/ColorConsoleOutputImp.h b/targets/tests/NumericalTests/Utilities/ColorConsoleOutput/ColorConsoleOutputImp.h
index a1e9246ccba61a937fe38d1345b6043419b447f6..4d19175e57ab82332b332b37da1c5f6964186120 100644
--- a/targets/tests/NumericalTests/Utilities/ColorConsoleOutput/ColorConsoleOutputImp.h
+++ b/targets/tests/NumericalTests/Utilities/ColorConsoleOutput/ColorConsoleOutputImp.h
@@ -34,6 +34,7 @@ public:
 	static std::shared_ptr<ColorConsoleOutput> getInstance();
 
 	void makeTestOutput(bool testPassed, std::shared_ptr< SimulationInfo> simInfo1, std::shared_ptr<SimulationInfo> simInfo2, std::string nameWerte1, std::string nameWerte2, std::string nameWerte3, double testWert1, double testWert2, double testWert3);
+	void makeTestOutput(bool testPassed, std::shared_ptr< SimulationInfo> simInfo, std::string nameWerte1, std::string nameWerte2, std::string nameWerte3, double testWert1, double testWert2, double testWert3);
 	void makeSimulationHeadOutput(std::shared_ptr< SimulationInfo> simInfo);
 	void makeFinalTestOutputHead(int numberOfPassedTests, int numberOfTests);
 	void makeFinalTestOutputFoot(int numberOfPassedTests, int numberOfTests);
diff --git a/targets/tests/NumericalTests/Utilities/ConfigFileReader/ConfigFileReader.cpp b/targets/tests/NumericalTests/Utilities/ConfigFileReader/ConfigFileReader.cpp
index f5c1cf514ef7be467ba867b5e743e748495a62a1..f433ba342f8aaa12529fee07b238cd94717ea82e 100644
--- a/targets/tests/NumericalTests/Utilities/ConfigFileReader/ConfigFileReader.cpp
+++ b/targets/tests/NumericalTests/Utilities/ConfigFileReader/ConfigFileReader.cpp
@@ -25,6 +25,7 @@
 #include "Tests/PhiAndNuTest/PhiAndNuTest.h"
 #include "Tests\PhiAndNuTest\LogFileInformation\PhiAndNuLogFileInformation.h"
 #include "Tests\L2NormTest\L2NormTest.h"
+#include "Tests\L2NormTest\LogFileInformation\L2NormLogFileInformation.h"
 
 #include "Utilities/LogFileInformation/LogFileInformation.h"
 #include "Utilities/LogFileInformation/BasicSimulationInfo/BasicSimulationInfo.h"
@@ -60,7 +61,6 @@ ConfigFileReader::ConfigFileReader()
 	l0 = 32.0;
 	rho0 = 1.0;
 
-
 	colorOutput = ColorConsoleOutputImp::getInstance();
 	testQueue = TestQueueImp::getNewInstance(colorOutput);
 }
@@ -80,12 +80,14 @@ void ConfigFileReader::readConfigFile(const std::string aFilePath)
 	viscosity = StringUtil::toDoubleVector(input->getValue("Viscosity"));
 
 	minOrderOfAccuracy = StringUtil::toDouble(input->getValue("MinOrderOfAccuracy"));
-	dataToCalcPhiAndNuTest = StringUtil::toString(input->getValue("DataToCalcPhiAndNuTest"));
+	dataToCalcPhiAndNuTest = StringUtil::toString(input->getValue("DataToCalc_PhiAndNu"));
 	startStepCalculationPhiNu = StringUtil::toInt(input->getValue("StartTimeStepCalculation_PhiNu"));
 	endStepCalculationPhiNu = StringUtil::toInt(input->getValue("EndTimeStepCalculation_PhiNu"));
 
+	maxL2NormDiff = StringUtil::toDouble(input->getValue("MaxL2NormDiff"));
+	dataToCalcL2Test = StringUtil::toString(input->getValue("DataToCalc_L2"));
 	basicTimeStepL2Norm = StringUtil::toInt(input->getValue("BasicTimeStep_L2"));
-	divergentDataL2Norm = StringUtil::toInt(input->getValue("DivergentDataTimeStep_L2"));
+	divergentTimeStepL2Norm = StringUtil::toInt(input->getValue("DivergentTimeStep_L2"));
 
 	amplitudeTGV = StringUtil::toDoubleVector(input->getValue("Amplitude_TGV"));
 	u0TGV = StringUtil::toDoubleVector(input->getValue("u0_TGV"));
@@ -100,7 +102,6 @@ void ConfigFileReader::readConfigFile(const std::string aFilePath)
 	numberOfTimeSteps = StringUtil::toInt(input->getValue("NumberOfTimeSteps"));
 	basisTimeStepLength = StringUtil::toInt(input->getValue("BasisTimeStepLength"));
 	
-
 	grids.resize(5);
 	grids.at(0) = input->getValue("GridPath32");
 	grids.at(1) = input->getValue("GridPath64");
@@ -203,7 +204,7 @@ void ConfigFileReader::makeTaylorGreenSimulations(std::string kernelName, double
 
 	std::vector< std::shared_ptr< TestLogFileInformation>> testLogFileInfo;
 
-	if (nuAndPhiTestTGV) {
+	if (nuAndPhiTestTGV && checkNuAndPhiTestCouldRun(tgv)) {
 		std::vector< std::shared_ptr< PhiAndNuTest>> phiAndNuTests = makePhiAndNuTests(testSimTGV, simInfoTGV, viscosity);
 		std::shared_ptr< PhiAndNuInformation> phiNuLogFileInfo = PhiAndNuInformation::getNewInstance(phiAndNuTests);
 		testLogFileInfo.push_back(phiNuLogFileInfo);
@@ -211,9 +212,10 @@ void ConfigFileReader::makeTaylorGreenSimulations(std::string kernelName, double
 
 	if (l2NormTestTGV) {
 		std::vector< std::shared_ptr< L2NormTest>> l2NormTests = makeL2NormTests(testSimTGV, simInfoTGV, analyResultTGV);
+		std::shared_ptr< L2NormInformation> l2NormLogFileInfo = L2NormInformation::getNewInstance(l2NormTests);
+		testLogFileInfo.push_back(l2NormLogFileInfo);
 	}
 	
-		
 
 	for (int i = 0; i < testSimTGV.size(); i++)
 		testSimulation.push_back(testSimTGV.at(i));
@@ -230,23 +232,31 @@ void ConfigFileReader::makeShearWaveSimulations(std::string kernelName, double v
 	simParaSW.resize(0);
 	std::vector< std::shared_ptr< SimulationInfo>> simInfoSW;
 	simInfoSW.resize(0);
+	std::vector< std::shared_ptr< AnalyticalResults>> analyResultSW;
+	analyResultSW.resize(0);
 
-	for (int i = 0; i < tgv.size(); i++)
-		if (tgv.at(i)) {
+	for (int i = 0; i < sw.size(); i++)
+		if (sw.at(i)) {
 			simParaSW.push_back(ShearWaveSimulationParameter::getNewInstance(kernelName, u0, v0, viscosity, rho0, lx.at(i), lz.at(i), l0, numberOfTimeSteps, basisTimeStepLength, calcStartStepForToVectorWriter(), ySliceForCalculation, grids.at(i), maxLevel, numberOfGridLevels, writeFiles, startStepFileWriter, filePath, devices));
 			simInfoSW.push_back(ShearWaveSimulationInfo::getNewInstance(u0, v0, l0, lx.at(i), viscosity, kernelName, "ShearWave"));
+			analyResultSW.push_back(ShearWaveAnalyticalResults::getNewInstance(viscosity, u0, v0, l0, rho0));
 		}
 
 	std::vector< std::shared_ptr< TestSimulation>> testSimSW = buildTestSimulation(simParaSW, simInfoSW);
 
 	std::vector< std::shared_ptr< TestLogFileInformation>> testLogFileInfo;
 
-	if (nuAndPhiTestSW) {
+	if (nuAndPhiTestSW && checkNuAndPhiTestCouldRun(sw)) {
 		std::vector< std::shared_ptr< PhiAndNuTest>> phiAndNuTests = makePhiAndNuTests(testSimSW, simInfoSW, viscosity);
 		std::shared_ptr< PhiAndNuInformation> phiNuLogFileInfo = PhiAndNuInformation::getNewInstance(phiAndNuTests);
 		testLogFileInfo.push_back(phiNuLogFileInfo);
 	}
-		
+	
+	if (l2NormTestTGV) {
+		std::vector< std::shared_ptr< L2NormTest>> l2NormTests = makeL2NormTests(testSimSW, simInfoSW, analyResultSW);
+		std::shared_ptr< L2NormInformation> l2NormLogFileInfo = L2NormInformation::getNewInstance(l2NormTests);
+		testLogFileInfo.push_back(l2NormLogFileInfo);
+	}
 
 	for (int i = 0; i < testSimSW.size(); i++)
 		testSimulation.push_back(testSimSW.at(i));
@@ -280,7 +290,7 @@ std::vector<std::shared_ptr<L2NormTest>> ConfigFileReader::makeL2NormTests(std::
 {
 	std::vector<std::shared_ptr<L2NormTest>> l2Tests;
 	for (int i = 0; i < testSim.size(); i++) {
-		std::shared_ptr<L2NormTest> test = L2NormTest::getNewInstance(analyticalResults.at(i), colorOutput);
+		std::shared_ptr<L2NormTest> test = L2NormTest::getNewInstance(analyticalResults.at(i), colorOutput, dataToCalcL2Test, maxL2NormDiff, basicTimeStepL2Norm, divergentTimeStepL2Norm);
 		test->addSimulation(testSim.at(i), simInfo.at(i));
 		testSim.at(i)->registerSimulationObserver(test);
 		l2Tests.push_back(test);
@@ -299,6 +309,16 @@ bool ConfigFileReader::shouldSimulationGroupRun(std::vector<bool> test)
 	return false;
 }
 
+bool ConfigFileReader::checkNuAndPhiTestCouldRun(std::vector<bool> test)
+{
+	int numberOfTestInGroup = 0;
+	for (int i = 0; i < test.size(); i++) {
+		if (test.at(i))
+			numberOfTestInGroup++;
+	}
+	return numberOfTestInGroup > 1;
+}
+
 unsigned int ConfigFileReader::calcStartStepForToVectorWriter()
 {
 	std::vector< unsigned int> startStepsTests;
diff --git a/targets/tests/NumericalTests/Utilities/ConfigFileReader/ConfigFileReader.h b/targets/tests/NumericalTests/Utilities/ConfigFileReader/ConfigFileReader.h
index 344833a6c997713a1d009d8b39f0d79e67a693a5..e5b83016af5a1263ef166dfc3368da2a41fb9731 100644
--- a/targets/tests/NumericalTests/Utilities/ConfigFileReader/ConfigFileReader.h
+++ b/targets/tests/NumericalTests/Utilities/ConfigFileReader/ConfigFileReader.h
@@ -52,7 +52,7 @@ private:
 	std::vector< std::shared_ptr< L2NormTest>> makeL2NormTests(std::vector<std::shared_ptr< TestSimulation>> testSim, std::vector< std::shared_ptr< SimulationInfo>> simInfo, std::vector<std::shared_ptr< AnalyticalResults>> analyticalResults);
 
 	bool shouldSimulationGroupRun(std::vector<bool> test);
-
+	bool checkNuAndPhiTestCouldRun(std::vector<bool> test);
 	unsigned int calcStartStepForToVectorWriter();
 
 
@@ -60,14 +60,15 @@ private:
 	std::vector<double> amplitudeTGV, u0TGV;
 	bool nuAndPhiTestTGV, nuAndPhiTestSW;
 	bool l2NormTestTGV, l2NormTestSW;
-	std::string dataToCalcPhiAndNuTest;
+	std::string dataToCalcPhiAndNuTest, dataToCalcL2Test;
 	std::vector<double> viscosity;
 	real rho0;
 	real l0;
 	double minOrderOfAccuracy;
+	double maxL2NormDiff;
 	unsigned int numberOfTimeSteps, basisTimeStepLength;
 	unsigned int startStepCalculationPhiNu, endStepCalculationPhiNu;
-	unsigned int basicTimeStepL2Norm, divergentDataL2Norm;
+	unsigned int basicTimeStepL2Norm, divergentTimeStepL2Norm;
 	unsigned int startStepFileWriter;
 	unsigned int ySliceForCalculation;
 	unsigned int maxLevel;
diff --git a/targets/tests/NumericalTests/Utilities/Results/ResultsImp.cpp b/targets/tests/NumericalTests/Utilities/Results/ResultsImp.cpp
index d8aabcc29fa13a0385deabfef7b4678f7ff9622e..aa2193bd43b72a410f2aa69ef34b6165d35c0244 100644
--- a/targets/tests/NumericalTests/Utilities/Results/ResultsImp.cpp
+++ b/targets/tests/NumericalTests/Utilities/Results/ResultsImp.cpp
@@ -64,3 +64,13 @@ std::vector<std::vector<unsigned int>> ResultsImp::getLevels()
 {
 	return level;
 }
+
+std::vector<std::vector<double>> ResultsImp::getPress()
+{
+	return press;
+}
+
+std::vector<std::vector<double>> ResultsImp::getRho()
+{
+	return rho;
+}
diff --git a/targets/tests/NumericalTests/Utilities/Results/ResultsImp.h b/targets/tests/NumericalTests/Utilities/Results/ResultsImp.h
index 0cd41be2985cffd7af995c1525f1e92176fac606..f7b485e307533ea7326b76d9cb856efa591e73dc 100644
--- a/targets/tests/NumericalTests/Utilities/Results/ResultsImp.h
+++ b/targets/tests/NumericalTests/Utilities/Results/ResultsImp.h
@@ -19,6 +19,8 @@ public:
 	int getTimeStepLength();
 	std::vector<unsigned int> getTimeSteps();
 	std::vector< std::vector< unsigned int> > getLevels();
+	std::vector<std::vector<double>> getPress();
+	std::vector<std::vector<double>> getRho();
 
 protected:
 	ResultsImp() {};
diff --git a/targets/tests/NumericalTests/Utilities/TestQueue/TestQueueImp.cpp b/targets/tests/NumericalTests/Utilities/TestQueue/TestQueueImp.cpp
index defc66cf257e37cdc7063acae0fae5d742684815..a2fad08ec19964199ad07d288e3943e50a47fa0d 100644
--- a/targets/tests/NumericalTests/Utilities/TestQueue/TestQueueImp.cpp
+++ b/targets/tests/NumericalTests/Utilities/TestQueue/TestQueueImp.cpp
@@ -22,7 +22,7 @@ void TestQueueImp::addTest(std::shared_ptr<Test> test)
 	tests.push_back(test);
 }
 
-TestQueueImp::TestQueueImp(std::shared_ptr< ColorConsoleOutput> colorOutput)
+TestQueueImp::TestQueueImp(std::shared_ptr< ColorConsoleOutput> colorOutput) : colorOutput(colorOutput)
 {
 	tests.resize(0);
 }
diff --git a/targets/tests/NumericalTests/config.txt b/targets/tests/NumericalTests/config.txt
index 930663d677c5899f856f982f491596354bc299f2..9f9a9fe10a842cce3cadfce43f2f4d30faf31eda 100644
--- a/targets/tests/NumericalTests/config.txt
+++ b/targets/tests/NumericalTests/config.txt
@@ -6,20 +6,21 @@ Devices="1"
 ##################################################
 #				  Kernels						 #
 ##################################################
-KernelsToTest="CumulantOneCompSP27 CumulantAA2016CompSP27 CumulantAll4CompSP27"
+KernelsToTest="CumulantOneCompSP27"
+CumulantAA2016CompSP27 CumulantAll4CompSP27"
 
 ##################################################
 #	       Basic Simulation Parameter			 #
 ##################################################
 NumberOfTimeSteps=20
 BasisTimeStepLength=1000
-Viscosity="0.0001 0.00001"
+Viscosity="0.0001"
 
 ##################################################
 #	    TaylorGreenVortex Parameter				 #
 ##################################################
-u0_TGV="0.032 0.016"
-Amplitude_TGV="0.01 0.005"
+u0_TGV="0.032"
+Amplitude_TGV="0.01"
 
 ##################################################
 #	       Shear Wave Parameter					 #
@@ -36,7 +37,7 @@ ySliceForCalculation=0
 #			PhiAndNu Test Parameter				 #
 ##################################################
 MinOrderOfAccuracy=1.95
-DataToCalcPhiAndNuTest="Vx"
+DataToCalc_PhiAndNu="Vx"
 StartTimeStepCalculation_PhiNu=11
 EndTimeStepCalculation_PhiNu=20
 
@@ -46,8 +47,10 @@ PhiAndNuTest_SW=true
 ##################################################
 #			L2-Norm Test Parameter				 #
 ##################################################
+MaxL2NormDiff=0.1
+DataToCalc_L2="Vx"
 BasicTimeStep_L2=0
-DivergentDataTimeStep_L2=20
+DivergentTimeStep_L2=20
 
 L2NormTest_TGV=true
 L2NormTest_SW=true
@@ -59,13 +62,13 @@ L2NormTest_SW=true
 ##################################################
 TaylorGreenVortex32=true
 TaylorGreenVortex64=true
-TaylorGreenVortex128=true
+TaylorGreenVortex128=false
 TaylorGreenVortex256=false
 TaylorGreenVortex512=false
 
-ShearWave32=true
-ShearWave64=true
-ShearWave128=true
+ShearWave32=false
+ShearWave64=false
+ShearWave128=false
 ShearWave256=false
 ShearWave512=false