diff --git a/src/Core/Input/ConfigData/ConfigData.h b/src/Core/Input/ConfigData/ConfigData.h
index 3ea009cb578a84515875e46a8d36db6fd59ab5c6..89f65b0cdad473df7362bec2e31e4451b9539636 100644
--- a/src/Core/Input/ConfigData/ConfigData.h
+++ b/src/Core/Input/ConfigData/ConfigData.h
@@ -22,6 +22,8 @@ public:
 	virtual bool getCalcHighOrderMoments() = 0;
 	virtual bool getReadGeo() = 0;
 	virtual bool getCalcMedian() = 0;
+	virtual bool getCalcDragLift() = 0;
+	virtual bool getCalcCp() = 0;
 	virtual bool getConcFile() = 0;
 	virtual bool getStreetVelocityFile() = 0;
 	virtual bool getUseMeasurePoints() = 0;
@@ -104,6 +106,8 @@ public:
 	virtual bool isCalcHighOrderMomentsInConfigFile() = 0;
 	virtual bool isReadGeoInConfigFile() = 0;
 	virtual bool isCalcMedianInConfigFile() = 0;
+	virtual bool isCalcDragLiftInConfigFile() = 0;
+	virtual bool isCalcCpInConfigFile() = 0;
 	virtual bool isConcFileInConfigFile() = 0;
 	virtual bool isStreetVelocityFileInConfigFile() = 0;
 	virtual bool isUseMeasurePointsInConfigFile() = 0;
diff --git a/src/Core/Input/ConfigData/ConfigDataImp.cpp b/src/Core/Input/ConfigData/ConfigDataImp.cpp
index 0b6b88e91dd12d2acba1027744cc3b2314c36e00..2c512510664af095b93a51bc76b1e9c136aed047 100644
--- a/src/Core/Input/ConfigData/ConfigDataImp.cpp
+++ b/src/Core/Input/ConfigData/ConfigDataImp.cpp
@@ -21,6 +21,8 @@ ConfigDataImp::ConfigDataImp()
 	this->isCalcHighOrderMoments=false;
 	this->isReadGeo=false;
 	this->isCalcMedian=false;
+	this->isCalcDragLift = false;
+	this->isCalcCp = false;
 	this->isConcFile=false;
 	this->isUseMeasurePoints=false;
 	this->isUseWale=false;
@@ -154,6 +156,16 @@ bool ConfigDataImp::getCalcMedian()
 	return this->calcMedian;
 }
 
+bool ConfigDataImp::getCalcDragLift()
+{
+	return this->calcDragLift;
+}
+
+bool ConfigDataImp::getCalcCp()
+{
+	return this->calcCp;
+}
+
 bool ConfigDataImp::getConcFile()
 {
 	return this->concFile;
@@ -557,6 +569,18 @@ void ConfigDataImp::setCalcMedian(bool calcMedian)
 	this->isCalcMedian = true;
 }
 
+void ConfigDataImp::setCalcDragLift(bool calcDragLift)
+{
+	this->calcDragLift = calcDragLift;
+	this->isCalcDragLift = true;
+}
+
+void ConfigDataImp::setCalcCp(bool calcCp)
+{
+	this->calcCp = calcCp;
+	this->isCalcCp = true;
+}
+
 void ConfigDataImp::setConcFile(bool concFile)
 {
 	this->concFile = concFile;
@@ -978,6 +1002,16 @@ bool ConfigDataImp::isCalcMedianInConfigFile()
 	return this->isCalcMedian;
 }
 
+bool ConfigDataImp::isCalcDragLiftInConfigFile()
+{
+	return this->isCalcDragLift;
+}
+
+bool ConfigDataImp::isCalcCpInConfigFile()
+{
+	return this->isCalcCp;
+}
+
 bool ConfigDataImp::isConcFileInConfigFile()
 {
 	return this->isConcFile;
diff --git a/src/Core/Input/ConfigData/ConfigDataImp.h b/src/Core/Input/ConfigData/ConfigDataImp.h
index 99f62fc9b6e5dc2479b7bcfbad6f1fe632799445..f3545e61b41b0df4453f05d679ade4b4b8282c8c 100644
--- a/src/Core/Input/ConfigData/ConfigDataImp.h
+++ b/src/Core/Input/ConfigData/ConfigDataImp.h
@@ -25,6 +25,8 @@ public:
 	bool getCalcHighOrderMoments();
 	bool getReadGeo();
 	bool getCalcMedian();
+	bool getCalcDragLift();
+	bool getCalcCp();
 	bool getConcFile();
 	bool getStreetVelocityFile();
 	bool getUseMeasurePoints();
@@ -107,6 +109,8 @@ public:
 	void setCalcHighOrderMoments(bool calcHighOrderMoment);
 	void setReadGeo(bool readGeo);
 	void setCalcMedian(bool calcMedian);   
+	void setCalcDragLift(bool calcDragLift);
+	void setCalcCp(bool calcCp);
 	void setConcFile(bool concFile);
 	void setStreetVelocityFile(bool streetVelocityFile);
 	void setUseMeasurePoints(bool useMeasurePoints);
@@ -190,6 +194,8 @@ public:
 	bool isCalcHighOrderMomentsInConfigFile();
 	bool isReadGeoInConfigFile();
 	bool isCalcMedianInConfigFile();
+	bool isCalcDragLiftInConfigFile();
+	bool isCalcCpInConfigFile();
 	bool isConcFileInConfigFile();
 	bool isStreetVelocityFileInConfigFile();
 	bool isUseMeasurePointsInConfigFile();
@@ -275,6 +281,8 @@ private:
 	bool calcHighOrderMoments;
 	bool readGeo;
 	bool calcMedian;
+	bool calcDragLift;
+	bool calcCp;
 	bool concFile;
 	bool streetVelocityFile;
 	bool useMeasurePoints;
@@ -358,6 +366,8 @@ private:
 	bool isCalcHighOrderMoments;
 	bool isReadGeo;
 	bool isCalcMedian;
+	bool isCalcDragLift;
+	bool isCalcCp;
 	bool isConcFile;
 	bool isStreetVelocityFile;
 	bool isUseMeasurePoints;
diff --git a/src/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp b/src/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp
index 67c9120cff74b6d7b6e7e2526a5d03f13ec20c4d..440576fe6a309c569b4809cb4eb18f85e5c228a6 100644
--- a/src/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp
+++ b/src/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp
@@ -47,7 +47,7 @@ void updateGrid27(Parameter* para,
 
 	//////////////////////////////////////////////////////////////////////////
 
-    preCollisionBC(para, level);
+    preCollisionBC(para, cudaManager, level, t);
 
     //////////////////////////////////////////////////////////////////////////
 
@@ -225,6 +225,7 @@ void postCollisionBC(Parameter* para, int level, unsigned int t)
         //                para->getParD(level)->coordX_SP,       para->getParD(level)->coordY_SP,    para->getParD(level)->coordZ_SP,
         //                para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
         //getLastCudaError("QVelDev27 execution failed");
+
     }
 
     //////////////////////////////////////////////////////////////////////////
@@ -286,7 +287,26 @@ void postCollisionBC(Parameter* para, int level, unsigned int t)
     //////////////////////////////////////////////////////////////////////////
 
     if (para->getParD(level)->QGeom.kQ > 0)
-    {    
+    {
+		if (para->getCalcDragLift())
+		{
+			//Drag and Lift Part I
+			DragLiftPostD27(para->getParD(level)->d0SP.f[0], 
+			                para->getParD(level)->QGeom.k, 
+			                para->getParD(level)->QGeom.q27[0],
+			                para->getParD(level)->QGeom.kQ, 
+			                para->getParD(level)->DragPostX,
+			                para->getParD(level)->DragPostY,
+			                para->getParD(level)->DragPostZ,
+			                para->getParD(level)->neighborX_SP,
+			                para->getParD(level)->neighborY_SP,
+			                para->getParD(level)->neighborZ_SP,
+			                para->getParD(level)->size_Mat_SP, 
+			                para->getParD(level)->evenOrOdd,
+			                para->getParD(level)->numberofthreads);
+			getLastCudaError("DragLift27 execution failed"); 
+		}
+
         //BBDev27( para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
         //         para->getParD(level)->d0SP.f[0],             para->getParD(level)->QGeom.k,      para->getParD(level)->QGeom.q27[0], 
         //         para->getParD(level)->QGeom.kQ,              para->getParD(level)->QGeom.kQ,     para->getParD(level)->omega,
@@ -380,12 +400,12 @@ void postCollisionBC(Parameter* para, int level, unsigned int t)
 
     if (para->getParD(level)->kPressQ > 0)
     {
-        QPressDev27_IntBB(  para->getParD(level)->numberofthreads, para->getParD(level)->QPress.RhoBC,
-        					para->getParD(level)->d0SP.f[0],       para->getParD(level)->QPress.k,       para->getParD(level)->QPress.q27[0], 
-        					para->getParD(level)->QPress.kQ,       para->getParD(level)->QPress.kQ,      para->getParD(level)->omega,
-        					para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP,   para->getParD(level)->neighborZ_SP,
-        					para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
-        getLastCudaError("QPressDev27_IntBB fine execution failed");
+        //QPressDev27_IntBB(  para->getParD(level)->numberofthreads, para->getParD(level)->QPress.RhoBC,
+        //					para->getParD(level)->d0SP.f[0],       para->getParD(level)->QPress.k,       para->getParD(level)->QPress.q27[0], 
+        //					para->getParD(level)->QPress.kQ,       para->getParD(level)->QPress.kQ,      para->getParD(level)->omega,
+        //					para->getParD(level)->neighborX_SP,    para->getParD(level)->neighborY_SP,   para->getParD(level)->neighborZ_SP,
+        //					para->getParD(level)->size_Mat_SP,     para->getParD(level)->evenOrOdd);
+        //getLastCudaError("QPressDev27_IntBB fine execution failed");
     }
 
     //////////////////////////////////////////////////////////////////////////
@@ -641,7 +661,7 @@ void calcMacroscopicQuantities(Parameter* para, int level)
     getLastCudaError("CalcMacSP27 execution failed"); 
 }
 
-void preCollisionBC(Parameter* para, int level)
+void preCollisionBC(Parameter* para, CudaMemoryManager* cudaManager, int level, unsigned int t)
 {
     //////////////////////////////////////////////////////////////////////////
     // I N F L O W
@@ -686,6 +706,77 @@ void preCollisionBC(Parameter* para, int level)
 
 	if (para->getParD(level)->QGeom.kQ > 0)
 	{
+		if (para->getCalcDragLift())
+		{
+			//Drag and Lift Part II
+			DragLiftPreD27(para->getParD(level)->d0SP.f[0], 
+			               para->getParD(level)->QGeom.k, 
+			               para->getParD(level)->QGeom.q27[0],
+			               para->getParD(level)->QGeom.kQ, 
+			               para->getParD(level)->DragPreX,
+			               para->getParD(level)->DragPreY,
+			               para->getParD(level)->DragPreZ,
+			               para->getParD(level)->neighborX_SP,
+			               para->getParD(level)->neighborY_SP,
+			               para->getParD(level)->neighborZ_SP,
+			               para->getParD(level)->size_Mat_SP, 
+			               para->getParD(level)->evenOrOdd,
+			               para->getParD(level)->numberofthreads);
+			getLastCudaError("DragLift27 execution failed"); 
+			////////////////////////////////////////////////////////////////////////////////
+			//Calculation of Drag and Lift
+			////////////////////////////////////////////////////////////////////////////////
+			calcDragLift(para, cudaManager, level);
+			////////////////////////////////////////////////////////////////////////////////
+		}
+
+		if (para->getCalcCp())
+		{
+			////////////////////////////////////////////////////////////////////////////////
+			//Calculation of cp
+			////////////////////////////////////////////////////////////////////////////////
+
+			if(t > para->getTStartOut())
+			{
+                ////////////////////////////////////////////////////////////////////////////////
+                CalcCPtop27(para->getParD(level)->d0SP.f[0], 
+                            para->getParD(level)->cpTopIndex, 
+                            para->getParD(level)->numberOfPointsCpTop, 
+                            para->getParD(level)->cpPressTop,
+                            para->getParD(level)->neighborX_SP,
+                            para->getParD(level)->neighborY_SP,
+                            para->getParD(level)->neighborZ_SP,
+                            para->getParD(level)->size_Mat_SP, 
+                            para->getParD(level)->evenOrOdd,
+                            para->getParD(level)->numberofthreads);
+                //////////////////////////////////////////////////////////////////////////////////
+                CalcCPbottom27(para->getParD(level)->d0SP.f[0],
+                               para->getParD(level)->cpBottomIndex, 
+                               para->getParD(level)->numberOfPointsCpBottom, 
+                               para->getParD(level)->cpPressBottom,
+                               para->getParD(level)->neighborX_SP,
+                               para->getParD(level)->neighborY_SP,
+                               para->getParD(level)->neighborZ_SP,
+                               para->getParD(level)->size_Mat_SP, 
+                               para->getParD(level)->evenOrOdd,
+                               para->getParD(level)->numberofthreads);
+                //////////////////////////////////////////////////////////////////////////////////
+                CalcCPbottom27(para->getParD(level)->d0SP.f[0],
+                               para->getParD(level)->cpBottom2Index, 
+                               para->getParD(level)->numberOfPointsCpBottom2, 
+                               para->getParD(level)->cpPressBottom2,
+                               para->getParD(level)->neighborX_SP,
+                               para->getParD(level)->neighborY_SP,
+                               para->getParD(level)->neighborZ_SP,
+                               para->getParD(level)->size_Mat_SP, 
+                               para->getParD(level)->evenOrOdd,
+                               para->getParD(level)->numberofthreads);
+                //////////////////////////////////////////////////////////////////////////////////
+                calcCp(para, cudaManager, level);
+			}
+		}
+
+
 		////////////////////////////////////////////////////////////////////////////////
 		// high viscosity incompressible
 		//QDevIncompHighNu27( para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
@@ -1835,7 +1926,7 @@ void updateGrid27(Parameter* para, Communicator* comm, CudaMemoryManager* cudaMa
 		//				 para->getParD(level)->size_Mat_SP, 
 		//				 para->getParD(level)->evenOrOdd,
 		//				 para->getParD(level)->numberofthreads);
-		//getLastCudaError("DragLift27 execution failed"); 
+		//getLastCudaError("DragLift27 execution failed");  
 		//  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //   BBDev27( para->getParD(level)->numberofthreads,       para->getParD(level)->nx,           para->getParD(level)->ny,
        //            para->getParD(level)->d0SP.f[0],             para->getParD(level)->QGeom.k,      para->getParD(level)->QGeom.q27[0], 
@@ -1959,6 +2050,7 @@ void updateGrid27(Parameter* para, Communicator* comm, CudaMemoryManager* cudaMa
 			// getLastCudaError("QDevComp27 (Geom) execution failed");
 		 //}
 		 //////////////////////////////////////////////////////////////////////////////////
+ 
 
 		 //////////////////////////////////////////////////////////////////////////////////
 		 ////Calculation of cp
diff --git a/src/VirtualFluids_GPU/Parameter/Parameter.cpp b/src/VirtualFluids_GPU/Parameter/Parameter.cpp
index 3d3c0108bc5092ed798ac449a484167709464bb1..c3d63e85cda96c8e732b5a94b71c0f1b7c88ec1c 100644
--- a/src/VirtualFluids_GPU/Parameter/Parameter.cpp
+++ b/src/VirtualFluids_GPU/Parameter/Parameter.cpp
@@ -96,6 +96,16 @@ Parameter::Parameter(SPtr<ConfigData> configData, Communicator* comm)
 	else
 		this->setCalcMedian(false);
 	//////////////////////////////////////////////////////////////////////////
+	if (configData->isCalcDragLiftInConfigFile())
+		this->setCalcDragLift(configData->getCalcDragLift());
+	else
+		this->setCalcDragLift(false);
+	//////////////////////////////////////////////////////////////////////////
+	if (configData->isCalcCpInConfigFile())
+		this->setCalcCp(configData->getCalcCp());
+	else
+		this->setCalcCp(false);
+	//////////////////////////////////////////////////////////////////////////
 	if (configData->isConcFileInConfigFile())
 		this->setConcFile(configData->getConcFile());
 	else
@@ -3452,6 +3462,14 @@ void Parameter::setCalcMedian(bool calcMedian)
 {
 	ic.calcMedian = calcMedian;
 }
+void Parameter::setCalcDragLift(bool calcDragLift)
+{
+	this->calcDragLift = calcDragLift;
+}
+void Parameter::setCalcCp(bool calcCp)
+{
+	this->calcCp = calcCp;
+}
 void Parameter::setTimeCalcMedStart(int CalcMedStart)
 {
 	ic.tCalcMedStart = CalcMedStart;
@@ -4433,6 +4451,14 @@ bool Parameter::getCalcMedian()
 {
 	return ic.calcMedian;
 }
+bool Parameter::getCalcDragLift()
+{
+	return this->calcDragLift;
+}
+bool Parameter::getCalcCp()
+{
+	return this->calcCp;
+}
 bool Parameter::getCalcParticle()
 {
 	return this->calcParticles;
diff --git a/src/VirtualFluids_GPU/Parameter/Parameter.h b/src/VirtualFluids_GPU/Parameter/Parameter.h
index 45c45268a586ad7c10bc3cc8def89527fc683191..0cf62b35d24fe3797f84ec703202d5f7c6e5545f 100644
--- a/src/VirtualFluids_GPU/Parameter/Parameter.h
+++ b/src/VirtualFluids_GPU/Parameter/Parameter.h
@@ -619,6 +619,8 @@ public:
 	void setTStartOut(unsigned int tStartOut);
 	void setTimestepOfCoarseLevel(unsigned int timestep);
 	void setCalcMedian(bool calcMedian);
+	void setCalcDragLift(bool calcDragLift);
+	void setCalcCp(bool calcCp);
 	void setTimeCalcMedStart(int CalcMedStart);
 	void setTimeCalcMedEnd(int CalcMedEnd);
 	void setMaxDev(int maxdev);
@@ -812,6 +814,8 @@ public:
 	bool getPrintFiles();
 	bool getReadGeo();
 	bool getCalcMedian();
+	bool getCalcDragLift();
+	bool getCalcCp();
 	bool getCalcParticle();
 	int getFine();
 	int getCoarse();
@@ -1023,6 +1027,7 @@ private:
 	bool compOn;
 	bool diffOn;
 	bool isF3;
+	bool calcDragLift, calcCp;
 	int diffMod;
 	int coarse, fine, maxlevel;
 	int factor_gridNZ;