diff --git a/targets/tests/NumericalTests/Simulations/ShearWave/InitialConditions/InitialConditionShearWave.cpp b/targets/tests/NumericalTests/Simulations/ShearWave/InitialConditions/InitialConditionShearWave.cpp
index 7adbca0f942e68dae5e9609c6b13fb0a6b90a242..a24b51d2c16986f46b5198f35ee25996eda6845c 100644
--- a/targets/tests/NumericalTests/Simulations/ShearWave/InitialConditions/InitialConditionShearWave.cpp
+++ b/targets/tests/NumericalTests/Simulations/ShearWave/InitialConditions/InitialConditionShearWave.cpp
@@ -1,22 +1,25 @@
 #include "InitialConditionShearWave.h"
 
+#include "Simulations\ShearWave\ShearWaveParameterStruct.h"
+#include "Utilities\Structs\GridInformationStruct.h"
+
 #define _USE_MATH_DEFINES
 #include <math.h>
 
 
-InitialConditionShearWave::InitialConditionShearWave(real lx, real lz, real l0, real u0, real v0, real rho0)
+InitialConditionShearWave::InitialConditionShearWave(std::shared_ptr<ShearWaveParameterStruct> simParaStruct, std::shared_ptr<GridInformationStruct> gridInfoStruct)
 {
-	this->l0 = l0;
+	this->l0 = simParaStruct->l0;
 	this->lx = lx;
 	this->lz = lz;
-	this->rho = rho0;
-	this->u0 = u0;
-	this->v0 = v0;
+	this->rho = simParaStruct->rho0;
+	this->u0 = simParaStruct->ux;
+	this->v0 = simParaStruct->uz;
 }
 
-std::shared_ptr<InitialConditionShearWave> InitialConditionShearWave::getNewInstance(real lx, real lz, real l0, real u0, real v0, real rho0)
+std::shared_ptr<InitialConditionShearWave> InitialConditionShearWave::getNewInstance(std::shared_ptr<ShearWaveParameterStruct> simParaStruct, std::shared_ptr<GridInformationStruct> gridInfoStruct)
 {
-	return std::shared_ptr<InitialConditionShearWave>(new InitialConditionShearWave(lx, lz, l0, u0, v0, rho0));
+	return std::shared_ptr<InitialConditionShearWave>(new InitialConditionShearWave(simParaStruct, gridInfoStruct));
 }
 
 real InitialConditionShearWave::getInitVX(int i, int level)
diff --git a/targets/tests/NumericalTests/Simulations/ShearWave/InitialConditions/InitialConditionShearWave.h b/targets/tests/NumericalTests/Simulations/ShearWave/InitialConditions/InitialConditionShearWave.h
index 5ab93471170015b029003216d03e1d0e0642edb2..f8c98f4271bb15bef1ba5ed9fc419bebb871ad70 100644
--- a/targets/tests/NumericalTests/Simulations/ShearWave/InitialConditions/InitialConditionShearWave.h
+++ b/targets/tests/NumericalTests/Simulations/ShearWave/InitialConditions/InitialConditionShearWave.h
@@ -5,10 +5,13 @@
 
 #include <memory>
 
+struct ShearWaveParameterStruct;
+struct GridInformationStruct;
+
 class InitialConditionShearWave :public InitialConditionImp
 {
 public:
-	static std::shared_ptr< InitialConditionShearWave> getNewInstance(real lx, real lz, real l0, real u0, real v0, real rho0);
+	static std::shared_ptr< InitialConditionShearWave> getNewInstance(std::shared_ptr<ShearWaveParameterStruct> simParaStruct, std::shared_ptr<GridInformationStruct> gridInfoStruct);
 
 	real getInitVX(int i, int level);
 	real getInitVY(int i, int level);
@@ -17,7 +20,7 @@ public:
 	real getInitPRESS(int i, int level);
 
 private:
-	InitialConditionShearWave(real lx, real lz, real l0, real u0, real v0, real rho0);
+	InitialConditionShearWave(std::shared_ptr<ShearWaveParameterStruct> simParaStruct, std::shared_ptr<GridInformationStruct> gridInfoStruct);
 	InitialConditionShearWave() {};
 	
 	real rho;
diff --git a/targets/tests/NumericalTests/Simulations/ShearWave/SimulationParameter/ShearWaveSimulationParameter.cpp b/targets/tests/NumericalTests/Simulations/ShearWave/SimulationParameter/ShearWaveSimulationParameter.cpp
index bbc1c8298a1d82e44743b6970c07cbcabc28dec4..6f2e872b71b682eb7de8baa8ded425c9115273ce 100644
--- a/targets/tests/NumericalTests/Simulations/ShearWave/SimulationParameter/ShearWaveSimulationParameter.cpp
+++ b/targets/tests/NumericalTests/Simulations/ShearWave/SimulationParameter/ShearWaveSimulationParameter.cpp
@@ -32,6 +32,4 @@ ShearWaveSimulationParameter::ShearWaveSimulationParameter(std::string kernelNam
 	oss << parameterStruct->vtkFilePath << "\\ShearWave\\viscosity" << viscosity << "\\ux_" << ux << "_uz_" << uz << "\\" << kernelName << "\\grid" << lx;
 	generateFileDirectionInMyStystem(oss.str());
 	this->filePath = oss.str();
-
-	initialCondition = InitialConditionShearWave::getNewInstance(lx, lz, l0, ux, uz, rho0);
 }
\ No newline at end of file
diff --git a/targets/tests/NumericalTests/Simulations/TaylorGreenVortexUx/InitialConditions/InitialConditionTaylorGreenVortexUx.cpp b/targets/tests/NumericalTests/Simulations/TaylorGreenVortexUx/InitialConditions/InitialConditionTaylorGreenVortexUx.cpp
index f6c5f3cd87eaad28f4306f33058cd856571f88e9..6b2165c59dfb546249062e5b0116bde7f302a74f 100644
--- a/targets/tests/NumericalTests/Simulations/TaylorGreenVortexUx/InitialConditions/InitialConditionTaylorGreenVortexUx.cpp
+++ b/targets/tests/NumericalTests/Simulations/TaylorGreenVortexUx/InitialConditions/InitialConditionTaylorGreenVortexUx.cpp
@@ -1,21 +1,24 @@
 #include "InitialConditionTaylorGreenVortexUx.h"
 
+#include "Simulations\TaylorGreenVortexUx\TaylorGreenVortexUxParameterStruct.h"
+#include "Utilities\Structs\GridInformationStruct.h"
+
 #define _USE_MATH_DEFINES
 #include <math.h>
 
-InitialConditionTaylorGreenUx::InitialConditionTaylorGreenUx(real lx, real lz, real l0, real ux, real amplitude, real rho0)
+InitialConditionTaylorGreenUx::InitialConditionTaylorGreenUx(std::shared_ptr<TaylorGreenVortexUxParameterStruct> simParaStruct, std::shared_ptr<GridInformationStruct>  gridInfoStruct)
 {
-	this->Amp = amplitude;
-	this->L0 = l0;
-	this->Lx = lx;
-	this->Lz = lz;
-	this->rho = rho0;
-	this->ux = ux;
+	this->Amp = simParaStruct->amplitude;
+	this->L0 = simParaStruct->l0;
+	this->Lx = gridInfoStruct->lx;
+	this->Lz = gridInfoStruct->lz;
+	this->rho = simParaStruct->rho0;
+	this->ux = simParaStruct->ux;
 }
 
-std::shared_ptr<InitialConditionTaylorGreenUx> InitialConditionTaylorGreenUx::getNewInstance(real lx, real lz, real l0, real ux, real amplitude, real rho0)
+std::shared_ptr<InitialConditionTaylorGreenUx> InitialConditionTaylorGreenUx::getNewInstance(std::shared_ptr<TaylorGreenVortexUxParameterStruct> simParaStruct, std::shared_ptr<GridInformationStruct>  gridInfoStruct)
 {
-	return std::shared_ptr<InitialConditionTaylorGreenUx>(new InitialConditionTaylorGreenUx(lx, lz, l0, ux, amplitude, rho0));
+	return std::shared_ptr<InitialConditionTaylorGreenUx>(new InitialConditionTaylorGreenUx(simParaStruct, gridInfoStruct));
 }
 
 real InitialConditionTaylorGreenUx::getInitVX(int i, int level)
diff --git a/targets/tests/NumericalTests/Simulations/TaylorGreenVortexUx/InitialConditions/InitialConditionTaylorGreenVortexUx.h b/targets/tests/NumericalTests/Simulations/TaylorGreenVortexUx/InitialConditions/InitialConditionTaylorGreenVortexUx.h
index 7d20de12e83fb72377dfcee6f776501253d15150..7df830d91cb58887fcba81cdc7c52f3af0a259ba 100644
--- a/targets/tests/NumericalTests/Simulations/TaylorGreenVortexUx/InitialConditions/InitialConditionTaylorGreenVortexUx.h
+++ b/targets/tests/NumericalTests/Simulations/TaylorGreenVortexUx/InitialConditions/InitialConditionTaylorGreenVortexUx.h
@@ -5,10 +5,13 @@
 
 #include <memory>
 
-class InitialConditionTaylorGreenUx :public InitialConditionImp
+struct TaylorGreenVortexUxParameterStruct;
+struct GridInformationStruct;
+
+class InitialConditionTaylorGreenUx : public InitialConditionImp
 {
 public:
-	static std::shared_ptr< InitialConditionTaylorGreenUx> getNewInstance(real lx, real lz, real l0, real ux, real amplitude, real rho0);
+	static std::shared_ptr<InitialConditionTaylorGreenUx> getNewInstance(std::shared_ptr<TaylorGreenVortexUxParameterStruct> simParaStruct, std::shared_ptr<GridInformationStruct>  gridInfoStruct);
 
 	real getInitVX(int i, int level);
 	real getInitVY(int i, int level);
@@ -17,7 +20,7 @@ public:
 	real getInitPRESS(int i, int level);
 
 private:
-	InitialConditionTaylorGreenUx(real lx, real lz, real l0, real ux, real amplitude, real rho0);
+	InitialConditionTaylorGreenUx(std::shared_ptr<TaylorGreenVortexUxParameterStruct> simParaStruct, std::shared_ptr<GridInformationStruct>  gridInfoStruct);
 	InitialConditionTaylorGreenUx() {};
 
 	real Amp;
diff --git a/targets/tests/NumericalTests/Simulations/TaylorGreenVortexUx/SimulationParameter/SimulationParameterTaylorGreenVortexUx.cpp b/targets/tests/NumericalTests/Simulations/TaylorGreenVortexUx/SimulationParameter/SimulationParameterTaylorGreenVortexUx.cpp
index 939883dde47a0cc576b57ff04732c94d601a3296..ca5fcc46878e698941c4d6a3e2b42312fda22fc9 100644
--- a/targets/tests/NumericalTests/Simulations/TaylorGreenVortexUx/SimulationParameter/SimulationParameterTaylorGreenVortexUx.cpp
+++ b/targets/tests/NumericalTests/Simulations/TaylorGreenVortexUx/SimulationParameter/SimulationParameterTaylorGreenVortexUx.cpp
@@ -1,8 +1,6 @@
 #include "SimulationParameterTaylorGreenVortexUx.h"
 
-#include "Simulations/TaylorGreenVortexUx/InitialConditions/InitialConditionTaylorGreenVortexUx.h"
 #include "Simulations\TaylorGreenVortexUx\TaylorGreenVortexUxParameterStruct.h"
-
 #include "Utilities\Structs\GridInformationStruct.h"
 
 #include <sstream>
@@ -30,6 +28,4 @@ SimulationParameterTaylorGreenUx::SimulationParameterTaylorGreenUx(std::string k
 	oss << tgvParameterStruct->vtkFilePath << "\\TaylorGreenVortex Ux\\" << viscosity << "\\ux_" << ux << "_amplitude_" << amplitude << "\\" << kernelName << "\\grid" << lx;
 	generateFileDirectionInMyStystem(oss.str());
 	this->filePath = oss.str();
-
-	initialCondition = InitialConditionTaylorGreenUx::getNewInstance(lx, lz, l0, ux, amplitude, rho0);
 }
diff --git a/targets/tests/NumericalTests/Simulations/TaylorGreenVortexUz/InitialConditions/InitialConditionTaylorGreenVortexUz.cpp b/targets/tests/NumericalTests/Simulations/TaylorGreenVortexUz/InitialConditions/InitialConditionTaylorGreenVortexUz.cpp
index 1ea369338ed566d1d64305b8a1719b3c1ce51371..f5d24298a81e7b9ccb7079c237b85922c428927d 100644
--- a/targets/tests/NumericalTests/Simulations/TaylorGreenVortexUz/InitialConditions/InitialConditionTaylorGreenVortexUz.cpp
+++ b/targets/tests/NumericalTests/Simulations/TaylorGreenVortexUz/InitialConditions/InitialConditionTaylorGreenVortexUz.cpp
@@ -1,21 +1,24 @@
 #include "InitialConditionTaylorGreenVortexUz.h"
 
+#include "Simulations\TaylorGreenVortexUz\TaylorGreenVortexUzParameterStruct.h"
+#include "Utilities\Structs\GridInformationStruct.h"
+
 #define _USE_MATH_DEFINES
 #include <math.h>
 
-InitialConditionTaylorGreenUz::InitialConditionTaylorGreenUz(real lx, real lz, real l0, real uz, real amplitude, real rho0)
+InitialConditionTaylorGreenUz::InitialConditionTaylorGreenUz(std::shared_ptr<TaylorGreenVortexUzParameterStruct> simParaStruct, std::shared_ptr<GridInformationStruct> gridInfoStruct)
 {
-	this->Amp = amplitude;
-	this->L0 = l0;
-	this->Lx = lx;
-	this->Lz = lz;
-	this->rho = rho0;
-	this->uz = uz;
+	this->Amp = simParaStruct->amplitude;
+	this->L0 = simParaStruct->l0;
+	this->Lx = gridInfoStruct->lx;
+	this->Lz = gridInfoStruct->lz;
+	this->rho = simParaStruct->rho0;
+	this->uz = simParaStruct->uz;
 }
 
-std::shared_ptr<InitialConditionTaylorGreenUz> InitialConditionTaylorGreenUz::getNewInstance(real lx, real lz, real l0, real uz, real amplitude, real rho0)
+std::shared_ptr<InitialConditionTaylorGreenUz> InitialConditionTaylorGreenUz::getNewInstance(std::shared_ptr<TaylorGreenVortexUzParameterStruct> simParaStruct, std::shared_ptr<GridInformationStruct> gridInfoStruct)
 {
-	return std::shared_ptr<InitialConditionTaylorGreenUz>(new InitialConditionTaylorGreenUz(lx, lz, l0, uz, amplitude, rho0));
+	return std::shared_ptr<InitialConditionTaylorGreenUz>(new InitialConditionTaylorGreenUz(simParaStruct, gridInfoStruct));
 }
 
 real InitialConditionTaylorGreenUz::getInitVX(int i, int level)
diff --git a/targets/tests/NumericalTests/Simulations/TaylorGreenVortexUz/InitialConditions/InitialConditionTaylorGreenVortexUz.h b/targets/tests/NumericalTests/Simulations/TaylorGreenVortexUz/InitialConditions/InitialConditionTaylorGreenVortexUz.h
index 60d69e359cbc572c57b9d4c1d5835919544f3d19..2c901c907c30e72a2ec4b87b044916237f564616 100644
--- a/targets/tests/NumericalTests/Simulations/TaylorGreenVortexUz/InitialConditions/InitialConditionTaylorGreenVortexUz.h
+++ b/targets/tests/NumericalTests/Simulations/TaylorGreenVortexUz/InitialConditions/InitialConditionTaylorGreenVortexUz.h
@@ -5,10 +5,13 @@
 
 #include <memory>
 
+struct TaylorGreenVortexUzParameterStruct;
+struct GridInformationStruct;
+
 class InitialConditionTaylorGreenUz :public InitialConditionImp
 {
 public:
-	static std::shared_ptr< InitialConditionTaylorGreenUz> getNewInstance(real lx, real lz, real l0, real uz, real amplitude, real rho0);
+	static std::shared_ptr< InitialConditionTaylorGreenUz> getNewInstance(std::shared_ptr<TaylorGreenVortexUzParameterStruct> simParaStruct, std::shared_ptr<GridInformationStruct> gridInfoStruct);
 
 	real getInitVX(int i, int level);
 	real getInitVY(int i, int level);
@@ -17,7 +20,7 @@ public:
 	real getInitPRESS(int i, int level);
 
 private:
-	InitialConditionTaylorGreenUz(real lx, real lz, real l0, real u0, real amplitude, real rho0);
+	InitialConditionTaylorGreenUz(std::shared_ptr<TaylorGreenVortexUzParameterStruct> simParaStruct, std::shared_ptr<GridInformationStruct> gridInfoStruct);
 	InitialConditionTaylorGreenUz() {};
 
 	real Amp;
diff --git a/targets/tests/NumericalTests/Simulations/TaylorGreenVortexUz/SimulationParameter/SimulationParameterTaylorGreenVortexUz.cpp b/targets/tests/NumericalTests/Simulations/TaylorGreenVortexUz/SimulationParameter/SimulationParameterTaylorGreenVortexUz.cpp
index f3c99bb94a60aaeb0b920be12bf11b13419223a4..fa9c06b93b0c5df7db958c4acf7b9906cf8f4ae4 100644
--- a/targets/tests/NumericalTests/Simulations/TaylorGreenVortexUz/SimulationParameter/SimulationParameterTaylorGreenVortexUz.cpp
+++ b/targets/tests/NumericalTests/Simulations/TaylorGreenVortexUz/SimulationParameter/SimulationParameterTaylorGreenVortexUz.cpp
@@ -28,6 +28,4 @@ SimulationParameterTaylorGreenUz::SimulationParameterTaylorGreenUz(std::string k
 	oss << tgvParameterStruct->vtkFilePath << "\\TaylorGreenVortex Uz\\viscosity_" << viscosity << "\\uz_" << uz << "_amplitude_" << amplitude << "\\" << kernelName << "\\grid" << lx;
 	generateFileDirectionInMyStystem(oss.str());
 	this->filePath = oss.str();
-
-	initialCondition = InitialConditionTaylorGreenUz::getNewInstance(lx, lz, l0, uz, amplitude, rho0);
-}
+}
\ No newline at end of file
diff --git a/targets/tests/NumericalTests/Utilities/NumericalTestFactory/NumericalTestFactoryImp.cpp b/targets/tests/NumericalTests/Utilities/NumericalTestFactory/NumericalTestFactoryImp.cpp
index 35c4b8111cba9a200083363bd90ebf244bc9faa5..f5fbd64e3e3b601f72b0689ede80b55a71a3315d 100644
--- a/targets/tests/NumericalTests/Utilities/NumericalTestFactory/NumericalTestFactoryImp.cpp
+++ b/targets/tests/NumericalTests/Utilities/NumericalTestFactory/NumericalTestFactoryImp.cpp
@@ -6,20 +6,23 @@
 #include "Utilities\Structs\SimulationDataStruct.h"
 #include "Utilities\Structs\TestSimulationDataStruct.h"
 
-#include "Simulations/TaylorGreenVortexUx/SimulationParameter/SimulationParameterTaylorGreenVortexUx.h"
+#include "Simulations\TaylorGreenVortexUx\AnalyticalResults\AnalyticalResultsTaylorGreenVortexUx.h"
+#include "Simulations\TaylorGreenVortexUx\InitialConditions\InitialConditionTaylorGreenVortexUx.h"
 #include "Simulations/TaylorGreenVortexUx/LogFileInformation/LogFileInformationTaylorGreenVortexUx.h"
 #include "Simulations\TaylorGreenVortexUx\SimulationInfo\SimulationInfoTaylorGreenVortexUx.h"
-#include "Simulations\TaylorGreenVortexUx\AnalyticalResults\AnalyticalResultsTaylorGreenVortexUx.h"
+#include "Simulations/TaylorGreenVortexUx/SimulationParameter/SimulationParameterTaylorGreenVortexUx.h"
 
 #include "Simulations/TaylorGreenVortexUz/SimulationParameter/SimulationParameterTaylorGreenVortexUz.h"
 #include "Simulations/TaylorGreenVortexUz/LogFileInformation/LogFileInformationTaylorGreenvortexUz.h"
 #include "Simulations\TaylorGreenVortexUz\SimulationInfo\SimulationInfoTaylorGreenVortexUz.h"
 #include "Simulations\TaylorGreenVortexUz\AnalyticalResults\AnalyticalResultsTaylorGreenVortexUz.h"
+#include "Simulations\TaylorGreenVortexUz\InitialConditions\InitialConditionTaylorGreenVortexUz.h"
 
 #include "Simulations/ShearWave/SimulationParameter/ShearWaveSimulationParameter.h"
 #include "Simulations/ShearWave/LogFileInformation/ShearWaveLogFileInformation.h"
 #include "Simulations\ShearWave\SimulationInfo\ShearWaveSimulationInfo.h"
 #include "Simulations\ShearWave\AnalyticalResults\ShearWaveAnalyticalResults.h"
+#include "Simulations\ShearWave\InitialConditions\InitialConditionShearWave.h"
 
 #include "Tests/PhiAndNuTest/PhiAndNuTest.h"
 #include "Tests\PhiAndNuTest\LogFileInformation\PhiAndNuLogFileInformation.h"
@@ -167,6 +170,7 @@ std::shared_ptr<SimulationDataStruct> NumericalTestFactoryImp::makeTaylorGreenUx
 	for (int i = 0; i < gridInfoStruct.size(); i++) {
 		std::shared_ptr<TestSimulationDataStruct> aTestSimData = std::shared_ptr<TestSimulationDataStruct> (new TestSimulationDataStruct);
 		aTestSimData->simParameter = SimulationParameterTaylorGreenUx::getNewInstance(kernelName, viscosity, simParaStruct, gridInfoStruct.at(i));
+		aTestSimData->initialCondition = InitialConditionTaylorGreenUx::getNewInstance(simParaStruct, gridInfoStruct.at(i));
 		aTestSimData->simInformation = SimulationInfoTaylorGreenUx::getNewInstance(simID, kernelName, viscosity, simParaStruct, gridInfoStruct.at(i), numberOfSimulations);
 		simID++;
 		aTestSimData->analyticalResult = AnalyticalResultsTaylorGreenUx::getNewInstance(viscosity, simParaStruct);
@@ -184,6 +188,7 @@ std::shared_ptr<SimulationDataStruct> NumericalTestFactoryImp::makeTaylorGreenUz
 	for (int i = 0; i < gridInfoStruct.size(); i++) {
 		std::shared_ptr<TestSimulationDataStruct> aTestSimData = std::shared_ptr<TestSimulationDataStruct>(new TestSimulationDataStruct);
 		aTestSimData->simParameter = SimulationParameterTaylorGreenUz::getNewInstance(kernelName, viscosity, simParaStruct, gridInfoStruct.at(i));
+		aTestSimData->initialCondition = InitialConditionTaylorGreenUz::getNewInstance(simParaStruct, gridInfoStruct.at(i));
 		aTestSimData->simInformation = SimulationInfoTaylorGreenUz::getNewInstance(simID, kernelName, viscosity, simParaStruct, gridInfoStruct.at(i), numberOfSimulations);
 		simID++;
 		aTestSimData->analyticalResult = AnalyticalResultsTaylorGreenUz::getNewInstance(viscosity, simParaStruct);
@@ -201,6 +206,7 @@ std::shared_ptr<SimulationDataStruct> NumericalTestFactoryImp::makeShearWaveSimu
 	for (int i = 0; i < gridInfoStruct.size(); i++) {
 		std::shared_ptr<TestSimulationDataStruct> aTestSimData = std::shared_ptr<TestSimulationDataStruct>(new TestSimulationDataStruct);
 		aTestSimData->simParameter = ShearWaveSimulationParameter::getNewInstance(kernelName, viscosity, simParaStruct, gridInfoStruct.at(i));
+		aTestSimData->initialCondition = InitialConditionShearWave::getNewInstance(simParaStruct, gridInfoStruct.at(i));
 		aTestSimData->simInformation = ShearWaveSimulationInfo::getNewInstance(simID, kernelName, viscosity, simParaStruct, gridInfoStruct.at(i), numberOfSimulations);
 		simID++;
 		aTestSimData->analyticalResult = ShearWaveAnalyticalResults::getNewInstance(viscosity, simParaStruct);
diff --git a/targets/tests/NumericalTests/Utilities/SimulationParameter/SimulationParameter.h b/targets/tests/NumericalTests/Utilities/SimulationParameter/SimulationParameter.h
index 3946792c813c193ae67f7902159c96fd3b23ee68..dccbe04eea4393ddc65396b1ea570f0dc91c310e 100644
--- a/targets/tests/NumericalTests/Utilities/SimulationParameter/SimulationParameter.h
+++ b/targets/tests/NumericalTests/Utilities/SimulationParameter/SimulationParameter.h
@@ -21,11 +21,8 @@ public:
 	virtual std::vector< int> getDevices() = 0;
 	virtual double getMaxVelocity() = 0;
 
-
-
 	virtual unsigned int getLx() = 0;
 	virtual unsigned int getLz() = 0;
-	virtual std::shared_ptr< InitialCondition> getInitialCondition() = 0;
 };
 
 #endif
diff --git a/targets/tests/NumericalTests/Utilities/SimulationParameter/SimulationParameterImp.cpp b/targets/tests/NumericalTests/Utilities/SimulationParameter/SimulationParameterImp.cpp
index 0f1ab8edbdac99fde7b1db7d88ebf8142d4e5ac3..f060eeafc0e9df43e159231597e7aefba086bd87 100644
--- a/targets/tests/NumericalTests/Utilities/SimulationParameter/SimulationParameterImp.cpp
+++ b/targets/tests/NumericalTests/Utilities/SimulationParameter/SimulationParameterImp.cpp
@@ -74,11 +74,6 @@ std::vector<int> SimulationParameterImp::getDevices()
 	return devices;
 }
 
-std::shared_ptr<InitialCondition> SimulationParameterImp::getInitialCondition()
-{
-	return initialCondition;
-}
-
 std::shared_ptr<KernelConfiguration> SimulationParameterImp::getKernelConfiguration()
 {
 	return kernelConfig;
diff --git a/targets/tests/NumericalTests/Utilities/SimulationParameter/SimulationParameterImp.h b/targets/tests/NumericalTests/Utilities/SimulationParameter/SimulationParameterImp.h
index 21fbb78bd5f043aa8a28684e20ed92c639a08355..c50e694f4a3cb7f34d4b8fc63f2b25751e190cea 100644
--- a/targets/tests/NumericalTests/Utilities/SimulationParameter/SimulationParameterImp.h
+++ b/targets/tests/NumericalTests/Utilities/SimulationParameter/SimulationParameterImp.h
@@ -19,9 +19,9 @@ public:
 	unsigned int getTimeStepLength();
 	unsigned int getLx();
 	unsigned int getLz();
-	std::vector< int> getDevices();
-	std::shared_ptr< InitialCondition> getInitialCondition();
-	std::shared_ptr< KernelConfiguration> getKernelConfiguration();
+	std::vector<int> getDevices();
+	
+	std::shared_ptr<KernelConfiguration> getKernelConfiguration();
 
 protected:
 	SimulationParameterImp() {};
@@ -39,8 +39,7 @@ protected:
 	unsigned int maxLevel, numberOfGridLevels;
 	unsigned int timeStepLength;
 
-	std::shared_ptr< InitialCondition> initialCondition;
-	std::shared_ptr< KernelConfiguration> kernelConfig;
+	std::shared_ptr<KernelConfiguration> kernelConfig;
 };
 
 #endif
diff --git a/targets/tests/NumericalTests/Utilities/Structs/TestSimulationDataStruct.h b/targets/tests/NumericalTests/Utilities/Structs/TestSimulationDataStruct.h
index 1744a0a7eee093c015409a6775161273aa30d14b..d09bfcf85e23380c0f48623a5caf8ee2ebfca9d6 100644
--- a/targets/tests/NumericalTests/Utilities/Structs/TestSimulationDataStruct.h
+++ b/targets/tests/NumericalTests/Utilities/Structs/TestSimulationDataStruct.h
@@ -3,14 +3,16 @@
 
 #include <memory>
 
-class SimulationParameter;
-class SimulationInfo;
 class AnalyticalResults;
+class InitialCondition;
+class SimulationInfo;
+class SimulationParameter;
 
 struct TestSimulationDataStruct
 {
-	std::shared_ptr< SimulationParameter> simParameter;
-	std::shared_ptr< SimulationInfo> simInformation;
-	std::shared_ptr< AnalyticalResults> analyticalResult;
+	std::shared_ptr<AnalyticalResults> analyticalResult;
+	std::shared_ptr<InitialCondition> initialCondition;
+	std::shared_ptr<SimulationInfo> simInformation;
+	std::shared_ptr<SimulationParameter> simParameter;
 };
 #endif 
\ No newline at end of file
diff --git a/targets/tests/NumericalTests/Utilities/TestSimulation/TestSimulation.h b/targets/tests/NumericalTests/Utilities/TestSimulation/TestSimulation.h
index 7901442f8d1b05d66343cd0fd44eca3b975c3107..09b3711c95bf67a2489b669a4a1461790a4d842d 100644
--- a/targets/tests/NumericalTests/Utilities/TestSimulation/TestSimulation.h
+++ b/targets/tests/NumericalTests/Utilities/TestSimulation/TestSimulation.h
@@ -6,12 +6,12 @@
 #include <memory>
 
 class AnalyticalResults;
+class InitialCondition;
+class DataWriter;
 class SimulationParameter;
 class SimulationResults;
 class SimulationObserver;
-class DataWriter;
 class Parameter;
-class SimulationInfo;
 
 class TestSimulation
 {
@@ -21,6 +21,7 @@ public:
 
 	virtual std::shared_ptr<SimulationParameter> getSimulationParameter() = 0;
 	virtual std::shared_ptr<DataWriter> getDataWriter() = 0;
+	virtual std::shared_ptr<InitialCondition> getInitialCondition() = 0;
 
 	virtual bool getSimulationRun() = 0;
 	virtual std::shared_ptr<SimulationResults> getSimulationResults() = 0;
diff --git a/targets/tests/NumericalTests/Utilities/TestSimulation/TestSimulationImp.cpp b/targets/tests/NumericalTests/Utilities/TestSimulation/TestSimulationImp.cpp
index ae381841ca0b45a96d3fdb194e56537f0a9ff7f3..2bf6a54af13fbc32872d995852ba65d94da1aa70 100644
--- a/targets/tests/NumericalTests/Utilities/TestSimulation/TestSimulationImp.cpp
+++ b/targets/tests/NumericalTests/Utilities/TestSimulation/TestSimulationImp.cpp
@@ -25,6 +25,7 @@ TestSimulationImp::TestSimulationImp(std::shared_ptr<TestSimulationDataStruct> t
 	this->simPara = testSimData->simParameter;
 	this->simInfo = testSimData->simInformation;
 	this->analyticalResult = testSimData->analyticalResult;
+	this->initialCondition = testSimData->initialCondition;
 	this->simResults = simResults;
 	this->anaResultWriter = anaResultWriter;
 	this->toVectorWriter = toVectorWriter;
@@ -54,6 +55,11 @@ std::shared_ptr<DataWriter> TestSimulationImp::getDataWriter()
 	return toVectorWriter;
 }
 
+std::shared_ptr<InitialCondition> TestSimulationImp::getInitialCondition()
+{
+	return initialCondition;
+}
+
 std::shared_ptr<SimulationInfo> TestSimulationImp::getSimulationInfo()
 {
 	return simInfo;
diff --git a/targets/tests/NumericalTests/Utilities/TestSimulation/TestSimulationImp.h b/targets/tests/NumericalTests/Utilities/TestSimulation/TestSimulationImp.h
index 451bb9b798ddd390ed967c07a096def16e8c7c78..882b9ab857d5e74c3969de5ab44f9d5959ee092c 100644
--- a/targets/tests/NumericalTests/Utilities/TestSimulation/TestSimulationImp.h
+++ b/targets/tests/NumericalTests/Utilities/TestSimulation/TestSimulationImp.h
@@ -21,6 +21,7 @@ public:
 
 	std::shared_ptr< SimulationParameter> getSimulationParameter();
 	std::shared_ptr< DataWriter> getDataWriter();
+	std::shared_ptr<InitialCondition> getInitialCondition();
 	std::shared_ptr<SimulationInfo> getSimulationInfo();
 
 	void registerSimulationObserver(std::shared_ptr< SimulationObserver> simObserver);
@@ -46,6 +47,7 @@ private:
 	double calcAnalyticalResultWriteTime();
 	void writeAnalyticalResultsToVTK();
 
+	std::shared_ptr<InitialCondition> initialCondition;
 	std::shared_ptr<SimulationParameter> simPara;
 	std::shared_ptr<SimulationInfo> simInfo;
 	std::shared_ptr<SimulationResults> simResults;
diff --git a/targets/tests/NumericalTests/Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactoryImp.cpp b/targets/tests/NumericalTests/Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactoryImp.cpp
index 801d2bd826cf58c3e2a2cc998aab4f08705e7a66..c5b67efd3cf23172620e87eeebf4e35ae9e2d7f8 100644
--- a/targets/tests/NumericalTests/Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactoryImp.cpp
+++ b/targets/tests/NumericalTests/Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactoryImp.cpp
@@ -131,8 +131,8 @@ std::vector<std::shared_ptr<VirtualFluidSimulation>> VirtualFluidSimulationFacto
 		vfSim->setParameter(para);
 		testSim.at(i)->setParameter(para);
 
-		initInitialConditions(testSim.at(i)->getSimulationParameter()->getInitialCondition(), para);
-		std::shared_ptr<GridReaderforTesting> grid = makeGridReaderForTesting(testSim.at(i)->getSimulationParameter()->getInitialCondition(), para);
+		initInitialConditions(testSim.at(i)->getInitialCondition(), para);
+		std::shared_ptr<GridReaderforTesting> grid = makeGridReaderForTesting(testSim.at(i)->getInitialCondition(), para);
 		vfSim->setGridProvider(grid);
 
 		vfSim->setDataWriter(testSim.at(i)->getDataWriter());