diff --git a/src/gpu/GksGpu/Analyzer/ConvergenceAnalyzer.h b/src/gpu/GksGpu/Analyzer/ConvergenceAnalyzer.h
index ae9a540986bde1a43515be38d6a0d6337e17bf19..c217227a33a9936003c347bdad73fa053c69b1fd 100644
--- a/src/gpu/GksGpu/Analyzer/ConvergenceAnalyzer.h
+++ b/src/gpu/GksGpu/Analyzer/ConvergenceAnalyzer.h
@@ -15,7 +15,7 @@ namespace GksGpu {
 
 struct DataBase;
 
-class VF_PUBLIC ConvergenceAnalyzer
+class VIRTUALFLUIDS_GPU_EXPORT ConvergenceAnalyzer
 {
 private:
 
diff --git a/src/gpu/GksGpu/Analyzer/CupsAnalyzer.h b/src/gpu/GksGpu/Analyzer/CupsAnalyzer.h
index 41f06d32eb084354bff1e64936f75f44ff3bbd06..5438679c887d0f6f50c9cfed7b2cfd08ced93741 100644
--- a/src/gpu/GksGpu/Analyzer/CupsAnalyzer.h
+++ b/src/gpu/GksGpu/Analyzer/CupsAnalyzer.h
@@ -13,7 +13,7 @@ namespace GksGpu {
 
 struct DataBase;
 
-class VF_PUBLIC CupsAnalyzer
+class VIRTUALFLUIDS_GPU_EXPORT CupsAnalyzer
 {
 private:
     SPtr<Timer> timer;
diff --git a/src/gpu/GksGpu/Analyzer/EnstrophyAnalyzer.h b/src/gpu/GksGpu/Analyzer/EnstrophyAnalyzer.h
index 259362d78acc84b743412f688f5f7f9ed1fcb10a..16ffbeee7873f8e3f4d3d50f46926050d05db261 100644
--- a/src/gpu/GksGpu/Analyzer/EnstrophyAnalyzer.h
+++ b/src/gpu/GksGpu/Analyzer/EnstrophyAnalyzer.h
@@ -17,7 +17,7 @@ namespace GksGpu {
 
 struct DataBase;
 
-class VF_PUBLIC EnstrophyAnalyzer
+class VIRTUALFLUIDS_GPU_EXPORT EnstrophyAnalyzer
 {
 private:
 
diff --git a/src/gpu/GksGpu/Analyzer/HeatFluxAnalyzer.h b/src/gpu/GksGpu/Analyzer/HeatFluxAnalyzer.h
index fcdeb82a661f398be0d13017f2715ea8fc3486d4..5e990ed6760c729e1032f34425e868bdd2cce77a 100644
--- a/src/gpu/GksGpu/Analyzer/HeatFluxAnalyzer.h
+++ b/src/gpu/GksGpu/Analyzer/HeatFluxAnalyzer.h
@@ -19,7 +19,7 @@ namespace GksGpu {
 
 struct DataBase;
 
-class VF_PUBLIC HeatFluxAnalyzer
+class VIRTUALFLUIDS_GPU_EXPORT HeatFluxAnalyzer
 {
 private:
 
diff --git a/src/gpu/GksGpu/Analyzer/KineticEnergyAnalyzer.h b/src/gpu/GksGpu/Analyzer/KineticEnergyAnalyzer.h
index d8c25160fa1cc9cf0dfce9d3a96dd50529de91cf..eb266ea5a00b7f9d9832da99990f134ce3925046 100644
--- a/src/gpu/GksGpu/Analyzer/KineticEnergyAnalyzer.h
+++ b/src/gpu/GksGpu/Analyzer/KineticEnergyAnalyzer.h
@@ -15,7 +15,7 @@ namespace GksGpu {
 
 struct DataBase;
 
-class VF_PUBLIC KineticEnergyAnalyzer
+class VIRTUALFLUIDS_GPU_EXPORT KineticEnergyAnalyzer
 {
 private:
 
diff --git a/src/gpu/GksGpu/Analyzer/PointTimeSeriesAnalyzer.h b/src/gpu/GksGpu/Analyzer/PointTimeSeriesAnalyzer.h
index 013c0be3c1ce209dddbf9eb30e3ca9c08d2b8f1a..9fbeeeca3fce4287ffe3821d01f40f18c872048b 100644
--- a/src/gpu/GksGpu/Analyzer/PointTimeSeriesAnalyzer.h
+++ b/src/gpu/GksGpu/Analyzer/PointTimeSeriesAnalyzer.h
@@ -29,7 +29,7 @@ struct PointTimeSeriesAnalyzerStruct
     uint cellIndex;
 };
 
-class VF_PUBLIC PointTimeSeriesAnalyzer
+class VIRTUALFLUIDS_GPU_EXPORT PointTimeSeriesAnalyzer
 {
 public:
 
diff --git a/src/gpu/GksGpu/Analyzer/PointTimeSeriesCollector.h b/src/gpu/GksGpu/Analyzer/PointTimeSeriesCollector.h
index 36436222031d85a77a5beec692968e41e48c08f2..022bd46c471436e5028c84023138f46eee9eb082 100644
--- a/src/gpu/GksGpu/Analyzer/PointTimeSeriesCollector.h
+++ b/src/gpu/GksGpu/Analyzer/PointTimeSeriesCollector.h
@@ -20,7 +20,7 @@ class  PointTimeSeriesAnalyzer;
 struct DataBase;
 struct Parameters;
 
-class VF_PUBLIC PointTimeSeriesCollector
+class VIRTUALFLUIDS_GPU_EXPORT PointTimeSeriesCollector
 {
 public:
 
diff --git a/src/gpu/GksGpu/Analyzer/TurbulenceAnalyzer.h b/src/gpu/GksGpu/Analyzer/TurbulenceAnalyzer.h
index b7686496c3895daf1f100cd9769e5a1948950dfb..553183f7bfc1908e26eddb466cad44ad77bd15e7 100644
--- a/src/gpu/GksGpu/Analyzer/TurbulenceAnalyzer.h
+++ b/src/gpu/GksGpu/Analyzer/TurbulenceAnalyzer.h
@@ -39,7 +39,7 @@ struct TurbulenceAnalyzerStruct
     real* p ;
 };
 
-class VF_PUBLIC TurbulenceAnalyzer
+class VIRTUALFLUIDS_GPU_EXPORT TurbulenceAnalyzer
 {
 private:
 
diff --git a/src/gpu/GksGpu/BoundaryConditions/AdiabaticWall.h b/src/gpu/GksGpu/BoundaryConditions/AdiabaticWall.h
index 55cabf1b117f0e761b3afa601c670816843c5285..a171cc9f4c3d03c6de62faa85d25d3c9f625be46 100644
--- a/src/gpu/GksGpu/BoundaryConditions/AdiabaticWall.h
+++ b/src/gpu/GksGpu/BoundaryConditions/AdiabaticWall.h
@@ -26,7 +26,7 @@ struct AdiabaticWallStruct
     bool useSecondCells;
 };
 
-struct VF_PUBLIC AdiabaticWall : public BoundaryCondition //, public IsothermalWallStruct
+struct VIRTUALFLUIDS_GPU_EXPORT AdiabaticWall : public BoundaryCondition //, public IsothermalWallStruct
 {
     Vec3 velocity;
 
diff --git a/src/gpu/GksGpu/BoundaryConditions/BoundaryCondition.h b/src/gpu/GksGpu/BoundaryConditions/BoundaryCondition.h
index 70be3a6a0269abe72836ab94d75a79330b9da7bf..15c36c0ffe63df5082ef01ec77bf554b8387f6c6 100644
--- a/src/gpu/GksGpu/BoundaryConditions/BoundaryCondition.h
+++ b/src/gpu/GksGpu/BoundaryConditions/BoundaryCondition.h
@@ -30,7 +30,7 @@ struct BoundaryConditionStruct
     uint* secondCells;
 };
 
-struct VF_PUBLIC BoundaryCondition : virtual public BoundaryConditionStruct, public std::enable_shared_from_this<BoundaryCondition>
+struct VIRTUALFLUIDS_GPU_EXPORT BoundaryCondition : virtual public BoundaryConditionStruct, public std::enable_shared_from_this<BoundaryCondition>
 {
     SPtr<DataBaseAllocator> myAllocator;
 
diff --git a/src/gpu/GksGpu/BoundaryConditions/ConcreteHeatFlux.h b/src/gpu/GksGpu/BoundaryConditions/ConcreteHeatFlux.h
index 899e82eb15d401adf7eca0ddcbed387800aaa556..af5c6376eb2de435dc0f7d7e2e83f70a1e8f4f15 100644
--- a/src/gpu/GksGpu/BoundaryConditions/ConcreteHeatFlux.h
+++ b/src/gpu/GksGpu/BoundaryConditions/ConcreteHeatFlux.h
@@ -39,7 +39,7 @@ struct ConcreteHeatFluxStruct
     real ambientTemperature;
 };
 
-struct VF_PUBLIC ConcreteHeatFlux : public BoundaryCondition //, public IsothermalWallStruct
+struct VIRTUALFLUIDS_GPU_EXPORT ConcreteHeatFlux : public BoundaryCondition //, public IsothermalWallStruct
 {
     real* temperatures;
 
diff --git a/src/gpu/GksGpu/BoundaryConditions/CreepingMassFlux.h b/src/gpu/GksGpu/BoundaryConditions/CreepingMassFlux.h
index 7f60f7a8806d9043db0ddb1a16f5723672f24a74..7ac9692f1989d6e58007ed6c43fa439045d08a43 100644
--- a/src/gpu/GksGpu/BoundaryConditions/CreepingMassFlux.h
+++ b/src/gpu/GksGpu/BoundaryConditions/CreepingMassFlux.h
@@ -28,7 +28,7 @@ struct CreepingMassFluxStruct
     real lambda;
 };
 
-struct VF_PUBLIC CreepingMassFlux : public BoundaryCondition //, public IsothermalWallStruct
+struct VIRTUALFLUIDS_GPU_EXPORT CreepingMassFlux : public BoundaryCondition //, public IsothermalWallStruct
 {
     real rho;
     real velocity;
diff --git a/src/gpu/GksGpu/BoundaryConditions/Extrapolation.h b/src/gpu/GksGpu/BoundaryConditions/Extrapolation.h
index c089085c09f10eef4b269cb7084d7e9720547cf9..101f0296a1efb8a49568b64bc868cd80938560e1 100644
--- a/src/gpu/GksGpu/BoundaryConditions/Extrapolation.h
+++ b/src/gpu/GksGpu/BoundaryConditions/Extrapolation.h
@@ -22,7 +22,7 @@ struct ExtrapolationStruct
     uint* secondCells;
 };
 
-struct VF_PUBLIC Extrapolation : public BoundaryCondition //, public IsothermalWallStruct
+struct VIRTUALFLUIDS_GPU_EXPORT Extrapolation : public BoundaryCondition //, public IsothermalWallStruct
 {
     Extrapolation( SPtr<DataBase> dataBase );
 
diff --git a/src/gpu/GksGpu/BoundaryConditions/HeatFlux.h b/src/gpu/GksGpu/BoundaryConditions/HeatFlux.h
index ec3ee0b438ee0bfd0f307a34f7b127601ea7042c..f4cfce3abcc6c60f3749b7c8d355f93b0807fcd2 100644
--- a/src/gpu/GksGpu/BoundaryConditions/HeatFlux.h
+++ b/src/gpu/GksGpu/BoundaryConditions/HeatFlux.h
@@ -26,7 +26,7 @@ struct HeatFluxStruct
     real HRRPUA;
 };
 
-struct VF_PUBLIC HeatFlux : public BoundaryCondition //, public IsothermalWallStruct
+struct VIRTUALFLUIDS_GPU_EXPORT HeatFlux : public BoundaryCondition //, public IsothermalWallStruct
 {
     real HRRPUA;
 
diff --git a/src/gpu/GksGpu/BoundaryConditions/Inflow.h b/src/gpu/GksGpu/BoundaryConditions/Inflow.h
index 27eb602df1996eaafe41d08c04639889b4266bfb..637323f42fffb5434bc25f970921813e39923c81 100644
--- a/src/gpu/GksGpu/BoundaryConditions/Inflow.h
+++ b/src/gpu/GksGpu/BoundaryConditions/Inflow.h
@@ -30,7 +30,7 @@ struct InflowStruct
     real a0, a1, a2;
 };
 
-struct VF_PUBLIC Inflow : public BoundaryCondition //, public IsothermalWallStruct
+struct VIRTUALFLUIDS_GPU_EXPORT Inflow : public BoundaryCondition //, public IsothermalWallStruct
 {
     Vec3 velocity;
     real lambda;
diff --git a/src/gpu/GksGpu/BoundaryConditions/InflowComplete.h b/src/gpu/GksGpu/BoundaryConditions/InflowComplete.h
index 04eead9f4e7a9caf5b081ab64913d3bbe147e83d..112a4ab3b5c7aa2ce900b3ac8262b4a9694aef28 100644
--- a/src/gpu/GksGpu/BoundaryConditions/InflowComplete.h
+++ b/src/gpu/GksGpu/BoundaryConditions/InflowComplete.h
@@ -26,7 +26,7 @@ struct InflowCompleteStruct
     PrimitiveVariables prim;
 };
 
-struct VF_PUBLIC InflowComplete : public BoundaryCondition //, public IsothermalWallStruct
+struct VIRTUALFLUIDS_GPU_EXPORT InflowComplete : public BoundaryCondition //, public IsothermalWallStruct
 {
     PrimitiveVariables prim;
 
diff --git a/src/gpu/GksGpu/BoundaryConditions/IsothermalWall.h b/src/gpu/GksGpu/BoundaryConditions/IsothermalWall.h
index b6db014598e4041214e3441cf3d49b0fb3c72a16..2d474cc891090a370133c1a39de5cb25b1abf4f0 100644
--- a/src/gpu/GksGpu/BoundaryConditions/IsothermalWall.h
+++ b/src/gpu/GksGpu/BoundaryConditions/IsothermalWall.h
@@ -29,7 +29,7 @@ struct IsothermalWallStruct
     bool useSecondCells;
 };
 
-struct VF_PUBLIC IsothermalWall : public BoundaryCondition //, public IsothermalWallStruct
+struct VIRTUALFLUIDS_GPU_EXPORT IsothermalWall : public BoundaryCondition //, public IsothermalWallStruct
 {
     Vec3 velocity;
     real lambda;
diff --git a/src/gpu/GksGpu/BoundaryConditions/MassCompensation.h b/src/gpu/GksGpu/BoundaryConditions/MassCompensation.h
index 3a10a2e48bf5f1d2580ff4b2f58bbf1e773af079..21f04c256cbe305a78c862f3dd6c733cf07f8c06 100644
--- a/src/gpu/GksGpu/BoundaryConditions/MassCompensation.h
+++ b/src/gpu/GksGpu/BoundaryConditions/MassCompensation.h
@@ -28,7 +28,7 @@ struct MassCompensationStruct
     real lambda;
 };
 
-struct VF_PUBLIC MassCompensation : public BoundaryCondition //, public IsothermalWallStruct
+struct VIRTUALFLUIDS_GPU_EXPORT MassCompensation : public BoundaryCondition //, public IsothermalWallStruct
 {
     real rho;
     real velocity;
diff --git a/src/gpu/GksGpu/BoundaryConditions/Open.h b/src/gpu/GksGpu/BoundaryConditions/Open.h
index 9630c7fdb738b4a46449e072bf0cbee55f69fa69..6c6862bf6074b7ee83fbd75267a87605982fde1a 100644
--- a/src/gpu/GksGpu/BoundaryConditions/Open.h
+++ b/src/gpu/GksGpu/BoundaryConditions/Open.h
@@ -28,7 +28,7 @@ struct OpenStruct
     real velocityLimiter;
 };
 
-struct VF_PUBLIC Open : public BoundaryCondition //, public IsothermalWallStruct
+struct VIRTUALFLUIDS_GPU_EXPORT Open : public BoundaryCondition //, public IsothermalWallStruct
 {
     PrimitiveVariables prim;
 
diff --git a/src/gpu/GksGpu/BoundaryConditions/PassiveScalarDiriclet.h b/src/gpu/GksGpu/BoundaryConditions/PassiveScalarDiriclet.h
index c4cbeac9d0e943f6e4c58ee4689b132e00e4a82a..ef9cadf18443f7a224a2fc9124f97bb2293de7e7 100644
--- a/src/gpu/GksGpu/BoundaryConditions/PassiveScalarDiriclet.h
+++ b/src/gpu/GksGpu/BoundaryConditions/PassiveScalarDiriclet.h
@@ -32,7 +32,7 @@ struct PassiveScalarDiricletStruct
     real S_2;
 };
 
-struct VF_PUBLIC PassiveScalarDiriclet : public BoundaryCondition
+struct VIRTUALFLUIDS_GPU_EXPORT PassiveScalarDiriclet : public BoundaryCondition
 {
     real S_1;
     real S_2;
diff --git a/src/gpu/GksGpu/BoundaryConditions/Periodic.h b/src/gpu/GksGpu/BoundaryConditions/Periodic.h
index 73ff2242e3a80acb4e73138adaf9ba5b9b510963..61f5ecf88c13d440b5b721dfc6cf5bf900dcde1a 100644
--- a/src/gpu/GksGpu/BoundaryConditions/Periodic.h
+++ b/src/gpu/GksGpu/BoundaryConditions/Periodic.h
@@ -13,7 +13,7 @@
 
 namespace GksGpu{
 
-struct VF_PUBLIC Periodic : public BoundaryCondition
+struct VIRTUALFLUIDS_GPU_EXPORT Periodic : public BoundaryCondition
 {
     Periodic( SPtr<DataBase> dataBase ) : BoundaryCondition( dataBase ){}
 
diff --git a/src/gpu/GksGpu/BoundaryConditions/Pressure.h b/src/gpu/GksGpu/BoundaryConditions/Pressure.h
index 5e302b60e3ea1bb196b84d324fb82c302782572d..0eca81ca45fd020b29cf662fe2977bef6c287f44 100644
--- a/src/gpu/GksGpu/BoundaryConditions/Pressure.h
+++ b/src/gpu/GksGpu/BoundaryConditions/Pressure.h
@@ -31,7 +31,7 @@ struct PressureStruct
     real p0;
 };
 
-struct VF_PUBLIC Pressure : public BoundaryCondition
+struct VIRTUALFLUIDS_GPU_EXPORT Pressure : public BoundaryCondition
 {
     real p0;
 
diff --git a/src/gpu/GksGpu/BoundaryConditions/Pressure2.h b/src/gpu/GksGpu/BoundaryConditions/Pressure2.h
index 5861083271841d563b0012789f6cd001c179fbfa..cad4376520d46e7565d61065ea2fba08e1679aa9 100644
--- a/src/gpu/GksGpu/BoundaryConditions/Pressure2.h
+++ b/src/gpu/GksGpu/BoundaryConditions/Pressure2.h
@@ -31,7 +31,7 @@ struct Pressure2Struct
     real p0;
 };
 
-struct VF_PUBLIC Pressure2 : public BoundaryCondition
+struct VIRTUALFLUIDS_GPU_EXPORT Pressure2 : public BoundaryCondition
 {
     real p0;
 
diff --git a/src/gpu/GksGpu/BoundaryConditions/SalinasVazquez.h b/src/gpu/GksGpu/BoundaryConditions/SalinasVazquez.h
index 6e0f639067adefd82bb7780abaddd7d2a38636f5..f0ce0fa8ac2b22c0416428c1b6c040972aeddf80 100644
--- a/src/gpu/GksGpu/BoundaryConditions/SalinasVazquez.h
+++ b/src/gpu/GksGpu/BoundaryConditions/SalinasVazquez.h
@@ -29,7 +29,7 @@ struct SalinasVazquezStruct
     bool useSecondCells;
 };
 
-struct VF_PUBLIC SalinasVazquez : public BoundaryCondition //, public IsothermalWallStruct
+struct VIRTUALFLUIDS_GPU_EXPORT SalinasVazquez : public BoundaryCondition //, public IsothermalWallStruct
 {
     real lambdaMX;
     real lambdaPX;
diff --git a/src/gpu/GksGpu/BoundaryConditions/Symmetry.h b/src/gpu/GksGpu/BoundaryConditions/Symmetry.h
index 84385e0ac77cff70c121641fde740c177acca6e9..db3dee0cd71545cb8ce81a951e713390cdfe9f87 100644
--- a/src/gpu/GksGpu/BoundaryConditions/Symmetry.h
+++ b/src/gpu/GksGpu/BoundaryConditions/Symmetry.h
@@ -24,7 +24,7 @@ struct SymmetryStruct
     char direction;
 };
 
-struct VF_PUBLIC Symmetry : public BoundaryCondition //, public IsothermalWallStruct
+struct VIRTUALFLUIDS_GPU_EXPORT Symmetry : public BoundaryCondition //, public IsothermalWallStruct
 {
     char direction;
 
diff --git a/src/gpu/GksGpu/CellUpdate/CellUpdate.h b/src/gpu/GksGpu/CellUpdate/CellUpdate.h
index a64613bbe6ec8d5ee676c6662cdcb895cb58267e..25f2a838e6944d2498e5b37558c17ef6abc39995 100644
--- a/src/gpu/GksGpu/CellUpdate/CellUpdate.h
+++ b/src/gpu/GksGpu/CellUpdate/CellUpdate.h
@@ -11,7 +11,7 @@
 
 namespace GksGpu {
 
-class VF_PUBLIC CellUpdate
+class VIRTUALFLUIDS_GPU_EXPORT CellUpdate
 {
 public:
 
diff --git a/src/gpu/GksGpu/Communication/Communicator.h b/src/gpu/GksGpu/Communication/Communicator.h
index 6aa564ae602427e3c83d34ec5cf4343574095ae8..ecb7953e17f14c6edd572812b6e2ed54e985551a 100644
--- a/src/gpu/GksGpu/Communication/Communicator.h
+++ b/src/gpu/GksGpu/Communication/Communicator.h
@@ -19,7 +19,7 @@ namespace GksGpu {
 class  DataBaseAllocator;
 struct DataBase;
 
-struct VF_PUBLIC Communicator : public std::enable_shared_from_this<Communicator>
+struct VIRTUALFLUIDS_GPU_EXPORT Communicator : public std::enable_shared_from_this<Communicator>
 {
     SPtr<DataBaseAllocator> myAllocator;
 
diff --git a/src/gpu/GksGpu/Communication/MpiUtility.h b/src/gpu/GksGpu/Communication/MpiUtility.h
index 6fbab567aea127937a6c87f09c09f939af103750..eaf565365919abb158f9d95dac3ed2a49923e569 100644
--- a/src/gpu/GksGpu/Communication/MpiUtility.h
+++ b/src/gpu/GksGpu/Communication/MpiUtility.h
@@ -16,7 +16,7 @@ namespace GksGpu {
 class  DataBaseAllocator;
 struct DataBase;
 
-struct VF_PUBLIC MpiUtility
+struct VIRTUALFLUIDS_GPU_EXPORT MpiUtility
 {
     static int getMpiRankBeforeInit();
 
diff --git a/src/gpu/GksGpu/CudaUtility/CudaUtility.h b/src/gpu/GksGpu/CudaUtility/CudaUtility.h
index 2eb425e7c9276fc2b754eee4c8d78bc0d49c4981..8bd8dde046b691a362879278a2130ec623f49153 100644
--- a/src/gpu/GksGpu/CudaUtility/CudaUtility.h
+++ b/src/gpu/GksGpu/CudaUtility/CudaUtility.h
@@ -10,7 +10,7 @@
 
 namespace GksGpu {
 
-class VF_PUBLIC CudaUtility
+class VIRTUALFLUIDS_GPU_EXPORT CudaUtility
 {
 public:
 
diff --git a/src/gpu/GksGpu/DataBase/DataBase.h b/src/gpu/GksGpu/DataBase/DataBase.h
index 449e1f49b2f83143a6243cbda415226c3f288561..4ecc2768a1d5947f602a6bafe4d83ced98660e28 100644
--- a/src/gpu/GksGpu/DataBase/DataBase.h
+++ b/src/gpu/GksGpu/DataBase/DataBase.h
@@ -28,7 +28,7 @@ struct PerLevelCounts;
 struct DataBaseStruct;
 struct Communicator;
 
-struct VF_PUBLIC DataBase : public std::enable_shared_from_this<DataBase>
+struct VIRTUALFLUIDS_GPU_EXPORT DataBase : public std::enable_shared_from_this<DataBase>
 {
     //////////////////////////////////////////////////////////////////////////
     // Management
@@ -147,7 +147,7 @@ struct VF_PUBLIC DataBase : public std::enable_shared_from_this<DataBase>
     std::string getDeviceType();
 };
 
-struct VF_PUBLIC PerLevelCounts
+struct VIRTUALFLUIDS_GPU_EXPORT PerLevelCounts
 {
     uint numberOfCells;
     uint startOfCells;
diff --git a/src/gpu/GksGpu/DataBase/DataBaseAllocator.h b/src/gpu/GksGpu/DataBase/DataBaseAllocator.h
index 305d9e66118726cd077bbb29d6a047ecca37f4de..0962ceb4d7866959408db047f5e6728061183531 100644
--- a/src/gpu/GksGpu/DataBase/DataBaseAllocator.h
+++ b/src/gpu/GksGpu/DataBase/DataBaseAllocator.h
@@ -17,7 +17,7 @@ struct DataBase;
 struct BoundaryCondition;
 struct Communicator;
 
-class VF_PUBLIC DataBaseAllocator {
+class VIRTUALFLUIDS_GPU_EXPORT DataBaseAllocator {
 
 public:
 
diff --git a/src/gpu/GksGpu/DataBase/DataBaseAllocatorCPU.h b/src/gpu/GksGpu/DataBase/DataBaseAllocatorCPU.h
index 35e89a3d4ddf6477de9114404946f8745dedd4d6..fdefb3a07849a0966550493cb706644e1ead431a 100644
--- a/src/gpu/GksGpu/DataBase/DataBaseAllocatorCPU.h
+++ b/src/gpu/GksGpu/DataBase/DataBaseAllocatorCPU.h
@@ -10,7 +10,7 @@
 
 namespace GksGpu {
 
-class VF_PUBLIC DataBaseAllocatorCPU : public DataBaseAllocator {
+class VIRTUALFLUIDS_GPU_EXPORT DataBaseAllocatorCPU : public DataBaseAllocator {
 
 public:
 
diff --git a/src/gpu/GksGpu/DataBase/DataBaseAllocatorGPU.h b/src/gpu/GksGpu/DataBase/DataBaseAllocatorGPU.h
index ed7418b8c1398f302bd14f15f9784b113ae92d9f..359677195dac0dee08f2b68a68c0a9a2b6cc3cf9 100644
--- a/src/gpu/GksGpu/DataBase/DataBaseAllocatorGPU.h
+++ b/src/gpu/GksGpu/DataBase/DataBaseAllocatorGPU.h
@@ -10,7 +10,7 @@
 
 namespace GksGpu {
 
-class VF_PUBLIC DataBaseAllocatorGPU : public DataBaseAllocator {
+class VIRTUALFLUIDS_GPU_EXPORT DataBaseAllocatorGPU : public DataBaseAllocator {
 
 public:
 
diff --git a/src/gpu/GksGpu/DataBase/DataBaseStruct.h b/src/gpu/GksGpu/DataBase/DataBaseStruct.h
index f808719208b6a099b56fe11044611a9326d85cf8..6ab490490c8905248749e472eb2cd4dc340f1883 100644
--- a/src/gpu/GksGpu/DataBase/DataBaseStruct.h
+++ b/src/gpu/GksGpu/DataBase/DataBaseStruct.h
@@ -7,7 +7,7 @@
 
 namespace GksGpu{ 
 
-struct VF_PUBLIC DataBaseStruct
+struct VIRTUALFLUIDS_GPU_EXPORT DataBaseStruct
 {
     uint  numberOfCells;
     uint  numberOfFaces;
diff --git a/src/gpu/GksGpu/FluxComputation/FluxComputation.h b/src/gpu/GksGpu/FluxComputation/FluxComputation.h
index 74bc5762124f6b83b9743222705bedc6138f7732..3c24532e98eaff11f34e7fefd4540ec3c9c0cb9d 100644
--- a/src/gpu/GksGpu/FluxComputation/FluxComputation.h
+++ b/src/gpu/GksGpu/FluxComputation/FluxComputation.h
@@ -11,7 +11,7 @@
 
 namespace GksGpu {
 
-class VF_PUBLIC FluxComputation
+class VIRTUALFLUIDS_GPU_EXPORT FluxComputation
 {
 public:
 
diff --git a/src/gpu/GksGpu/Initializer/Initializer.h b/src/gpu/GksGpu/Initializer/Initializer.h
index 481d5410c53c894cdeabf4de38344f9af68615af..a005fb17085207f171b26403853cc77098a8344f 100644
--- a/src/gpu/GksGpu/Initializer/Initializer.h
+++ b/src/gpu/GksGpu/Initializer/Initializer.h
@@ -16,7 +16,7 @@
 
 namespace GksGpu {
 
-class VF_PUBLIC Initializer
+class VIRTUALFLUIDS_GPU_EXPORT Initializer
 {
 public:
 
diff --git a/src/gpu/GksGpu/Interface/Interface.h b/src/gpu/GksGpu/Interface/Interface.h
index 4e14f9663085c4e38ce0391889d236b47560c01d..1e4fcf7dca74aa5f79039b746a95f86601a05147 100644
--- a/src/gpu/GksGpu/Interface/Interface.h
+++ b/src/gpu/GksGpu/Interface/Interface.h
@@ -10,7 +10,7 @@
 
 namespace GksGpu {
 
-class VF_PUBLIC Interface
+class VIRTUALFLUIDS_GPU_EXPORT Interface
 {
 public:
     static void runFineToCoarse( SPtr<DataBase> dataBase, uint level );
diff --git a/src/gpu/GksGpu/Parameters/Parameters.h b/src/gpu/GksGpu/Parameters/Parameters.h
index ec1dae00830d4999c7a298499ac20dac0d08decf..b89885b967121f40749dbd735091c13fe6426db9 100644
--- a/src/gpu/GksGpu/Parameters/Parameters.h
+++ b/src/gpu/GksGpu/Parameters/Parameters.h
@@ -8,13 +8,13 @@
 
 namespace GksGpu {
 
-enum class VF_PUBLIC ViscosityModel{
+enum class VIRTUALFLUIDS_GPU_EXPORT ViscosityModel{
     constant,
     sutherlandsLaw,
     sutherlandsLaw2
 };
 
-struct  VF_PUBLIC Parameters
+struct  VIRTUALFLUIDS_GPU_EXPORT Parameters
 {
 
     real mu = real(0.01);
diff --git a/src/gpu/GksGpu/Restart/Restart.h b/src/gpu/GksGpu/Restart/Restart.h
index 6eb563620ddac870366a3561ec6860be25e5fa7a..d414e2b163878ac8e5856d330d6f9ecf7a833e1f 100644
--- a/src/gpu/GksGpu/Restart/Restart.h
+++ b/src/gpu/GksGpu/Restart/Restart.h
@@ -13,7 +13,7 @@ namespace GksGpu {
 
 struct DataBase;
 
-class VF_PUBLIC Restart
+class VIRTUALFLUIDS_GPU_EXPORT Restart
 {
 
 public:
diff --git a/src/gpu/GksGpu/TimeStepping/NestedTimeStep.h b/src/gpu/GksGpu/TimeStepping/NestedTimeStep.h
index 400a1a90431e62258a6802e456a6fec320600483..b139d1d8073610213b2e1842ef23675fcf91b53c 100644
--- a/src/gpu/GksGpu/TimeStepping/NestedTimeStep.h
+++ b/src/gpu/GksGpu/TimeStepping/NestedTimeStep.h
@@ -10,7 +10,7 @@
 #include "Parameters/Parameters.h"
 namespace GksGpu{ 
 
-class VF_PUBLIC TimeStepping
+class VIRTUALFLUIDS_GPU_EXPORT TimeStepping
 {
 public:
 
diff --git a/src/gpu/GksMeshAdapter/GksMeshAdapter.h b/src/gpu/GksMeshAdapter/GksMeshAdapter.h
index 6d980e62e2244db79bd6ab55ff8f8f9413aa5dbd..3efa7f98a019726bde2d1792270590bcd0469e63 100644
--- a/src/gpu/GksMeshAdapter/GksMeshAdapter.h
+++ b/src/gpu/GksMeshAdapter/GksMeshAdapter.h
@@ -15,7 +15,7 @@
 
 class MultipleGridBuilder;
 
-class VF_PUBLIC GksMeshAdapter{
+class VIRTUALFLUIDS_GPU_EXPORT GksMeshAdapter{
 
 public:
 
diff --git a/src/gpu/GksMeshAdapter/MeshCell.h b/src/gpu/GksMeshAdapter/MeshCell.h
index b2df98494b3e8968abc01060658a6d9a8fcbc20e..0738683c3603412ca95c98fe8ec70595bfe7f71a 100644
--- a/src/gpu/GksMeshAdapter/MeshCell.h
+++ b/src/gpu/GksMeshAdapter/MeshCell.h
@@ -7,7 +7,7 @@
 #include "Core/VectorTypes.h"
 #include "Core/ArrayTypes.h"
 
-struct VF_PUBLIC MeshCell{
+struct VIRTUALFLUIDS_GPU_EXPORT MeshCell{
 
     uint level;
     uint gridIdx;
diff --git a/src/gpu/GksMeshAdapter/MeshFace.h b/src/gpu/GksMeshAdapter/MeshFace.h
index 78e88a8aea31bd0efe31d62a3944e147e6bbe71d..b322bba316bbc2092456e18efd2e9faa8aa41f7a 100644
--- a/src/gpu/GksMeshAdapter/MeshFace.h
+++ b/src/gpu/GksMeshAdapter/MeshFace.h
@@ -5,7 +5,7 @@
 #include "Core/VectorTypes.h"
 #include "Core/ArrayTypes.h"
 
-struct VF_PUBLIC MeshFace
+struct VIRTUALFLUIDS_GPU_EXPORT MeshFace
 {
     //////////////////////////////////////////////////////////////////////////
 
diff --git a/src/gpu/GksVtkAdapter/VTKAdapter.cpp b/src/gpu/GksVtkAdapter/VTKAdapter.cpp
index 6e20fdd5a2c5f486fcdd2de534f28c6c294e1818..2e84951320a443b5e4ba95b69129158d7d0cd43d 100644
--- a/src/gpu/GksVtkAdapter/VTKAdapter.cpp
+++ b/src/gpu/GksVtkAdapter/VTKAdapter.cpp
@@ -266,7 +266,7 @@ void writeVtkUnstructuredGrid( vtkGridPtr grid, int mode, std::string filename )
     writer->Write();
 }
 
-void VF_PUBLIC writeVtkParallelUnstructuredGridSummaryFile(vtkGridPtr grid, std::string filename, uint mpiWorldSize)
+void VIRTUALFLUIDS_GPU_EXPORT writeVtkParallelUnstructuredGridSummaryFile(vtkGridPtr grid, std::string filename, uint mpiWorldSize)
 {
     uint numberOfArrays = grid->GetCellData()->GetNumberOfArrays();
 
@@ -429,7 +429,7 @@ void writeVtkXML(std::shared_ptr<GksGpu::DataBase> dataBase,
     *logging::out << logging::Logger::INFO_INTERMEDIATE << "done!\n";
 }
 
-void VF_PUBLIC writeVtkXMLParallelSummaryFile(std::shared_ptr<GksGpu::DataBase> dataBase, GksGpu::Parameters parameters, std::string filename, uint mpiWorldSize)
+void VIRTUALFLUIDS_GPU_EXPORT writeVtkXMLParallelSummaryFile(std::shared_ptr<GksGpu::DataBase> dataBase, GksGpu::Parameters parameters, std::string filename, uint mpiWorldSize)
 {
     *logging::out << logging::Logger::INFO_INTERMEDIATE << "Write " << filename << ".pvtu" << " ... \n";
 
@@ -534,7 +534,7 @@ void writeTurbulenceVtkXML(std::shared_ptr<GksGpu::DataBase> dataBase,
     *logging::out << logging::Logger::INFO_INTERMEDIATE << "done!\n";
 }
 
-void VF_PUBLIC writeTurbulenceVtkXMLParallelSummaryFile(std::shared_ptr<GksGpu::DataBase> dataBase, std::shared_ptr<GksGpu::TurbulenceAnalyzer> turbulenceAnalyzer,GksGpu::Parameters parameters, std::string filename, uint mpiWorldSize)
+void VIRTUALFLUIDS_GPU_EXPORT writeTurbulenceVtkXMLParallelSummaryFile(std::shared_ptr<GksGpu::DataBase> dataBase, std::shared_ptr<GksGpu::TurbulenceAnalyzer> turbulenceAnalyzer,GksGpu::Parameters parameters, std::string filename, uint mpiWorldSize)
 {
     *logging::out << logging::Logger::INFO_INTERMEDIATE << "Write " << filename << ".pvtu" << " ... \n";
 
@@ -712,7 +712,7 @@ void mapFlowField(std::shared_ptr<GksGpu::DataBase> base, std::shared_ptr<GksGpu
     }
 }
 
-void VF_PUBLIC writeConcreteHeatFluxVtkXML(std::shared_ptr<GksGpu::DataBase> dataBase, std::shared_ptr<GksGpu::ConcreteHeatFlux> bc, GksGpu::Parameters parameters, int mode, std::string filename)
+void VIRTUALFLUIDS_GPU_EXPORT writeConcreteHeatFluxVtkXML(std::shared_ptr<GksGpu::DataBase> dataBase, std::shared_ptr<GksGpu::ConcreteHeatFlux> bc, GksGpu::Parameters parameters, int mode, std::string filename)
 {
     *logging::out << logging::Logger::INFO_INTERMEDIATE << "Write " << filename << ".vtu" << " ... \n";
 
diff --git a/src/gpu/GksVtkAdapter/VTKAdapter.h b/src/gpu/GksVtkAdapter/VTKAdapter.h
index d5effc8d86f1e81f462465654036f3777bfb8e19..eebab036a24c1eec3215d7ec2f0462f223d62f8b 100644
--- a/src/gpu/GksVtkAdapter/VTKAdapter.h
+++ b/src/gpu/GksVtkAdapter/VTKAdapter.h
@@ -41,31 +41,31 @@ struct rgbColor
     unsigned char b;
 };
 
-vtkGridPtr VF_PUBLIC getVtkUnstructuredOctGrid( SPtr<GksGpu::DataBase> dataBase, bool excludeGhostCells = false );
+vtkGridPtr VIRTUALFLUIDS_GPU_EXPORT getVtkUnstructuredOctGrid( SPtr<GksGpu::DataBase> dataBase, bool excludeGhostCells = false );
 
-void VF_PUBLIC addScalarIntCellData( vtkGridPtr grid, 
+void VIRTUALFLUIDS_GPU_EXPORT addScalarIntCellData( vtkGridPtr grid,
                                      uint numberOfCells, 
                                      std::string name, 
                                      std::function<int(uint)> getData );
 
-void VF_PUBLIC addScalarRealCellData( vtkGridPtr grid, 
+void VIRTUALFLUIDS_GPU_EXPORT addScalarRealCellData( vtkGridPtr grid,
                                       uint numberOfCells, 
                                       std::string name, 
                                       std::function<real(uint)> getData );
 
-void VF_PUBLIC addVectorCellData( vtkGridPtr grid, 
+void VIRTUALFLUIDS_GPU_EXPORT addVectorCellData( vtkGridPtr grid,
                                   uint numberOfCells, 
                                   std::string name, 
                                   std::function<Vec3(uint)> getData );
 
-void VF_PUBLIC addBaseData( vtkGridPtr grid, SPtr<GksGpu::DataBase> dataBase, GksGpu::Parameters parameters );
+void VIRTUALFLUIDS_GPU_EXPORT addBaseData( vtkGridPtr grid, SPtr<GksGpu::DataBase> dataBase, GksGpu::Parameters parameters );
 
-void VF_PUBLIC writeVtkUnstructuredGrid( vtkGridPtr grid, int mode, std::string filename );
+void VIRTUALFLUIDS_GPU_EXPORT writeVtkUnstructuredGrid( vtkGridPtr grid, int mode, std::string filename );
 
-void VF_PUBLIC writeVtkParallelUnstructuredGridSummaryFile( vtkGridPtr grid, std::string filename, uint mpiWorldSize );
+void VIRTUALFLUIDS_GPU_EXPORT writeVtkParallelUnstructuredGridSummaryFile( vtkGridPtr grid, std::string filename, uint mpiWorldSize );
 
-rgbColor VF_PUBLIC colorMapCoolToWarmExtended( double value, double min, double max );
+rgbColor VIRTUALFLUIDS_GPU_EXPORT colorMapCoolToWarmExtended( double value, double min, double max );
 
-void VF_PUBLIC writePNG( vtkDataObject* inputData, int nx, int ny, double L, double H, std::string filename );
+void VIRTUALFLUIDS_GPU_EXPORT writePNG( vtkDataObject* inputData, int nx, int ny, double L, double H, std::string filename );
 
 #endif
\ No newline at end of file
diff --git a/src/gpu/GksVtkAdapter/VTKInterface.h b/src/gpu/GksVtkAdapter/VTKInterface.h
index 1680bd511431f863f211fa80dd86cc697f3d3fda..ecd6aec47e15b9fc29746d1cabe974fb75303aeb 100644
--- a/src/gpu/GksVtkAdapter/VTKInterface.h
+++ b/src/gpu/GksVtkAdapter/VTKInterface.h
@@ -11,30 +11,30 @@ class TurbulenceAnalyzer;
 struct ConcreteHeatFlux;
 }
 
-void VF_PUBLIC writeVtkXML(std::shared_ptr<GksGpu::DataBase> dataBase, 
+void VIRTUALFLUIDS_GPU_EXPORT writeVtkXML(std::shared_ptr<GksGpu::DataBase> dataBase,
                            GksGpu::Parameters parameters, 
                            int mode, 
                            std::string filename);
 
-void VF_PUBLIC writeVtkXMLParallelSummaryFile(std::shared_ptr<GksGpu::DataBase> dataBase, 
+void VIRTUALFLUIDS_GPU_EXPORT writeVtkXMLParallelSummaryFile(std::shared_ptr<GksGpu::DataBase> dataBase,
                                               GksGpu::Parameters parameters, 
                                               std::string filename,
                                               uint mpiWorldSize);
 
-void VF_PUBLIC writeTurbulenceVtkXML(std::shared_ptr<GksGpu::DataBase> dataBase, 
+void VIRTUALFLUIDS_GPU_EXPORT writeTurbulenceVtkXML(std::shared_ptr<GksGpu::DataBase> dataBase,
                                      std::shared_ptr<GksGpu::TurbulenceAnalyzer> turbulenceAnalyzer,
                                      int mode, 
                                      std::string filename);
 
-void VF_PUBLIC writeTurbulenceVtkXMLParallelSummaryFile(std::shared_ptr<GksGpu::DataBase> dataBase, 
+void VIRTUALFLUIDS_GPU_EXPORT writeTurbulenceVtkXMLParallelSummaryFile(std::shared_ptr<GksGpu::DataBase> dataBase,
                                                         std::shared_ptr<GksGpu::TurbulenceAnalyzer> turbulenceAnalyzer,
                                                         GksGpu::Parameters parameters, 
                                                         std::string filename,
                                                         uint mpiWorldSize);
 
-void VF_PUBLIC mapFlowField( std::shared_ptr<GksGpu::DataBase> base, std::shared_ptr<GksGpu::DataBase> target );
+void VIRTUALFLUIDS_GPU_EXPORT mapFlowField( std::shared_ptr<GksGpu::DataBase> base, std::shared_ptr<GksGpu::DataBase> target );
 
-void VF_PUBLIC writeConcreteHeatFluxVtkXML(std::shared_ptr<GksGpu::DataBase> dataBase, 
+void VIRTUALFLUIDS_GPU_EXPORT writeConcreteHeatFluxVtkXML(std::shared_ptr<GksGpu::DataBase> dataBase,
                                            std::shared_ptr<GksGpu::ConcreteHeatFlux> bc, 
                                            GksGpu::Parameters parameters, 
                                            int mode, 
diff --git a/src/gpu/GridGenerator/StreetPointFinder/JunctionReader.h b/src/gpu/GridGenerator/StreetPointFinder/JunctionReader.h
index a53d275214461c2a053e474b7a23b8671086115b..5d59f2d337435e0ee198ed6e0df227957702a6ef 100644
--- a/src/gpu/GridGenerator/StreetPointFinder/JunctionReader.h
+++ b/src/gpu/GridGenerator/StreetPointFinder/JunctionReader.h
@@ -10,7 +10,7 @@
 
 #include <VirtualFluidsDefinitions.h>
 
-struct VF_PUBLIC JunctionReaderData
+struct VIRTUALFLUIDS_GPU_EXPORT JunctionReaderData
 {
 	std::vector<uint> inCells;
 	std::vector<uint> outCells;
@@ -21,7 +21,7 @@ struct VF_PUBLIC JunctionReaderData
 };
 
 
-struct VF_PUBLIC Neighbors
+struct VIRTUALFLUIDS_GPU_EXPORT Neighbors
 {
 	std::vector<int> cells;
 	std::vector<int> neighbors;
@@ -29,7 +29,7 @@ struct VF_PUBLIC Neighbors
 
 
 
-struct VF_PUBLIC JunctionReader
+struct VIRTUALFLUIDS_GPU_EXPORT JunctionReader
 {
 	std::vector<JunctionReaderData> junctions;
 	Neighbors specialNeighbors;
diff --git a/src/gpu/GridGenerator/StreetPointFinder/SinkReader.h b/src/gpu/GridGenerator/StreetPointFinder/SinkReader.h
index aa5e3151983014cc98615b9cf0e13826e7aa499e..0e1d851ba2753bab13d33ce5a11cbd28b0822924 100644
--- a/src/gpu/GridGenerator/StreetPointFinder/SinkReader.h
+++ b/src/gpu/GridGenerator/StreetPointFinder/SinkReader.h
@@ -10,13 +10,13 @@
 
 #include <VirtualFluidsDefinitions.h>
 
-struct VF_PUBLIC SinkReaderData{
+struct VIRTUALFLUIDS_GPU_EXPORT SinkReaderData{
 	uint sinkIndex;
 	float sinkBlockedPossibility;
 	SinkReaderData(uint sinkIndex, float sinkBlockedPossibility);
 };
 
-struct VF_PUBLIC SinkReader
+struct VIRTUALFLUIDS_GPU_EXPORT SinkReader
 {
 	std::vector<SinkReaderData> sinks;
 	StreetPointFinder* streetPointFinder;
diff --git a/src/gpu/GridGenerator/StreetPointFinder/SourceReader.h b/src/gpu/GridGenerator/StreetPointFinder/SourceReader.h
index de0e6acab76f111f19b96f65721d6fabd8de059d..79aa6681d0a578194c4d6c9ae8991fa2beab0aa9 100644
--- a/src/gpu/GridGenerator/StreetPointFinder/SourceReader.h
+++ b/src/gpu/GridGenerator/StreetPointFinder/SourceReader.h
@@ -10,13 +10,13 @@
 
 #include <VirtualFluidsDefinitions.h>
 
-struct VF_PUBLIC SourceReaderData {
+struct VIRTUALFLUIDS_GPU_EXPORT SourceReaderData {
 	unsigned int sourceIndex;
 	float sourcePossibility;
 	SourceReaderData(unsigned int sourceIndex, float sourcePossibility);
 };
 
-struct VF_PUBLIC SourceReader
+struct VIRTUALFLUIDS_GPU_EXPORT SourceReader
 {
 	std::vector<SourceReaderData> sources;
 	StreetPointFinder* streetPointFinder;
diff --git a/src/gpu/GridGenerator/StreetPointFinder/StreetPointFinder.h b/src/gpu/GridGenerator/StreetPointFinder/StreetPointFinder.h
index b90840b8e63df48d0224b2a8a3227f3a3616dccd..82a169f60135f685668741f215cf1f53d301e4a9 100644
--- a/src/gpu/GridGenerator/StreetPointFinder/StreetPointFinder.h
+++ b/src/gpu/GridGenerator/StreetPointFinder/StreetPointFinder.h
@@ -11,7 +11,7 @@
 
 class Grid;
 
-struct VF_PUBLIC Street
+struct VIRTUALFLUIDS_GPU_EXPORT Street
 {
     // The start and end coordinates are stored for cell centers!
     //
@@ -39,7 +39,7 @@ struct VF_PUBLIC Street
     void findIndicesLB( SPtr<Grid> grid, real initialSearchHeight);
 };
 
-struct VF_PUBLIC StreetPointFinder
+struct VIRTUALFLUIDS_GPU_EXPORT StreetPointFinder
 {
     std::vector<Street> streets;
 
diff --git a/src/gpu/GridGenerator/geometries/Arrow/ArrowImp.h b/src/gpu/GridGenerator/geometries/Arrow/ArrowImp.h
index 61e7158664b1def3a733120ccb2216662c547ae4..dccb9b9e24c35c465ff31bfd3ed56ff2ed8d226e 100644
--- a/src/gpu/GridGenerator/geometries/Arrow/ArrowImp.h
+++ b/src/gpu/GridGenerator/geometries/Arrow/ArrowImp.h
@@ -12,13 +12,13 @@ struct Vertex;
 class ArrowImp : public Arrow 
 {
 public:
-	VF_PUBLIC virtual ~ArrowImp();
-	VF_PUBLIC static std::shared_ptr<Arrow> make(const Vertex &start, const Vertex &end);
+	VIRTUALFLUIDS_GPU_EXPORT virtual ~ArrowImp();
+	VIRTUALFLUIDS_GPU_EXPORT static std::shared_ptr<Arrow> make(const Vertex &start, const Vertex &end);
 
-	VF_PUBLIC std::shared_ptr<Vertex> getStart() const;
-	VF_PUBLIC std::shared_ptr<Vertex> getEnd() const;
+	VIRTUALFLUIDS_GPU_EXPORT std::shared_ptr<Vertex> getStart() const;
+	VIRTUALFLUIDS_GPU_EXPORT std::shared_ptr<Vertex> getEnd() const;
 
-	VF_PUBLIC void print() const;
+	VIRTUALFLUIDS_GPU_EXPORT void print() const;
 private:
 	ArrowImp(const Vertex &start, const Vertex &end);
 
diff --git a/src/gpu/GridGenerator/geometries/BoundingBox/BoundingBox.h b/src/gpu/GridGenerator/geometries/BoundingBox/BoundingBox.h
index b25859e5172d1d38a1bfecf9d5b224ac8630a225..3c5946ae41c2d4b60b33f2a3e665c4e317896937 100644
--- a/src/gpu/GridGenerator/geometries/BoundingBox/BoundingBox.h
+++ b/src/gpu/GridGenerator/geometries/BoundingBox/BoundingBox.h
@@ -10,7 +10,7 @@ struct Vertex;
 struct Triangle;
 
 
-class VF_PUBLIC BoundingBox
+class VIRTUALFLUIDS_GPU_EXPORT BoundingBox
 {
 public:
 	real minX;
diff --git a/src/gpu/GridGenerator/geometries/Conglomerate/Conglomerate.h b/src/gpu/GridGenerator/geometries/Conglomerate/Conglomerate.h
index 1c965f7ac556eff4abd969e98d6feed50efaafb4..77512ba3e267d24f746883fadbdd7711d6512732 100644
--- a/src/gpu/GridGenerator/geometries/Conglomerate/Conglomerate.h
+++ b/src/gpu/GridGenerator/geometries/Conglomerate/Conglomerate.h
@@ -13,7 +13,7 @@
 
 #define MAX_NUMBER_OF_OBJECTS 20
 
-class VF_PUBLIC Conglomerate : public Object
+class VIRTUALFLUIDS_GPU_EXPORT Conglomerate : public Object
 {
 public:              
     HOSTDEVICE Conglomerate();
diff --git a/src/gpu/GridGenerator/geometries/Cuboid/Cuboid.h b/src/gpu/GridGenerator/geometries/Cuboid/Cuboid.h
index 8d5922bd9b270050d19f6f987d7c27b02e08a309..5d2879ea67dcb081634675ee55464fc06dc6c970 100644
--- a/src/gpu/GridGenerator/geometries/Cuboid/Cuboid.h
+++ b/src/gpu/GridGenerator/geometries/Cuboid/Cuboid.h
@@ -11,7 +11,7 @@
 
 #include "geometries/Object.h"
 
-class VF_PUBLIC Cuboid : public Object
+class VIRTUALFLUIDS_GPU_EXPORT Cuboid : public Object
 {
 public:              
     HOSTDEVICE Cuboid(const double& minX1, const double& minX2, const double& minX3, const double& maxX1,const double& maxX2, const double& maxX3);
diff --git a/src/gpu/GridGenerator/geometries/Object.h b/src/gpu/GridGenerator/geometries/Object.h
index 175f06b4d3ecf80aafca8a73403589966c1d9bbc..38fd27fe6951e53a2241c0770ee0da12c16d45f0 100644
--- a/src/gpu/GridGenerator/geometries/Object.h
+++ b/src/gpu/GridGenerator/geometries/Object.h
@@ -14,7 +14,7 @@
 class GridImp;
 struct Vertex;
 
-class VF_PUBLIC Object
+class VIRTUALFLUIDS_GPU_EXPORT Object
 {
 public:
     HOSTDEVICE virtual ~Object() {}
diff --git a/src/gpu/GridGenerator/geometries/Sphere/Sphere.h b/src/gpu/GridGenerator/geometries/Sphere/Sphere.h
index 949c27c4d8b2db53e1ba2667e250a77df22c4aac..865da7d3b1e53efcdc7940a79185881f276d1c10 100644
--- a/src/gpu/GridGenerator/geometries/Sphere/Sphere.h
+++ b/src/gpu/GridGenerator/geometries/Sphere/Sphere.h
@@ -11,7 +11,7 @@
 
 #include "geometries/Object.h"
 
-class VF_PUBLIC Sphere : public Object
+class VIRTUALFLUIDS_GPU_EXPORT Sphere : public Object
 {
 public:
     HOSTDEVICE Sphere(const double& centerX, const double& centerY, const double& centerZ, const double& radius);
diff --git a/src/gpu/GridGenerator/geometries/Triangle/Triangle.h b/src/gpu/GridGenerator/geometries/Triangle/Triangle.h
index 66932840f2f023dcfcd378be802f1dfea3056c81..ee16b2f17622a1f8283508af5f042f175abd428f 100644
--- a/src/gpu/GridGenerator/geometries/Triangle/Triangle.h
+++ b/src/gpu/GridGenerator/geometries/Triangle/Triangle.h
@@ -9,7 +9,7 @@
 
 class TriangleMemento;
 
-struct VF_PUBLIC Triangle
+struct VIRTUALFLUIDS_GPU_EXPORT Triangle
 {
     Vertex v1, v2, v3, normal;
     real alphaAngles[3];
diff --git a/src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMesh.cu b/src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMesh.cu
index 91144b8fe054e163e60de1680a8fd5c8b31d54be..66e213eb0b7685882d85ff336325a1e663ff2605 100644
--- a/src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMesh.cu
+++ b/src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMesh.cu
@@ -119,7 +119,7 @@ HOSTDEVICE GbTriFaceMesh3D* TriangularMesh::getGbTriFaceMesh3D() const
     return this->VF_GbTriFaceMesh3D.get();
 }
 
-CUDA_HOST VF_PUBLIC void TriangularMesh::generateGbTriFaceMesh3D()
+CUDA_HOST VIRTUALFLUIDS_GPU_EXPORT void TriangularMesh::generateGbTriFaceMesh3D()
 {
     if( this->VF_GbTriFaceMesh3D ) return;
 
diff --git a/src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMesh.h b/src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMesh.h
index 0e5382ac7b909249629913be3a8aecbfbf09ff84..a67ca01cb8790dce85d1045e759b79fc46382556 100644
--- a/src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMesh.h
+++ b/src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMesh.h
@@ -24,16 +24,16 @@ class TriangularMesh : public Object
 {
 public:
 
-    VF_PUBLIC static TriangularMesh* make(const std::string& fileName, const std::vector<uint> ignorePatches = std::vector<uint>());
-	VF_PUBLIC TriangularMesh();
-    VF_PUBLIC TriangularMesh(const std::string& inputPath, const std::vector<uint> ignorePatches = std::vector<uint>());
-	VF_PUBLIC TriangularMesh(const std::string& inputPath, const BoundingBox &box);
-	HOSTDEVICE VF_PUBLIC ~TriangularMesh();
+    VIRTUALFLUIDS_GPU_EXPORT static TriangularMesh* make(const std::string& fileName, const std::vector<uint> ignorePatches = std::vector<uint>());
+	VIRTUALFLUIDS_GPU_EXPORT TriangularMesh();
+    VIRTUALFLUIDS_GPU_EXPORT TriangularMesh(const std::string& inputPath, const std::vector<uint> ignorePatches = std::vector<uint>());
+	VIRTUALFLUIDS_GPU_EXPORT TriangularMesh(const std::string& inputPath, const BoundingBox &box);
+	HOSTDEVICE VIRTUALFLUIDS_GPU_EXPORT ~TriangularMesh();
 
-    VF_PUBLIC uint getNumberOfTriangles() const;
+    VIRTUALFLUIDS_GPU_EXPORT uint getNumberOfTriangles() const;
 
-	VF_PUBLIC void setTriangles(std::vector<Triangle> triangles);
-	VF_PUBLIC void setMinMax(BoundingBox minmax);
+	VIRTUALFLUIDS_GPU_EXPORT void setTriangles(std::vector<Triangle> triangles);
+	VIRTUALFLUIDS_GPU_EXPORT void setMinMax(BoundingBox minmax);
 
 	std::vector<Triangle> triangleVec;
 	Triangle *triangles;
@@ -42,13 +42,13 @@ public:
 
     SPtr<GbTriFaceMesh3D> VF_GbTriFaceMesh3D;
 
-    CUDA_HOST VF_PUBLIC bool operator==(const TriangularMesh &geometry) const;
+    CUDA_HOST VIRTUALFLUIDS_GPU_EXPORT bool operator==(const TriangularMesh &geometry) const;
 
-    VF_PUBLIC void findNeighbors();
+    VIRTUALFLUIDS_GPU_EXPORT void findNeighbors();
 
-    HOSTDEVICE VF_PUBLIC GbTriFaceMesh3D* getGbTriFaceMesh3D() const;
+    HOSTDEVICE VIRTUALFLUIDS_GPU_EXPORT GbTriFaceMesh3D* getGbTriFaceMesh3D() const;
 
-    CUDA_HOST VF_PUBLIC void generateGbTriFaceMesh3D();
+    CUDA_HOST VIRTUALFLUIDS_GPU_EXPORT void generateGbTriFaceMesh3D();
 
 private:
 	
diff --git a/src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMeshStrategy.h b/src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMeshStrategy.h
index cd5edbce98452aed4fd3cd4104c692332dd41783..db6ba97e06b5696cdfd05caed07a376d0f54e75b 100644
--- a/src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMeshStrategy.h
+++ b/src/gpu/GridGenerator/geometries/TriangularMesh/TriangularMeshStrategy.h
@@ -7,7 +7,7 @@ class GridImp;
 class TriangularMesh;
 struct Triangle;
 
-class VF_PUBLIC TriangularMeshDiscretizationStrategy
+class VIRTUALFLUIDS_GPU_EXPORT TriangularMeshDiscretizationStrategy
 {
 public:
     TriangularMeshDiscretizationStrategy() {}
@@ -26,7 +26,7 @@ private:
 
 
 
-class VF_PUBLIC PointInObjectDiscretizationStrategy : public TriangularMeshDiscretizationStrategy
+class VIRTUALFLUIDS_GPU_EXPORT PointInObjectDiscretizationStrategy : public TriangularMeshDiscretizationStrategy
 {
 public:
     PointInObjectDiscretizationStrategy() {}
@@ -35,7 +35,7 @@ public:
     virtual void doDiscretize(TriangularMesh* triangularMesh, GridImp* grid, char InnerType, char OuterType);
 };
 
-class VF_PUBLIC RayCastingDiscretizationStrategy : public TriangularMeshDiscretizationStrategy
+class VIRTUALFLUIDS_GPU_EXPORT RayCastingDiscretizationStrategy : public TriangularMeshDiscretizationStrategy
 {
 public:
     RayCastingDiscretizationStrategy() {}
@@ -44,7 +44,7 @@ public:
     virtual void doDiscretize(TriangularMesh* triangularMesh, GridImp* grid, char InnerType, char OuterType);
 };
 
-class VF_PUBLIC PointUnderTriangleStrategy : public TriangularMeshDiscretizationStrategy
+class VIRTUALFLUIDS_GPU_EXPORT PointUnderTriangleStrategy : public TriangularMeshDiscretizationStrategy
 {
 public:
     PointUnderTriangleStrategy() {}
diff --git a/src/gpu/GridGenerator/geometries/TriangularMesh/triangleNeighborFinder/TriangleNeighborFinder.h b/src/gpu/GridGenerator/geometries/TriangularMesh/triangleNeighborFinder/TriangleNeighborFinder.h
index f9fe4509691df284f5e09211f144d782c5acce8b..f583062924069c097ba051a2ab1a2d642a3ce66b 100644
--- a/src/gpu/GridGenerator/geometries/TriangularMesh/triangleNeighborFinder/TriangleNeighborFinder.h
+++ b/src/gpu/GridGenerator/geometries/TriangularMesh/triangleNeighborFinder/TriangleNeighborFinder.h
@@ -22,14 +22,14 @@ struct IntegerPtr2D {
 class TriangleNeighborFinder
 {
 public:
-    VF_PUBLIC TriangleNeighborFinder(Triangle *triangles, int size);
-    VF_PUBLIC ~TriangleNeighborFinder();
+    VIRTUALFLUIDS_GPU_EXPORT TriangleNeighborFinder(Triangle *triangles, int size);
+    VIRTUALFLUIDS_GPU_EXPORT ~TriangleNeighborFinder();
     
     std::vector<int> getTriangleIDsWithCommonVertex(int vertexID) const;
     std::vector< std::vector<Triangle> > getTrianglesPerVertex() const;
 
-    void VF_PUBLIC fillWithNeighborIndices(IntegerPtr2D *indices, Triangle *triangles);
-	void VF_PUBLIC fillWithNeighborAngles(TriangularMesh *geom) const;
+    void VIRTUALFLUIDS_GPU_EXPORT fillWithNeighborIndices(IntegerPtr2D *indices, Triangle *triangles);
+	void VIRTUALFLUIDS_GPU_EXPORT fillWithNeighborAngles(TriangularMesh *geom) const;
 
     void printSortedToTriangles() const;
     void printSortedInSpace() const;
diff --git a/src/gpu/GridGenerator/geometries/TriangularMesh/triangleRefinement/TriangleRefinement.h b/src/gpu/GridGenerator/geometries/TriangularMesh/triangleRefinement/TriangleRefinement.h
index a158169c0008a3a999c4adaddc03d8089510ba2c..911e2a91d0a1cf17e521d19fbb59c5e29f677cee 100644
--- a/src/gpu/GridGenerator/geometries/TriangularMesh/triangleRefinement/TriangleRefinement.h
+++ b/src/gpu/GridGenerator/geometries/TriangularMesh/triangleRefinement/TriangleRefinement.h
@@ -14,17 +14,17 @@ struct IntegerPtr2D;
 class  TriangleRefinement
 {
 public:
-    VF_PUBLIC TriangleRefinement(std::vector<Triangle> *triangles);
-    VF_PUBLIC ~TriangleRefinement();
+    VIRTUALFLUIDS_GPU_EXPORT TriangleRefinement(std::vector<Triangle> *triangles);
+    VIRTUALFLUIDS_GPU_EXPORT ~TriangleRefinement();
 
-    void VF_PUBLIC refine(int iTriangle);
-    static void VF_PUBLIC refine(Triangle t, Triangle &firstNewTriangle, Triangle &secondNewTriangle);
+    void VIRTUALFLUIDS_GPU_EXPORT refine(int iTriangle);
+    static void VIRTUALFLUIDS_GPU_EXPORT refine(Triangle t, Triangle &firstNewTriangle, Triangle &secondNewTriangle);
     
-    void VF_PUBLIC refineUntilMinDistance(double d_min);
-    void VF_PUBLIC refineUntilcountTriangle(int countTri);
-    void VF_PUBLIC redoubleTriangles();
+    void VIRTUALFLUIDS_GPU_EXPORT refineUntilMinDistance(double d_min);
+    void VIRTUALFLUIDS_GPU_EXPORT refineUntilcountTriangle(int countTri);
+    void VIRTUALFLUIDS_GPU_EXPORT redoubleTriangles();
 
-    static VF_PUBLIC Vertex getHalfVertex(const Vertex &v, const Vertex &w);
+    static VIRTUALFLUIDS_GPU_EXPORT Vertex getHalfVertex(const Vertex &v, const Vertex &w);
 
 private:
     std::vector<Triangle> *triangles;
@@ -39,8 +39,8 @@ private:
     int findCommonEdgeFromTriangles(int indexNeighbor, int iTriangle);
 
 public:
-    static int VF_PUBLIC getEdgeWithLongestDistance(Triangle &t);
-    static real VF_PUBLIC getLongestEdgeDistance(Triangle &t);
+    static int VIRTUALFLUIDS_GPU_EXPORT getEdgeWithLongestDistance(Triangle &t);
+    static real VIRTUALFLUIDS_GPU_EXPORT getLongestEdgeDistance(Triangle &t);
 };
 
 
diff --git a/src/gpu/GridGenerator/geometries/Vertex/Vertex.h b/src/gpu/GridGenerator/geometries/Vertex/Vertex.h
index f854801a5ce7081ea2c74753ed29e13f6ef48910..23b47311afad9208b6909809847869922aeffdc2 100644
--- a/src/gpu/GridGenerator/geometries/Vertex/Vertex.h
+++ b/src/gpu/GridGenerator/geometries/Vertex/Vertex.h
@@ -10,7 +10,7 @@
 
 class VertexMemento;
 
-struct VF_PUBLIC Vertex 
+struct VIRTUALFLUIDS_GPU_EXPORT Vertex
 {
 public:
     real x, y, z;
diff --git a/src/gpu/GridGenerator/geometries/VerticalCylinder/VerticalCylinder.h b/src/gpu/GridGenerator/geometries/VerticalCylinder/VerticalCylinder.h
index 0bf95520ee8538c6183badab68d81bcc2947a460..6d004909e1fe6804ca95e545c55e8f67bcc914ef 100644
--- a/src/gpu/GridGenerator/geometries/VerticalCylinder/VerticalCylinder.h
+++ b/src/gpu/GridGenerator/geometries/VerticalCylinder/VerticalCylinder.h
@@ -11,7 +11,7 @@
 
 #include "geometries/Object.h"
 
-class VF_PUBLIC VerticalCylinder : public Object
+class VIRTUALFLUIDS_GPU_EXPORT VerticalCylinder : public Object
 {
 public:
     HOSTDEVICE VerticalCylinder(const double& centerX, const double& centerY, const double& centerZ, const double& radius, const double& height);
diff --git a/src/gpu/GridGenerator/grid/BoundaryConditions/BoundaryCondition.cpp b/src/gpu/GridGenerator/grid/BoundaryConditions/BoundaryCondition.cpp
index 0c0a014767b75beb8e8282098fbf107c85090c1d..6ddc6b0e112a7d104ef131f8171405d236acac6e 100644
--- a/src/gpu/GridGenerator/grid/BoundaryConditions/BoundaryCondition.cpp
+++ b/src/gpu/GridGenerator/grid/BoundaryConditions/BoundaryCondition.cpp
@@ -10,7 +10,7 @@ bool BoundaryCondition::isSide( SideType side ) const
     return this->side->whoAmI() == side;
 }
 
-VF_PUBLIC void VelocityBoundaryCondition::setVelocityProfile(SPtr<Grid> grid, std::function<void(real, real, real, real&, real&, real&)> velocityProfile)
+VIRTUALFLUIDS_GPU_EXPORT void VelocityBoundaryCondition::setVelocityProfile(SPtr<Grid> grid, std::function<void(real, real, real, real&, real&, real&)> velocityProfile)
 {
     for( uint index = 0; index < this->indices.size(); index++ ){
 
diff --git a/src/gpu/GridGenerator/grid/BoundaryConditions/BoundaryCondition.h b/src/gpu/GridGenerator/grid/BoundaryConditions/BoundaryCondition.h
index a45ecf2f69a53260e8bd30bd2269c72fa5964156..9765a24d2ef5cead8fea271427fe44e319ac8c22 100644
--- a/src/gpu/GridGenerator/grid/BoundaryConditions/BoundaryCondition.h
+++ b/src/gpu/GridGenerator/grid/BoundaryConditions/BoundaryCondition.h
@@ -96,7 +96,7 @@ public:
     real getVy(uint index) { return this->vyList[index]; }
     real getVz(uint index) { return this->vzList[index]; }
     
-    VF_PUBLIC void setVelocityProfile( SPtr<Grid> grid, std::function<void(real,real,real,real&,real&,real&)> velocityProfile );
+    VIRTUALFLUIDS_GPU_EXPORT void setVelocityProfile( SPtr<Grid> grid, std::function<void(real,real,real,real&,real&,real&)> velocityProfile );
 };
 
 //////////////////////////////////////////////////////////////////////////
@@ -129,7 +129,7 @@ public:
         }
     }
 
-    VF_PUBLIC void setTangentialVelocityForPatch( SPtr<Grid> grid, uint patch, 
+    VIRTUALFLUIDS_GPU_EXPORT void setTangentialVelocityForPatch( SPtr<Grid> grid, uint patch,
                                                   real p1x, real p1y, real p1z, 
                                                   real p2x, real p2y, real p2z, 
                                                   real v, real r );
diff --git a/src/gpu/GridGenerator/grid/Field.h b/src/gpu/GridGenerator/grid/Field.h
index 1757d7e446c4b7c1b7509b1bc42a894358836528..620e6780fd95e961115e9aec867c30252198e924 100644
--- a/src/gpu/GridGenerator/grid/Field.h
+++ b/src/gpu/GridGenerator/grid/Field.h
@@ -6,7 +6,7 @@
 struct Vertex;
 class GridStrategy;
 
-class VF_PUBLIC Field : public enableSharedFromThis<Field>
+class VIRTUALFLUIDS_GPU_EXPORT Field : public enableSharedFromThis<Field>
 {
 public:
     CUDA_HOST Field(SPtr<GridStrategy> gridStrategy, uint size);
diff --git a/src/gpu/GridGenerator/grid/Grid.h b/src/gpu/GridGenerator/grid/Grid.h
index 8582d1606d6402f1559be1929423455e1308d5f1..21fdeaa656db553db8feecc681aa3c07250a6e72 100644
--- a/src/gpu/GridGenerator/grid/Grid.h
+++ b/src/gpu/GridGenerator/grid/Grid.h
@@ -17,7 +17,7 @@ class GridInterface;
 class Object;
 class BoundingBox;
 
-class VF_PUBLIC Grid
+class VIRTUALFLUIDS_GPU_EXPORT Grid
 {
 public:
     HOSTDEVICE virtual ~Grid() {}
diff --git a/src/gpu/GridGenerator/grid/GridBuilder/GridBuilder.h b/src/gpu/GridGenerator/grid/GridBuilder/GridBuilder.h
index b7cb1094e70bc12082b6ddcb0db515f4e2151cba..7550cb582a7a532c0140d8f6529b72da258a425c 100644
--- a/src/gpu/GridGenerator/grid/GridBuilder/GridBuilder.h
+++ b/src/gpu/GridGenerator/grid/GridBuilder/GridBuilder.h
@@ -39,9 +39,9 @@ public:
         CPU, GPU
     };
 
-    virtual VF_PUBLIC ~GridBuilder() {}
+    virtual VIRTUALFLUIDS_GPU_EXPORT ~GridBuilder() {}
     virtual void getGridInformations(std::vector<int>& gridX, std::vector<int>& gridY, std::vector<int>& gridZ, std::vector<int>& distX, std::vector<int>& distY, std::vector<int>& distZ) = 0;
-    virtual VF_PUBLIC uint getNumberOfGridLevels() const = 0;
+    virtual VIRTUALFLUIDS_GPU_EXPORT uint getNumberOfGridLevels() const = 0;
 
 
     virtual void writeArrows(std::string fileName) const = 0;
diff --git a/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp b/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp
index 3ffc8625a265b1e9ec6bbe7746172661cd23601f..dfb06790d8b20e930c0b35ed52d843c3694b3d41 100644
--- a/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp
+++ b/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp
@@ -126,18 +126,18 @@ void LevelGridBuilder::setNoSlipBoundaryCondition(SideType sideType)
     }
 }
 
-VF_PUBLIC void LevelGridBuilder::setEnableFixRefinementIntoTheWall(bool enableFixRefinementIntoTheWall)
+VIRTUALFLUIDS_GPU_EXPORT void LevelGridBuilder::setEnableFixRefinementIntoTheWall(bool enableFixRefinementIntoTheWall)
 {
     for( uint level = 0; level < this->grids.size(); level++ )
         grids[level]->setEnableFixRefinementIntoTheWall( enableFixRefinementIntoTheWall );
 }
 
-VF_PUBLIC void LevelGridBuilder::setCommunicationProcess(int direction, uint process)
+VIRTUALFLUIDS_GPU_EXPORT void LevelGridBuilder::setCommunicationProcess(int direction, uint process)
 {
     this->communicationProcesses[direction] = process;
 }
 
-VF_PUBLIC uint LevelGridBuilder::getCommunicationProcess(int direction)
+VIRTUALFLUIDS_GPU_EXPORT uint LevelGridBuilder::getCommunicationProcess(int direction)
 {
     return this->communicationProcesses[direction];
 }
@@ -228,17 +228,17 @@ void LevelGridBuilder::getOffsetCF(real * xOffCF, real * yOffCF, real * zOffCF,
     }
 }
 
-VF_PUBLIC uint LevelGridBuilder::getNumberOfSendIndices(int direction, uint level)
+VIRTUALFLUIDS_GPU_EXPORT uint LevelGridBuilder::getNumberOfSendIndices(int direction, uint level)
 {
     return this->grids[level]->getNumberOfSendNodes(direction);
 }
 
-VF_PUBLIC uint LevelGridBuilder::getNumberOfReceiveIndices(int direction, uint level)
+VIRTUALFLUIDS_GPU_EXPORT uint LevelGridBuilder::getNumberOfReceiveIndices(int direction, uint level)
 {
     return this->grids[level]->getNumberOfReceiveNodes(direction);
 }
 
-VF_PUBLIC void LevelGridBuilder::getSendIndices(int * sendIndices, int direction, int level)
+VIRTUALFLUIDS_GPU_EXPORT void LevelGridBuilder::getSendIndices(int * sendIndices, int direction, int level)
 {
     SPtr<Grid> grid = this->grids[level];
     for( uint i = 0; i < getNumberOfSendIndices(direction, level); i++ )
@@ -247,7 +247,7 @@ VF_PUBLIC void LevelGridBuilder::getSendIndices(int * sendIndices, int direction
     }
 }
 
-VF_PUBLIC void LevelGridBuilder::getReceiveIndices(int * receiveIndices, int direction, int level)
+VIRTUALFLUIDS_GPU_EXPORT void LevelGridBuilder::getReceiveIndices(int * receiveIndices, int direction, int level)
 {
     SPtr<Grid> grid = this->grids[level];
     for( uint i = 0; i < getNumberOfReceiveIndices(direction, level); i++ )
@@ -469,7 +469,7 @@ void LevelGridBuilder::writeArrows(std::string fileName) const
     QLineWriter::writeArrows(fileName, boundaryConditions[getNumberOfGridLevels() - 1]->geometryBoundaryCondition, grids[getNumberOfGridLevels() - 1]);
 }
 
-VF_PUBLIC SPtr<BoundaryCondition> LevelGridBuilder::getBoundaryCondition(SideType side, uint level) const
+VIRTUALFLUIDS_GPU_EXPORT SPtr<BoundaryCondition> LevelGridBuilder::getBoundaryCondition(SideType side, uint level) const
 {
     for( auto bc : this->boundaryConditions[level]->pressureBoundaryConditions )
         if( bc->isSide(side) )
@@ -487,7 +487,7 @@ VF_PUBLIC SPtr<BoundaryCondition> LevelGridBuilder::getBoundaryCondition(SideTyp
     return nullptr;
 }
 
-VF_PUBLIC SPtr<GeometryBoundaryCondition> LevelGridBuilder::getGeometryBoundaryCondition(uint level) const
+VIRTUALFLUIDS_GPU_EXPORT SPtr<GeometryBoundaryCondition> LevelGridBuilder::getGeometryBoundaryCondition(uint level) const
 {
     return this->boundaryConditions[level]->geometryBoundaryCondition;
 }
diff --git a/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.h b/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.h
index 5787b6efafee882b83c2721b6c26754a2d35918a..51a8830a69976e20e9ca7acfd7b174b26f5c333e 100644
--- a/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.h
+++ b/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.h
@@ -32,57 +32,57 @@ enum class SideType;
 class LevelGridBuilder : public GridBuilder
 {
 protected:
-    VF_PUBLIC LevelGridBuilder(Device device, const std::string& d3qxx);
+    VIRTUALFLUIDS_GPU_EXPORT LevelGridBuilder(Device device, const std::string& d3qxx);
 
 public:
-    VF_PUBLIC static std::shared_ptr<LevelGridBuilder> makeShared(Device device, const std::string& d3qxx);
+    VIRTUALFLUIDS_GPU_EXPORT static std::shared_ptr<LevelGridBuilder> makeShared(Device device, const std::string& d3qxx);
 
-    VF_PUBLIC SPtr<Grid> getGrid(uint level) override;
+    VIRTUALFLUIDS_GPU_EXPORT SPtr<Grid> getGrid(uint level) override;
 
-    VF_PUBLIC void copyDataFromGpu();
-    VF_PUBLIC virtual ~LevelGridBuilder();
+    VIRTUALFLUIDS_GPU_EXPORT void copyDataFromGpu();
+    VIRTUALFLUIDS_GPU_EXPORT virtual ~LevelGridBuilder();
 
-    VF_PUBLIC void setVelocityBoundaryCondition(SideType sideType, real vx, real vy, real vz);
-    VF_PUBLIC void setPressureBoundaryCondition(SideType sideType, real rho);
-    VF_PUBLIC void setPeriodicBoundaryCondition(bool periodic_X, bool periodic_Y, bool periodic_Z);
-    VF_PUBLIC void setNoSlipBoundaryCondition(SideType sideType);
+    VIRTUALFLUIDS_GPU_EXPORT void setVelocityBoundaryCondition(SideType sideType, real vx, real vy, real vz);
+    VIRTUALFLUIDS_GPU_EXPORT void setPressureBoundaryCondition(SideType sideType, real rho);
+    VIRTUALFLUIDS_GPU_EXPORT void setPeriodicBoundaryCondition(bool periodic_X, bool periodic_Y, bool periodic_Z);
+    VIRTUALFLUIDS_GPU_EXPORT void setNoSlipBoundaryCondition(SideType sideType);
 
-    VF_PUBLIC void setEnableFixRefinementIntoTheWall( bool enableFixRefinementIntoTheWall );
+    VIRTUALFLUIDS_GPU_EXPORT void setEnableFixRefinementIntoTheWall( bool enableFixRefinementIntoTheWall );
 
-    VF_PUBLIC void setCommunicationProcess(int direction, uint process);
+    VIRTUALFLUIDS_GPU_EXPORT void setCommunicationProcess(int direction, uint process);
 
-    VF_PUBLIC uint getCommunicationProcess(int direction) override;
+    VIRTUALFLUIDS_GPU_EXPORT uint getCommunicationProcess(int direction) override;
 
-    VF_PUBLIC virtual std::shared_ptr<Grid> getGrid(int level, int box);
+    VIRTUALFLUIDS_GPU_EXPORT virtual std::shared_ptr<Grid> getGrid(int level, int box);
 
 
-    VF_PUBLIC virtual unsigned int getNumberOfNodes(unsigned int level) const;
+    VIRTUALFLUIDS_GPU_EXPORT virtual unsigned int getNumberOfNodes(unsigned int level) const;
 
 
-    VF_PUBLIC virtual void getNodeValues(real *xCoords, real *yCoords, real *zCoords, 
+    VIRTUALFLUIDS_GPU_EXPORT virtual void getNodeValues(real *xCoords, real *yCoords, real *zCoords,
                                          uint *neighborX, uint *neighborY, uint *neighborZ, uint *neighborNegative, 
                                          uint *geo, const int level) const override;
-    VF_PUBLIC virtual void getDimensions(int &nx, int &ny, int &nz, const int level) const;
+    VIRTUALFLUIDS_GPU_EXPORT virtual void getDimensions(int &nx, int &ny, int &nz, const int level) const;
 
 
-    VF_PUBLIC uint getVelocitySize(int level) const;
-    VF_PUBLIC virtual void getVelocityValues(real* vx, real* vy, real* vz, int* indices, int level) const;
-    VF_PUBLIC virtual void getVelocityQs(real* qs[27], int level) const;
-    VF_PUBLIC uint getPressureSize(int level) const override;
-    VF_PUBLIC void getPressureValues(real* rho, int* indices, int* neighborIndices, int level) const override;
-    VF_PUBLIC virtual void getPressureQs(real* qs[27], int level) const;
+    VIRTUALFLUIDS_GPU_EXPORT uint getVelocitySize(int level) const;
+    VIRTUALFLUIDS_GPU_EXPORT virtual void getVelocityValues(real* vx, real* vy, real* vz, int* indices, int level) const;
+    VIRTUALFLUIDS_GPU_EXPORT virtual void getVelocityQs(real* qs[27], int level) const;
+    VIRTUALFLUIDS_GPU_EXPORT uint getPressureSize(int level) const override;
+    VIRTUALFLUIDS_GPU_EXPORT void getPressureValues(real* rho, int* indices, int* neighborIndices, int level) const override;
+    VIRTUALFLUIDS_GPU_EXPORT virtual void getPressureQs(real* qs[27], int level) const;
 
-    VF_PUBLIC virtual void getGeometryQs(real* qs[27], int level) const;
-    VF_PUBLIC virtual uint getGeometrySize(int level) const;
-    VF_PUBLIC virtual void getGeometryIndices(int* indices, int level) const;
-    VF_PUBLIC virtual bool hasGeometryValues() const;
-    VF_PUBLIC virtual void getGeometryValues(real* vx, real* vy, real* vz, int level) const;
+    VIRTUALFLUIDS_GPU_EXPORT virtual void getGeometryQs(real* qs[27], int level) const;
+    VIRTUALFLUIDS_GPU_EXPORT virtual uint getGeometrySize(int level) const;
+    VIRTUALFLUIDS_GPU_EXPORT virtual void getGeometryIndices(int* indices, int level) const;
+    VIRTUALFLUIDS_GPU_EXPORT virtual bool hasGeometryValues() const;
+    VIRTUALFLUIDS_GPU_EXPORT virtual void getGeometryValues(real* vx, real* vy, real* vz, int level) const;
 
 
-    VF_PUBLIC void writeArrows(std::string fileName) const;
+    VIRTUALFLUIDS_GPU_EXPORT void writeArrows(std::string fileName) const;
 
-    VF_PUBLIC SPtr<BoundaryCondition> getBoundaryCondition( SideType side, uint level ) const override;
-    VF_PUBLIC SPtr<GeometryBoundaryCondition> getGeometryBoundaryCondition(uint level) const override;
+    VIRTUALFLUIDS_GPU_EXPORT SPtr<BoundaryCondition> getBoundaryCondition( SideType side, uint level ) const override;
+    VIRTUALFLUIDS_GPU_EXPORT SPtr<GeometryBoundaryCondition> getGeometryBoundaryCondition(uint level) const override;
 
 protected:
     
@@ -126,23 +126,23 @@ private:
     std::string d3qxx;
 
 public:
-    VF_PUBLIC void getGridInformations(std::vector<int>& gridX, std::vector<int>& gridY,
+    VIRTUALFLUIDS_GPU_EXPORT void getGridInformations(std::vector<int>& gridX, std::vector<int>& gridY,
                                        std::vector<int>& gridZ, std::vector<int>& distX, std::vector<int>& distY,
                                        std::vector<int>& distZ) override;
-    VF_PUBLIC uint getNumberOfGridLevels() const override;
+    VIRTUALFLUIDS_GPU_EXPORT uint getNumberOfGridLevels() const override;
 
-    VF_PUBLIC uint getNumberOfNodesCF(int level) override;
-    VF_PUBLIC uint getNumberOfNodesFC(int level) override;
+    VIRTUALFLUIDS_GPU_EXPORT uint getNumberOfNodesCF(int level) override;
+    VIRTUALFLUIDS_GPU_EXPORT uint getNumberOfNodesFC(int level) override;
 
-    VF_PUBLIC void getGridInterfaceIndices(uint* iCellCfc, uint* iCellCff, uint* iCellFcc, uint* iCellFcf, int level) const override;
+    VIRTUALFLUIDS_GPU_EXPORT void getGridInterfaceIndices(uint* iCellCfc, uint* iCellCff, uint* iCellFcc, uint* iCellFcf, int level) const override;
 
-    VF_PUBLIC void getOffsetFC(real* xOffCf, real* yOffCf, real* zOffCf, int level) override;
-    VF_PUBLIC void getOffsetCF(real* xOffFc, real* yOffFc, real* zOffFc, int level) override;
+    VIRTUALFLUIDS_GPU_EXPORT void getOffsetFC(real* xOffCf, real* yOffCf, real* zOffCf, int level) override;
+    VIRTUALFLUIDS_GPU_EXPORT void getOffsetCF(real* xOffFc, real* yOffFc, real* zOffFc, int level) override;
 
-    VF_PUBLIC uint getNumberOfSendIndices( int direction, uint level ) override;
-    VF_PUBLIC uint getNumberOfReceiveIndices( int direction, uint level ) override;
-    VF_PUBLIC void getSendIndices( int* sendIndices, int direction, int level ) override;
-    VF_PUBLIC void getReceiveIndices( int* sendIndices, int direction, int level ) override;
+    VIRTUALFLUIDS_GPU_EXPORT uint getNumberOfSendIndices( int direction, uint level ) override;
+    VIRTUALFLUIDS_GPU_EXPORT uint getNumberOfReceiveIndices( int direction, uint level ) override;
+    VIRTUALFLUIDS_GPU_EXPORT void getSendIndices( int* sendIndices, int direction, int level ) override;
+    VIRTUALFLUIDS_GPU_EXPORT void getReceiveIndices( int* sendIndices, int direction, int level ) override;
 
 };
 
diff --git a/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp b/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp
index 52726d5322a86bd42e03f48986c01ad2b6db0ed2..1dda75c8c486c0e58b7e3c6774c783552466c1ec 100644
--- a/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp
+++ b/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp
@@ -571,7 +571,7 @@ void MultipleGridBuilder::buildGrids( LbmOrGks lbmOrGks, bool enableThinWalls )
     //////////////////////////////////////////////////////////////////////////
 }
 
-VF_PUBLIC void MultipleGridBuilder::setNumberOfLayers(uint numberOfLayersFine, uint numberOfLayersBetweenLevels)
+VIRTUALFLUIDS_GPU_EXPORT void MultipleGridBuilder::setNumberOfLayers(uint numberOfLayersFine, uint numberOfLayersBetweenLevels)
 {
     this->numberOfLayersFine = numberOfLayersFine;
     this->numberOfLayersBetweenLevels = numberOfLayersBetweenLevels;
@@ -618,7 +618,7 @@ void MultipleGridBuilder::writeGridsToVtk(const std::string& path) const
     }
 }
 
-VF_PUBLIC void MultipleGridBuilder::setSubDomainBox(SPtr<BoundingBox> subDomainBox)
+VIRTUALFLUIDS_GPU_EXPORT void MultipleGridBuilder::setSubDomainBox(SPtr<BoundingBox> subDomainBox)
 {
     this->subDomainBox = subDomainBox;
 }
diff --git a/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h b/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h
index 96bb298f0b74c4e7e4fd1d8a31541bf1826a352a..a22c87799400441ead7a7ebeceeca70d5950ccdf 100644
--- a/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h
+++ b/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h
@@ -17,37 +17,37 @@ class BoundingBox;
 class MultipleGridBuilder : public LevelGridBuilder
 {
 private:
-    VF_PUBLIC MultipleGridBuilder(SPtr<GridFactory> gridFactory, Device device = Device::CPU, const std::string &d3qxx = "D3Q27");
+    VIRTUALFLUIDS_GPU_EXPORT MultipleGridBuilder(SPtr<GridFactory> gridFactory, Device device = Device::CPU, const std::string &d3qxx = "D3Q27");
 
 public:
-    VF_PUBLIC static SPtr<MultipleGridBuilder> makeShared(SPtr<GridFactory> gridFactory);
+    VIRTUALFLUIDS_GPU_EXPORT static SPtr<MultipleGridBuilder> makeShared(SPtr<GridFactory> gridFactory);
 
-    VF_PUBLIC void addCoarseGrid(real startX, real startY, real startZ, real endX, real endY, real endZ, real delta);
-    VF_PUBLIC void addGrid(Object* gridShape);
-    VF_PUBLIC void addGrid(Object* gridShape, uint levelFine);
+    VIRTUALFLUIDS_GPU_EXPORT void addCoarseGrid(real startX, real startY, real startZ, real endX, real endY, real endZ, real delta);
+    VIRTUALFLUIDS_GPU_EXPORT void addGrid(Object* gridShape);
+    VIRTUALFLUIDS_GPU_EXPORT void addGrid(Object* gridShape, uint levelFine);
 
-    VF_PUBLIC void addGeometry(Object* gridShape);
-    VF_PUBLIC void addGeometry(Object* solidObject, uint level);
+    VIRTUALFLUIDS_GPU_EXPORT void addGeometry(Object* gridShape);
+    VIRTUALFLUIDS_GPU_EXPORT void addGeometry(Object* solidObject, uint level);
 
-    VF_PUBLIC uint getNumberOfLevels() const;
-    VF_PUBLIC real getDelta(uint level) const;
+    VIRTUALFLUIDS_GPU_EXPORT uint getNumberOfLevels() const;
+    VIRTUALFLUIDS_GPU_EXPORT real getDelta(uint level) const;
 
-    VF_PUBLIC real getStartX(uint level) const;
-    VF_PUBLIC real getStartY(uint level) const;
-    VF_PUBLIC real getStartZ(uint level) const;
+    VIRTUALFLUIDS_GPU_EXPORT real getStartX(uint level) const;
+    VIRTUALFLUIDS_GPU_EXPORT real getStartY(uint level) const;
+    VIRTUALFLUIDS_GPU_EXPORT real getStartZ(uint level) const;
 
-    VF_PUBLIC real getEndX(uint level) const;
-    VF_PUBLIC real getEndY(uint level) const;
-    VF_PUBLIC real getEndZ(uint level) const;
+    VIRTUALFLUIDS_GPU_EXPORT real getEndX(uint level) const;
+    VIRTUALFLUIDS_GPU_EXPORT real getEndY(uint level) const;
+    VIRTUALFLUIDS_GPU_EXPORT real getEndZ(uint level) const;
 
-    VF_PUBLIC std::vector<SPtr<Grid> > getGrids() const;
-    VF_PUBLIC void buildGrids(LbmOrGks lbmOrGks, bool enableThinWalls = false);
+    VIRTUALFLUIDS_GPU_EXPORT std::vector<SPtr<Grid> > getGrids() const;
+    VIRTUALFLUIDS_GPU_EXPORT void buildGrids(LbmOrGks lbmOrGks, bool enableThinWalls = false);
 
-    VF_PUBLIC void setNumberOfLayers( uint numberOfLayersFine, uint numberOfLayersBetweenLevels );
+    VIRTUALFLUIDS_GPU_EXPORT void setNumberOfLayers( uint numberOfLayersFine, uint numberOfLayersBetweenLevels );
 
-    VF_PUBLIC void writeGridsToVtk(const std::string& path) const;
+    VIRTUALFLUIDS_GPU_EXPORT void writeGridsToVtk(const std::string& path) const;
 
-    VF_PUBLIC void setSubDomainBox(SPtr<BoundingBox> subDomainBox);
+    VIRTUALFLUIDS_GPU_EXPORT void setSubDomainBox(SPtr<BoundingBox> subDomainBox);
 
 private:
     void addGridToList(SPtr<Grid> grid);
@@ -83,7 +83,7 @@ private:
 
 public:
 
-    VF_PUBLIC void findCommunicationIndices( int direction, LbmOrGks lbmOrGks );
+    VIRTUALFLUIDS_GPU_EXPORT void findCommunicationIndices( int direction, LbmOrGks lbmOrGks );
 };
 
 #endif
diff --git a/src/gpu/GridGenerator/grid/GridFactory.h b/src/gpu/GridGenerator/grid/GridFactory.h
index 13e7d72f4f321b5c61bfb21e572c1382fdb09d27..57f3e4849c32a44bcd7b47fb8dea9e1cfa398c10 100644
--- a/src/gpu/GridGenerator/grid/GridFactory.h
+++ b/src/gpu/GridGenerator/grid/GridFactory.h
@@ -22,7 +22,7 @@ enum class TriangularMeshDiscretizationMethod
     RAYCASTING, POINT_IN_OBJECT, POINT_UNDER_TRIANGLE
 };
 
-class VF_PUBLIC GridFactory
+class VIRTUALFLUIDS_GPU_EXPORT GridFactory
 {
 public:
     static SPtr<GridFactory> make()
diff --git a/src/gpu/GridGenerator/grid/GridImp.h b/src/gpu/GridGenerator/grid/GridImp.h
index 478e8c533378649f25933419cab04bafdfee0768..d58b1b70b8a721a5ab0dad2b99f8138607724904 100644
--- a/src/gpu/GridGenerator/grid/GridImp.h
+++ b/src/gpu/GridGenerator/grid/GridImp.h
@@ -23,7 +23,7 @@ class TriangularMeshDiscretizationStrategy;
 
 extern CONSTANT int DIRECTIONS[DIR_END_MAX][DIMENSION];
 
-class VF_PUBLIC GridImp : public enableSharedFromThis<GridImp>, public Grid
+class VIRTUALFLUIDS_GPU_EXPORT GridImp : public enableSharedFromThis<GridImp>, public Grid
 {
 private:
     CUDA_HOST GridImp();
diff --git a/src/gpu/GridGenerator/grid/GridInterface.cu b/src/gpu/GridGenerator/grid/GridInterface.cu
index 401773143cc6b909d8e41820567bcf468230cf0b..e05b017c83b009f79229cf4edfb6534838ff9b0b 100644
--- a/src/gpu/GridGenerator/grid/GridInterface.cu
+++ b/src/gpu/GridGenerator/grid/GridInterface.cu
@@ -254,7 +254,7 @@ void GridInterface::findForGridInterfaceSparseIndexFC(GridImp* coarseGrid, GridI
     findSparseIndex(fc.fine, fineGrid, index);
 }
 
-CUDA_HOST void VF_PUBLIC GridInterface::repairGridInterfaceOnMultiGPU(SPtr<GridImp> coarseGrid, SPtr<GridImp> fineGrid)
+CUDA_HOST void VIRTUALFLUIDS_GPU_EXPORT GridInterface::repairGridInterfaceOnMultiGPU(SPtr<GridImp> coarseGrid, SPtr<GridImp> fineGrid)
 {
     {
         std::vector<uint> tmpCFC;
diff --git a/src/gpu/GridGenerator/grid/GridInterface.h b/src/gpu/GridGenerator/grid/GridInterface.h
index b979b60d6f9a08c19702ac8fa6e9081fa3cec599..0fa224c31ab99a6bba293fe040e5189591f35bcf 100644
--- a/src/gpu/GridGenerator/grid/GridInterface.h
+++ b/src/gpu/GridGenerator/grid/GridInterface.h
@@ -8,26 +8,26 @@ class GridImp;
 class GridInterface
 {
 public:
-    HOSTDEVICE VF_PUBLIC GridInterface();
-    HOSTDEVICE VF_PUBLIC ~GridInterface();
+    HOSTDEVICE VIRTUALFLUIDS_GPU_EXPORT GridInterface();
+    HOSTDEVICE VIRTUALFLUIDS_GPU_EXPORT ~GridInterface();
 
-    HOSTDEVICE void VF_PUBLIC findInterfaceCF(const uint& indexOnCoarseGrid, GridImp* coarseGrid, GridImp* fineGrid);
-    HOSTDEVICE void VF_PUBLIC findBoundaryGridInterfaceCF(const uint& indexOnCoarseGrid, GridImp* coarseGrid, GridImp* fineGrid);
+    HOSTDEVICE void VIRTUALFLUIDS_GPU_EXPORT findInterfaceCF(const uint& indexOnCoarseGrid, GridImp* coarseGrid, GridImp* fineGrid);
+    HOSTDEVICE void VIRTUALFLUIDS_GPU_EXPORT findBoundaryGridInterfaceCF(const uint& indexOnCoarseGrid, GridImp* coarseGrid, GridImp* fineGrid);
 
 
-	HOSTDEVICE void VF_PUBLIC findInterfaceCF_GKS(const uint& indexOnCoarseGrid, GridImp* coarseGrid, GridImp* fineGrid);
+	HOSTDEVICE void VIRTUALFLUIDS_GPU_EXPORT findInterfaceCF_GKS(const uint& indexOnCoarseGrid, GridImp* coarseGrid, GridImp* fineGrid);
 
-	HOSTDEVICE void VF_PUBLIC findInterfaceFC(const uint& indexOnCoarseGrid, GridImp* coarseGrid, GridImp* fineGrid);
-    HOSTDEVICE void VF_PUBLIC findOverlapStopper(const uint& indexOnCoarseGrid, GridImp* coarseGrid, GridImp* fineGrid);
+	HOSTDEVICE void VIRTUALFLUIDS_GPU_EXPORT findInterfaceFC(const uint& indexOnCoarseGrid, GridImp* coarseGrid, GridImp* fineGrid);
+    HOSTDEVICE void VIRTUALFLUIDS_GPU_EXPORT findOverlapStopper(const uint& indexOnCoarseGrid, GridImp* coarseGrid, GridImp* fineGrid);
     
-    HOSTDEVICE void VF_PUBLIC findInvalidBoundaryNodes(const uint& indexOnCoarseGrid, GridImp* coarseGrid);
+    HOSTDEVICE void VIRTUALFLUIDS_GPU_EXPORT findInvalidBoundaryNodes(const uint& indexOnCoarseGrid, GridImp* coarseGrid);
 
-    HOSTDEVICE void VF_PUBLIC findForGridInterfaceSparseIndexCF(GridImp* coarseGrid, GridImp* fineGrid, uint index);
-    HOSTDEVICE void VF_PUBLIC findForGridInterfaceSparseIndexFC(GridImp* coarseGrid, GridImp* fineGrid, uint index);
+    HOSTDEVICE void VIRTUALFLUIDS_GPU_EXPORT findForGridInterfaceSparseIndexCF(GridImp* coarseGrid, GridImp* fineGrid, uint index);
+    HOSTDEVICE void VIRTUALFLUIDS_GPU_EXPORT findForGridInterfaceSparseIndexFC(GridImp* coarseGrid, GridImp* fineGrid, uint index);
 
-    CUDA_HOST void VF_PUBLIC repairGridInterfaceOnMultiGPU(SPtr<GridImp> coarseGrid, SPtr<GridImp> fineGrid);
+    CUDA_HOST void VIRTUALFLUIDS_GPU_EXPORT repairGridInterfaceOnMultiGPU(SPtr<GridImp> coarseGrid, SPtr<GridImp> fineGrid);
 
-    HOSTDEVICE void VF_PUBLIC print() const;
+    HOSTDEVICE void VIRTUALFLUIDS_GPU_EXPORT print() const;
 
     struct Interface
     {
diff --git a/src/gpu/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.h b/src/gpu/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.h
index cabbc67e3875653845cc05842facb47e4337a161..b5b91af92baeb4d9b69d9374dd418ba5a8b82482 100644
--- a/src/gpu/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.h
+++ b/src/gpu/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.h
@@ -8,7 +8,7 @@
 class GridImp;
 class TriangularMesh;
 
-class VF_PUBLIC GridCpuStrategy : public GridStrategy
+class VIRTUALFLUIDS_GPU_EXPORT GridCpuStrategy : public GridStrategy
 {
 public:
     virtual ~GridCpuStrategy() {};
diff --git a/src/gpu/GridGenerator/grid/GridStrategy/GridGpuStrategy/GridGpuStrategy.h b/src/gpu/GridGenerator/grid/GridStrategy/GridGpuStrategy/GridGpuStrategy.h
index a0031eafe1635a247074064c1245a14374f78f8a..8ba30824a21be31740fb5d8260528e50529a4d5a 100644
--- a/src/gpu/GridGenerator/grid/GridStrategy/GridGpuStrategy/GridGpuStrategy.h
+++ b/src/gpu/GridGenerator/grid/GridStrategy/GridGpuStrategy/GridGpuStrategy.h
@@ -8,7 +8,7 @@
 class BoundingBox;
 class TriangularMesh;
 
-class VF_PUBLIC GridGpuStrategy : public GridStrategy
+class VIRTUALFLUIDS_GPU_EXPORT GridGpuStrategy : public GridStrategy
 {
 public:
     virtual ~GridGpuStrategy() {};
diff --git a/src/gpu/GridGenerator/grid/GridStrategy/GridStrategy.h b/src/gpu/GridGenerator/grid/GridStrategy/GridStrategy.h
index bc861f8c9603987915e61275f12807e29322f567..44152ffedd5d7f04a2049f13ded85b94f5a6a90e 100644
--- a/src/gpu/GridGenerator/grid/GridStrategy/GridStrategy.h
+++ b/src/gpu/GridGenerator/grid/GridStrategy/GridStrategy.h
@@ -11,7 +11,7 @@ struct Vertex;
 class TriangularMesh;
 class GridImp;
 
-class VF_PUBLIC GridStrategy
+class VIRTUALFLUIDS_GPU_EXPORT GridStrategy
 {
 public:
     virtual ~GridStrategy() {}
diff --git a/src/gpu/GridGenerator/grid/distributions/Distribution.h b/src/gpu/GridGenerator/grid/distributions/Distribution.h
index f7aadd65fe2ed21e33b641ee6d1b0da31fc3522e..5ba90548f1d0ad40dbc818cea02892c241c69264 100644
--- a/src/gpu/GridGenerator/grid/distributions/Distribution.h
+++ b/src/gpu/GridGenerator/grid/distributions/Distribution.h
@@ -60,7 +60,7 @@ struct Distribution
 
 class Grid;
 
-class VF_PUBLIC DistributionHelper
+class VIRTUALFLUIDS_GPU_EXPORT DistributionHelper
 {
 public:
     static Distribution getDistribution7();
diff --git a/src/gpu/GridGenerator/grid/partition/Partition.h b/src/gpu/GridGenerator/grid/partition/Partition.h
index 0c0ebc870465f7e4150a758450d52f9fe57bb074..4b9c109d53c5ce5e3bad2c2459af35e02c09703f 100644
--- a/src/gpu/GridGenerator/grid/partition/Partition.h
+++ b/src/gpu/GridGenerator/grid/partition/Partition.h
@@ -14,7 +14,7 @@
 //class Grid;
 //class Transformator;
 //
-//class VF_PUBLIC Partition
+//class VIRTUALFLUIDS_GPU_EXPORT Partition
 //{
 //public:
 //    static void partitionGridMesh(SPtr<Grid> grid);
diff --git a/src/gpu/GridGenerator/io/GridVTKWriter/GridVTKWriter.h b/src/gpu/GridGenerator/io/GridVTKWriter/GridVTKWriter.h
index c55a111c5ab8f6796b4896ad847e5e09763da995..5a4ba5466e23ca763c41a024f13bf8a963874063 100644
--- a/src/gpu/GridGenerator/io/GridVTKWriter/GridVTKWriter.h
+++ b/src/gpu/GridGenerator/io/GridVTKWriter/GridVTKWriter.h
@@ -9,7 +9,7 @@ enum class WRITING_FORMAT { BINARY, ASCII };
 
 class Grid;
 
-class VF_PUBLIC GridVTKWriter
+class VIRTUALFLUIDS_GPU_EXPORT GridVTKWriter
 {
 public:
     static void writeSparseGridToVTK(SPtr<Grid> grid, const std::string& name, WRITING_FORMAT format = WRITING_FORMAT::ASCII);
diff --git a/src/gpu/GridGenerator/io/STLReaderWriter/STLReader.h b/src/gpu/GridGenerator/io/STLReaderWriter/STLReader.h
index ce84115074ad347cf6b05517af12cbcaaff37120..d0fa2d3f97dd1e1f4b9364352656226c94e6443f 100644
--- a/src/gpu/GridGenerator/io/STLReaderWriter/STLReader.h
+++ b/src/gpu/GridGenerator/io/STLReaderWriter/STLReader.h
@@ -11,7 +11,7 @@ struct Triangle;
 struct Vertex;
 class BoundingBox;
 
-class VF_PUBLIC STLReader
+class VIRTUALFLUIDS_GPU_EXPORT STLReader
 {
 public:
 
diff --git a/src/gpu/GridGenerator/io/STLReaderWriter/STLWriter.h b/src/gpu/GridGenerator/io/STLReaderWriter/STLWriter.h
index 174a8e432d911babf26c11067895870555a687d9..bd5aee2681aace14f82e328a9eeaafd621ae8482 100644
--- a/src/gpu/GridGenerator/io/STLReaderWriter/STLWriter.h
+++ b/src/gpu/GridGenerator/io/STLReaderWriter/STLWriter.h
@@ -11,7 +11,7 @@
 class Transformator;
 struct Triangle;
 
-class VF_PUBLIC STLWriter
+class VIRTUALFLUIDS_GPU_EXPORT STLWriter
 {
 public:
     static void writeSTL(std::vector<Triangle> &vec, const std::string &name, bool writeBinary = false);
diff --git a/src/gpu/GridGenerator/io/SimulationFileWriter/SimulationFileNames.h b/src/gpu/GridGenerator/io/SimulationFileWriter/SimulationFileNames.h
index b80e999da6a593e83b786315a137d368b0cf7af8..b794a2d49e9786ee28b68cb0a4494be02edfb006 100644
--- a/src/gpu/GridGenerator/io/SimulationFileWriter/SimulationFileNames.h
+++ b/src/gpu/GridGenerator/io/SimulationFileWriter/SimulationFileNames.h
@@ -5,7 +5,7 @@
 
 #include "global.h"
 
-struct VF_PUBLIC simulationFileNames
+struct VIRTUALFLUIDS_GPU_EXPORT simulationFileNames
 {
 	static const std::string coordX;
 	static const std::string coordY;
diff --git a/src/gpu/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.h b/src/gpu/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.h
index b4edfba926504ef97bfb8204dfa377cc2fac73dc..8e50697e2b37a6a9350e62bc59ca112da59982da 100644
--- a/src/gpu/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.h
+++ b/src/gpu/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.h
@@ -25,7 +25,7 @@ enum class FILEFORMAT
 class SimulationFileWriter : private NonCreatable
 {
 public:
-    VF_PUBLIC static void write(std::string folder, SPtr<GridBuilder> builder, FILEFORMAT format);
+    VIRTUALFLUIDS_GPU_EXPORT static void write(std::string folder, SPtr<GridBuilder> builder, FILEFORMAT format);
 
 private:
     static void write(SPtr<GridBuilder> builder, FILEFORMAT format);
diff --git a/src/gpu/GridGenerator/io/VTKWriterWrapper/PolyDataWriterWrapper.h b/src/gpu/GridGenerator/io/VTKWriterWrapper/PolyDataWriterWrapper.h
index fbaaf5b34393cb350600b37fbbd607e880a90e43..19a70bb42308d24cb9b5807da8b442d1be7bd2a9 100644
--- a/src/gpu/GridGenerator/io/VTKWriterWrapper/PolyDataWriterWrapper.h
+++ b/src/gpu/GridGenerator/io/VTKWriterWrapper/PolyDataWriterWrapper.h
@@ -11,11 +11,11 @@
 //class PolyDataWriterWrapper
 //{
 //public:
-//	VF_PUBLIC PolyDataWriterWrapper();
-//	VF_PUBLIC ~PolyDataWriterWrapper();
+//	VIRTUALFLUIDS_GPU_EXPORT PolyDataWriterWrapper();
+//	VIRTUALFLUIDS_GPU_EXPORT ~PolyDataWriterWrapper();
 //
-//	VF_PUBLIC virtual void addVectorArrow(std::shared_ptr<const Arrow> arrow);
-//	VF_PUBLIC virtual void writePolyDataToFile(const std::string &filename) const;
+//	VIRTUALFLUIDS_GPU_EXPORT virtual void addVectorArrow(std::shared_ptr<const Arrow> arrow);
+//	VIRTUALFLUIDS_GPU_EXPORT virtual void writePolyDataToFile(const std::string &filename) const;
 //
 //private:
 //    std::shared_ptr<PolyDataWriter> writer;
diff --git a/src/gpu/GridGenerator/io/VTKWriterWrapper/UnstructuredGridWrapper.h b/src/gpu/GridGenerator/io/VTKWriterWrapper/UnstructuredGridWrapper.h
index 70b4a0655c145da6c7d0e292190b9896043cc0d4..a02a04f95db5fab74a1aac115d874580aa26bec5 100644
--- a/src/gpu/GridGenerator/io/VTKWriterWrapper/UnstructuredGridWrapper.h
+++ b/src/gpu/GridGenerator/io/VTKWriterWrapper/UnstructuredGridWrapper.h
@@ -13,7 +13,7 @@
 //struct Vertex;
 //class Grid;
 //
-//class VF_PUBLIC UnstructuredGridWrapper
+//class VIRTUALFLUIDS_GPU_EXPORT UnstructuredGridWrapper
 //{
 //public:
 //    UnstructuredGridWrapper();
diff --git a/src/gpu/GridGenerator/utilities/cuda/LaunchParameter.cuh b/src/gpu/GridGenerator/utilities/cuda/LaunchParameter.cuh
index 4bfc258495726770f3a9cafa99fd920e6a54bbfd..e50318ed77c50f43994fb7e97fa32be52770cde8 100644
--- a/src/gpu/GridGenerator/utilities/cuda/LaunchParameter.cuh
+++ b/src/gpu/GridGenerator/utilities/cuda/LaunchParameter.cuh
@@ -11,10 +11,10 @@
 class LaunchParameter
 {
 public:
-	CUDA_HOST VF_PUBLIC LaunchParameter();
+	CUDA_HOST VIRTUALFLUIDS_GPU_EXPORT LaunchParameter();
 
-	CUDA_HOST VF_PUBLIC static LaunchParameter make_2D1D_launchParameter(int size, int threadDim);
-	CUDA_HOST VF_PUBLIC static LaunchParameter make_1D1D_launchParameter(int size, int threadDim);
+	CUDA_HOST VIRTUALFLUIDS_GPU_EXPORT static LaunchParameter make_2D1D_launchParameter(int size, int threadDim);
+	CUDA_HOST VIRTUALFLUIDS_GPU_EXPORT static LaunchParameter make_1D1D_launchParameter(int size, int threadDim);
 
 	DEVICE static int getGlobalIdx_2D_1D();
 	DEVICE static int getGlobalIdx_1D_1D();
diff --git a/src/gpu/GridGenerator/utilities/math/Math.h b/src/gpu/GridGenerator/utilities/math/Math.h
index d4b9823b87138e28f8711a65a256cdc005434f84..8bf90f83ad9855ada90cf9bfd0076335454c18c5 100644
--- a/src/gpu/GridGenerator/utilities/math/Math.h
+++ b/src/gpu/GridGenerator/utilities/math/Math.h
@@ -11,7 +11,7 @@
 
 namespace vf 
 {
-    class VF_PUBLIC Math
+    class VIRTUALFLUIDS_GPU_EXPORT Math
     {
     public:
         HOSTDEVICE static bool equal(const real& val1, const real& val2, real maxRelDiff = EPSILON);
diff --git a/src/gpu/GridGenerator/utilities/transformator/ArrowTransformator.h b/src/gpu/GridGenerator/utilities/transformator/ArrowTransformator.h
index deaa4403e0e960a8d110aec3b8b3ab9b3ee0d423..8048fb93649812c73ca089f82a211eaa52f9e193 100644
--- a/src/gpu/GridGenerator/utilities/transformator/ArrowTransformator.h
+++ b/src/gpu/GridGenerator/utilities/transformator/ArrowTransformator.h
@@ -10,7 +10,7 @@ class Arrow;
 class ArrowTransformator
 {
 public:
-    static VF_PUBLIC std::shared_ptr<ArrowTransformator> makeTransformator(real delta, real dx, real dy, real dz);
+    static VIRTUALFLUIDS_GPU_EXPORT std::shared_ptr<ArrowTransformator> makeTransformator(real delta, real dx, real dy, real dz);
 	virtual ~ArrowTransformator() {}
 
 protected:
diff --git a/src/gpu/GridGenerator/utilities/transformator/Transformator.h b/src/gpu/GridGenerator/utilities/transformator/Transformator.h
index 3bf5b5b4528aeba11adaa0cc596ec9ac78e3cbb9..24d57e91ab59f9c129c902b7c008f572c80fd96b 100644
--- a/src/gpu/GridGenerator/utilities/transformator/Transformator.h
+++ b/src/gpu/GridGenerator/utilities/transformator/Transformator.h
@@ -14,7 +14,7 @@ struct Vertex;
 class Transformator
 {
 public:
-    static VF_PUBLIC std::shared_ptr<Transformator> makeTransformator(real delta, real dx, real dy, real dz);
+    static VIRTUALFLUIDS_GPU_EXPORT std::shared_ptr<Transformator> makeTransformator(real delta, real dx, real dy, real dz);
 	virtual ~Transformator() {}
 
 protected:
diff --git a/src/gpu/GridGenerator/utilities/transformator/TransformatorImp.h b/src/gpu/GridGenerator/utilities/transformator/TransformatorImp.h
index 64a52604b472c36f1ba3a757bcd2cf20edf1d905..ec5caefd8c3b85cb3a0d0ace78cee80a7e9deb67 100644
--- a/src/gpu/GridGenerator/utilities/transformator/TransformatorImp.h
+++ b/src/gpu/GridGenerator/utilities/transformator/TransformatorImp.h
@@ -27,25 +27,25 @@ class TransformatorImp
 	: public Transformator, public ArrowTransformator
 {
 public:
-	VF_PUBLIC TransformatorImp();
-	VF_PUBLIC TransformatorImp(const TransformatorImp& trafo);
-	VF_PUBLIC TransformatorImp(real delta, const Vertex& translater);
-	VF_PUBLIC TransformatorImp(real delta, real dx, real dy, real dz);
-	VF_PUBLIC virtual ~TransformatorImp();
+	VIRTUALFLUIDS_GPU_EXPORT TransformatorImp();
+	VIRTUALFLUIDS_GPU_EXPORT TransformatorImp(const TransformatorImp& trafo);
+	VIRTUALFLUIDS_GPU_EXPORT TransformatorImp(real delta, const Vertex& translater);
+	VIRTUALFLUIDS_GPU_EXPORT TransformatorImp(real delta, real dx, real dy, real dz);
+	VIRTUALFLUIDS_GPU_EXPORT virtual ~TransformatorImp();
 	
-	VF_PUBLIC void transformWorldToGrid(Triangle &value) const;
-	VF_PUBLIC void transformWorldToGrid(TriangularMesh &geom) const;
-	VF_PUBLIC void transformWorldToGrid(Vertex &value) const;
+	VIRTUALFLUIDS_GPU_EXPORT void transformWorldToGrid(Triangle &value) const;
+	VIRTUALFLUIDS_GPU_EXPORT void transformWorldToGrid(TriangularMesh &geom) const;
+	VIRTUALFLUIDS_GPU_EXPORT void transformWorldToGrid(Vertex &value) const;
 
-    VF_PUBLIC void transformGridToWorld(Triangle &t) const;
-	VF_PUBLIC void transformGridToWorld(Vertex &value) const;
+    VIRTUALFLUIDS_GPU_EXPORT void transformGridToWorld(Triangle &t) const;
+	VIRTUALFLUIDS_GPU_EXPORT void transformGridToWorld(Vertex &value) const;
 
-	VF_PUBLIC void transformGridToWorld(BoundingBox &box) const;
-	VF_PUBLIC void transformWorldToGrid(BoundingBox &box) const;
+	VIRTUALFLUIDS_GPU_EXPORT void transformGridToWorld(BoundingBox &box) const;
+	VIRTUALFLUIDS_GPU_EXPORT void transformWorldToGrid(BoundingBox &box) const;
 
-	VF_PUBLIC bool operator==(const TransformatorImp& trafo) const;
+	VIRTUALFLUIDS_GPU_EXPORT bool operator==(const TransformatorImp& trafo) const;
 
-	VF_PUBLIC virtual void transformGridToWorld(std::shared_ptr<Arrow> arrow) const override;
+	VIRTUALFLUIDS_GPU_EXPORT virtual void transformGridToWorld(std::shared_ptr<Arrow> arrow) const override;
 
 private:
 	real delta;
diff --git a/src/gpu/Traffic/GPU/TrafficTimestep.h b/src/gpu/Traffic/GPU/TrafficTimestep.h
index f06b9e4c077a311d5036eacf19549289143f30c9..a92cfd6e32602d74bb251288283957acdd36e497 100644
--- a/src/gpu/Traffic/GPU/TrafficTimestep.h
+++ b/src/gpu/Traffic/GPU/TrafficTimestep.h
@@ -16,7 +16,7 @@ class Sink;
 class Junction;
 class Source;
 
-class VF_PUBLIC TrafficTimestep
+class VIRTUALFLUIDS_GPU_EXPORT TrafficTimestep
 {
 private:
 
diff --git a/src/gpu/Traffic/Junction/Junction.h b/src/gpu/Traffic/Junction/Junction.h
index 9f83a977bce3517e7343711263f8e22e969c2b5b..620cf330b7a9965f16c38cdd3f7368c0a68eda15 100644
--- a/src/gpu/Traffic/Junction/Junction.h
+++ b/src/gpu/Traffic/Junction/Junction.h
@@ -8,7 +8,7 @@
 
 class TrafficMovement;
 
-class VF_PUBLIC Junction
+class VIRTUALFLUIDS_GPU_EXPORT Junction
 {
 public:
 	virtual void checkOutCellIndices(const uint roadLength) const = 0;
diff --git a/src/gpu/Traffic/Junction/JunctionData.h b/src/gpu/Traffic/Junction/JunctionData.h
index f9b4a452ca1fd7d4343e4702fcd69908c6c1974a..61e891f7a08aeacd0b61b513512139888f25eb72 100644
--- a/src/gpu/Traffic/Junction/JunctionData.h
+++ b/src/gpu/Traffic/Junction/JunctionData.h
@@ -7,7 +7,7 @@
 #include "Utilities/RandomHelper.h"
 
 
-struct VF_PUBLIC JunctionData
+struct VIRTUALFLUIDS_GPU_EXPORT JunctionData
 {
 public:
 	std::vector<uint> inCellIndices;
diff --git a/src/gpu/Traffic/Junction/JunctionRandom.h b/src/gpu/Traffic/Junction/JunctionRandom.h
index ff41237fbc74813d9d98471512d1c7f2c4675b8e..9096b23a9dc8c96684bbb67bb431ecc96d2cb5cb 100644
--- a/src/gpu/Traffic/Junction/JunctionRandom.h
+++ b/src/gpu/Traffic/Junction/JunctionRandom.h
@@ -9,7 +9,7 @@
 
 class TrafficMovement;
 
-class VF_PUBLIC JunctionRandom :
+class VIRTUALFLUIDS_GPU_EXPORT JunctionRandom :
 	public Junction
 {
 
diff --git a/src/gpu/Traffic/Output/CarDisplay.h b/src/gpu/Traffic/Output/CarDisplay.h
index 5c7f4a643919e9d9d13ad65cc8440e12dbc42b08..966b5b2bc3c76df9592a945a3b609967aef5ec1a 100644
--- a/src/gpu/Traffic/Output/CarDisplay.h
+++ b/src/gpu/Traffic/Output/CarDisplay.h
@@ -9,7 +9,7 @@
 #include "Junction/Junction.h"
 
 
-class VF_PUBLIC CarDisplay {
+class VIRTUALFLUIDS_GPU_EXPORT CarDisplay {
 public:
 	CarDisplay(std::vector<int> **pcurrent, const uint safetyDistance);
 	~CarDisplay() {};
diff --git a/src/gpu/Traffic/Output/ConcBySpeedAndAcceleration.h b/src/gpu/Traffic/Output/ConcBySpeedAndAcceleration.h
index 59603e4735e6456c44489785c10803b3d97a2ede..57b45a0b9110699e0ceff046b57fe4bec2012ef6 100644
--- a/src/gpu/Traffic/Output/ConcBySpeedAndAcceleration.h
+++ b/src/gpu/Traffic/Output/ConcBySpeedAndAcceleration.h
@@ -2,7 +2,7 @@
 
 #include "ConcentrationOutwriter.h"
 
-class VF_PUBLIC ConcBySpeedAndAcceleration :
+class VIRTUALFLUIDS_GPU_EXPORT ConcBySpeedAndAcceleration :
 	public ConcentrationOutwriter
 {
 public:
diff --git a/src/gpu/Traffic/Output/ConcentrationByPosition.h b/src/gpu/Traffic/Output/ConcentrationByPosition.h
index 48c93878e9f607ec1a3029fd61f8524c2816a6d9..a7cc1d5adb7261de6d5589fc194c0ccacc468b94 100644
--- a/src/gpu/Traffic/Output/ConcentrationByPosition.h
+++ b/src/gpu/Traffic/Output/ConcentrationByPosition.h
@@ -2,7 +2,7 @@
 
 #include "ConcentrationOutwriter.h"
 
-class VF_PUBLIC ConcentrationByPosition:
+class VIRTUALFLUIDS_GPU_EXPORT ConcentrationByPosition:
 	public ConcentrationOutwriter
 {
 public:
diff --git a/src/gpu/Traffic/Output/ConcentrationOutwriter.h b/src/gpu/Traffic/Output/ConcentrationOutwriter.h
index e3c28b0f5e02843e74cbe4c58bf2a53871e9dc68..5b08dc2c8ba0112a062a742734e96b828848afba 100644
--- a/src/gpu/Traffic/Output/ConcentrationOutwriter.h
+++ b/src/gpu/Traffic/Output/ConcentrationOutwriter.h
@@ -5,7 +5,7 @@
 #include <VirtualFluidsDefinitions.h>
 #include "Core/DataTypes.h"
 
-class VF_PUBLIC ConcentrationOutwriter
+class VIRTUALFLUIDS_GPU_EXPORT ConcentrationOutwriter
 {
 public:
 	virtual void resetConcentrations();
diff --git a/src/gpu/Traffic/RoadNetwork/RoadMaker.h b/src/gpu/Traffic/RoadNetwork/RoadMaker.h
index 2b92d8d1f597fccdec2fc43fc1e21804f5a5265a..df6ecda174382975e6fb58b51eed65b561d45cca 100644
--- a/src/gpu/Traffic/RoadNetwork/RoadMaker.h
+++ b/src/gpu/Traffic/RoadNetwork/RoadMaker.h
@@ -6,7 +6,7 @@
 #include "Utilities/RandomHelper.h"
 
 
-struct VF_PUBLIC RoadMaker :
+struct VIRTUALFLUIDS_GPU_EXPORT RoadMaker :
 	public RoadNetworkData
 {
 public:
diff --git a/src/gpu/Traffic/RoadNetwork/RoadNetworkData.h b/src/gpu/Traffic/RoadNetwork/RoadNetworkData.h
index e60a107d0bd72a66bbbf0f4ffd05ffeea3b2a419..92928e5be9ce18fadbae28e72fee7c34a23fbea3 100644
--- a/src/gpu/Traffic/RoadNetwork/RoadNetworkData.h
+++ b/src/gpu/Traffic/RoadNetwork/RoadNetworkData.h
@@ -9,7 +9,7 @@
 #include "Junction/Junction.h"
 
 
-struct VF_PUBLIC RoadNetworkData
+struct VIRTUALFLUIDS_GPU_EXPORT RoadNetworkData
 {
 protected:
 	friend class TrafficMovement;
diff --git a/src/gpu/Traffic/Sink/Sink.h b/src/gpu/Traffic/Sink/Sink.h
index 4954b40eb6992b45f2b35d6b7f2369426ed63680..c83c6a5f28004ff29acfd63b295bcae8a96cd4d2 100644
--- a/src/gpu/Traffic/Sink/Sink.h
+++ b/src/gpu/Traffic/Sink/Sink.h
@@ -2,7 +2,7 @@
 
 #include "SinkData.h"
 
-class VF_PUBLIC Sink
+class VIRTUALFLUIDS_GPU_EXPORT Sink
 {
 public:
 	virtual real getPossibilityBeingBlocked() const = 0;
diff --git a/src/gpu/Traffic/Sink/SinkData.h b/src/gpu/Traffic/Sink/SinkData.h
index fe573691cfc78af999b6efc8a817df3c0ebfb311..90b8d183777338a1502ec6254b15d011051d72fb 100644
--- a/src/gpu/Traffic/Sink/SinkData.h
+++ b/src/gpu/Traffic/Sink/SinkData.h
@@ -3,7 +3,7 @@
 #include <VirtualFluidsDefinitions.h>
 #include "Core/DataTypes.h"
 
-struct VF_PUBLIC SinkData {
+struct VIRTUALFLUIDS_GPU_EXPORT SinkData {
 	uint sinkIndex;
 	real sinkBlockedPossibility;
 };
\ No newline at end of file
diff --git a/src/gpu/Traffic/Sink/SinkRandom.h b/src/gpu/Traffic/Sink/SinkRandom.h
index c5c28bf778d49c3b88d4cb6567e2bd0011f41ae9..5e3f10db83a007f4a8592e99ff2960fe4d799b3b 100644
--- a/src/gpu/Traffic/Sink/SinkRandom.h
+++ b/src/gpu/Traffic/Sink/SinkRandom.h
@@ -7,7 +7,7 @@
 
 #include "Utilities/RandomHelper.h"
 
-class VF_PUBLIC SinkRandom:
+class VIRTUALFLUIDS_GPU_EXPORT SinkRandom:
 	public Sink
 {
 private:
diff --git a/src/gpu/Traffic/Source/Source.h b/src/gpu/Traffic/Source/Source.h
index 111ed39ce305e4d93e395137718a6ece43358309..8d7555f1b06a45d9ffc34e57877b989bedec3103 100644
--- a/src/gpu/Traffic/Source/Source.h
+++ b/src/gpu/Traffic/Source/Source.h
@@ -3,7 +3,7 @@
 
 #include "SourceData.h"
 
-class VF_PUBLIC Source
+class VIRTUALFLUIDS_GPU_EXPORT Source
 {
 public:
 	virtual uint getIndex() const = 0;
diff --git a/src/gpu/Traffic/Source/SourceData.h b/src/gpu/Traffic/Source/SourceData.h
index 71a6c0e8a3d9be8fb294782279a1510623d19d04..41bb34a9ca0a7c76d23530d0ed36fa6b5e24f512 100644
--- a/src/gpu/Traffic/Source/SourceData.h
+++ b/src/gpu/Traffic/Source/SourceData.h
@@ -6,7 +6,7 @@
 #include <vector>
 
 
-struct VF_PUBLIC SourceData {
+struct VIRTUALFLUIDS_GPU_EXPORT SourceData {
 	uint sourceIndex;
 	real sourcePossibility;
 	uint maxVelocity;
diff --git a/src/gpu/Traffic/Source/SourceRandom.h b/src/gpu/Traffic/Source/SourceRandom.h
index b7c6dac9a48190f15ccefd369d38dcfa8f431b1d..b8adc9355218f398f1497fdaf732e1a0138262d2 100644
--- a/src/gpu/Traffic/Source/SourceRandom.h
+++ b/src/gpu/Traffic/Source/SourceRandom.h
@@ -8,7 +8,7 @@
 
 
 
-class VF_PUBLIC SourceRandom:
+class VIRTUALFLUIDS_GPU_EXPORT SourceRandom:
 	public Source
 {
 private:
diff --git a/src/gpu/Traffic/TrafficMovement.h b/src/gpu/Traffic/TrafficMovement.h
index b1fb5ffd46b3d40319ce81096c464f80af3c53ec..772199354e06662e56c2cb52f705d29e26055e97 100644
--- a/src/gpu/Traffic/TrafficMovement.h
+++ b/src/gpu/Traffic/TrafficMovement.h
@@ -19,7 +19,7 @@ class TrafficLogger;
 //class CarDisplay;
 class TrafficTimestep;
 
-class VF_PUBLIC TrafficMovement
+class VIRTUALFLUIDS_GPU_EXPORT TrafficMovement
 {
 public:
 	TrafficMovement(std::shared_ptr<RoadNetworkData> road, const real dawdlePossibility);
diff --git a/src/gpu/Traffic/TrafficMovementFactory - Kopie.h b/src/gpu/Traffic/TrafficMovementFactory - Kopie.h
index c3d4356d9d59d37a49a61dc9563ccae218c66256..a8b825ada55e070b8a7fcd2053c0bebc2f16af04 100644
--- a/src/gpu/Traffic/TrafficMovementFactory - Kopie.h	
+++ b/src/gpu/Traffic/TrafficMovementFactory - Kopie.h	
@@ -10,7 +10,7 @@
 #include "GridGenerator/StreetPointFinder/StreetPointFinder.h"
 
 
-class VF_PUBLIC TrafficMovementFactoryTest :
+class VIRTUALFLUIDS_GPU_EXPORT TrafficMovementFactoryTest :
 	public TrafficMovementFactory {
 public:
 	TrafficMovementFactoryTest() {};
diff --git a/src/gpu/Traffic/TrafficMovementFactory.h b/src/gpu/Traffic/TrafficMovementFactory.h
index a73c5e881c5def584a0e70e04bf5f5a3c764eb7b..9025ca607d9957156a486dfcb8a0ee9cbe229ea0 100644
--- a/src/gpu/Traffic/TrafficMovementFactory.h
+++ b/src/gpu/Traffic/TrafficMovementFactory.h
@@ -11,7 +11,7 @@
 class TrafficMovement;
 class TrafficLogger;
 
-class VF_PUBLIC TrafficMovementFactory
+class VIRTUALFLUIDS_GPU_EXPORT TrafficMovementFactory
 {
 public:
 	TrafficMovementFactory();
diff --git a/src/gpu/Traffic/TrafficMovementFactoryTestRoads.h b/src/gpu/Traffic/TrafficMovementFactoryTestRoads.h
index c1ae8b9dd5a34d7d986d14d5a2737d20311d5d37..ea779799cbde4cf00e6d26b28759b97fee8b1cf6 100644
--- a/src/gpu/Traffic/TrafficMovementFactoryTestRoads.h
+++ b/src/gpu/Traffic/TrafficMovementFactoryTestRoads.h
@@ -10,7 +10,7 @@
 #include "GridGenerator/StreetPointFinder/StreetPointFinder.h"
 
 
-class VF_PUBLIC TrafficMovementFactoryTest :
+class VIRTUALFLUIDS_GPU_EXPORT TrafficMovementFactoryTest :
 	public TrafficMovementFactory {
 public:
 	TrafficMovementFactoryTest() {};
diff --git a/src/gpu/Traffic/Utilities/ConsoleColor.h b/src/gpu/Traffic/Utilities/ConsoleColor.h
index 1307b14e50b71e056f84454fcd0b2e127a9f0b4b..e45f35df7aeba3cbaff37982f68d57bafa3410fd 100644
--- a/src/gpu/Traffic/Utilities/ConsoleColor.h
+++ b/src/gpu/Traffic/Utilities/ConsoleColor.h
@@ -2,7 +2,7 @@
 
 
 
-class VF_PUBLIC ConsoleColor
+class VIRTUALFLUIDS_GPU_EXPORT ConsoleColor
 {
 public:
 	static void setDefaultWhite();
diff --git a/src/gpu/Traffic/Utilities/Logger.h b/src/gpu/Traffic/Utilities/Logger.h
index 6d2544c96c37e4eed19f79b02bfe6b509f74cb28..c8d13e5c3da1d02fd1795925f5668bc7433a4006 100644
--- a/src/gpu/Traffic/Utilities/Logger.h
+++ b/src/gpu/Traffic/Utilities/Logger.h
@@ -6,7 +6,7 @@
 #include <string>
 #include <fstream>
 
-class VF_PUBLIC TrafficLogger
+class VIRTUALFLUIDS_GPU_EXPORT TrafficLogger
 {
 private:
 	std::string filename;	
diff --git a/src/gpu/Traffic/Utilities/RandomHelper.h b/src/gpu/Traffic/Utilities/RandomHelper.h
index c13164060a2346d02292c1b82eed0ab92c086d2e..3d3dac8e22520f0452999419932e2bd5e5a967d9 100644
--- a/src/gpu/Traffic/Utilities/RandomHelper.h
+++ b/src/gpu/Traffic/Utilities/RandomHelper.h
@@ -3,7 +3,7 @@
 #include <random>
 #include <VirtualFluidsDefinitions.h>
 
-class VF_PUBLIC RandomHelper
+class VIRTUALFLUIDS_GPU_EXPORT RandomHelper
 {
 public:
 	static std::mt19937 make_engine();
diff --git a/src/gpu/Traffic/Utilities/VectorHelper.h b/src/gpu/Traffic/Utilities/VectorHelper.h
index ee7bce7065e89be05e4fe3ffdb30a46313eeac29..8a94ca138d63c9fb6cd74265aed6ff27c7eb1dc0 100644
--- a/src/gpu/Traffic/Utilities/VectorHelper.h
+++ b/src/gpu/Traffic/Utilities/VectorHelper.h
@@ -5,7 +5,7 @@
 #include <VirtualFluidsDefinitions.h>
 #include "Core/DataTypes.h"
 
-class VF_PUBLIC VectorHelper
+class VIRTUALFLUIDS_GPU_EXPORT VectorHelper
 {
 public:
 	static void fillVector(std::vector<int>& vector, int insertNumber);
diff --git a/src/gpu/Traffic/Utilities/invalidInput_error.h b/src/gpu/Traffic/Utilities/invalidInput_error.h
index fc50c3d6b3ab656699ca85b711c585ad69ed6ba7..641fc96b71cb26932ba3d43407a6eb8c0d1154c9 100644
--- a/src/gpu/Traffic/Utilities/invalidInput_error.h
+++ b/src/gpu/Traffic/Utilities/invalidInput_error.h
@@ -4,7 +4,7 @@
 // using standard exceptions
 #include <stdexcept>
 
-class VF_PUBLIC invalidInput_error :
+class VIRTUALFLUIDS_GPU_EXPORT invalidInput_error :
 	public std::runtime_error
 {
 public:
diff --git a/src/gpu/VirtualFluidsDefinitions.in.h b/src/gpu/VirtualFluidsDefinitions.in.h
index 567b289f8731a68f02ab25c3f3a1bd5713a57ad8..2d5822c1b1988fbfbb205d85a1e976161f791874 100644
--- a/src/gpu/VirtualFluidsDefinitions.in.h
+++ b/src/gpu/VirtualFluidsDefinitions.in.h
@@ -41,8 +41,8 @@
   #endif
 #endif
 
-// Now we use the generic helper definitions above to define VF_PUBLIC, VF_PROTECTED
-// and VF_PRIVATE. VF_PUBLIC is for symbols part of the public application programming
+// Now we use the generic helper definitions above to define VIRTUALFLUIDS_GPU_EXPORT, VF_PROTECTED
+// and VF_PRIVATE. VIRTUALFLUIDS_GPU_EXPORT is for symbols part of the public application programming
 // interface (API), VF_PROTECTED is for symbols used e.g. by public templated or
 // inlined code. These symbols must also be publicly available when compiling the
 // application. VF_PRIVATE are symbols for internal use inside the library only.
@@ -51,16 +51,16 @@
    // defined if VF is compiled as a shared library
    #ifdef VF_SHARED_LIB_SELECT_IMPORTS
       // defined if we are building the VF SHARED_LIB (instead of using it)
-      #define VF_PUBLIC VF_SHARED_LIB_IMPORT
+      #define VIRTUALFLUIDS_GPU_EXPORT VF_SHARED_LIB_IMPORT
    #else
-      #define VF_PUBLIC VF_SHARED_LIB_EXPORT
+      #define VIRTUALFLUIDS_GPU_EXPORT VF_SHARED_LIB_EXPORT
    #endif
    #define VF_PRIVATE VF_SHARED_LIB_LOCAL
 #else
    // VF_SHARED_LIB is not defined: this means VF is a static library
-   #define VF_PUBLIC
+   #define VIRTUALFLUIDS_GPU_EXPORT
    #define VF_PRIVATE
 #endif
-#define VF_PROTECTED VF_PUBLIC
+#define VF_PROTECTED VIRTUALFLUIDS_GPU_EXPORT
 
 #endif
diff --git a/src/gpu/VirtualFluids_GPU/Communication/Communicator.h b/src/gpu/VirtualFluids_GPU/Communication/Communicator.h
index 221cc10135633b2c1df72fb01201a5905cea3308..8f7f9fa3fb97db6bb99c5844168168acc87e1668 100644
--- a/src/gpu/VirtualFluids_GPU/Communication/Communicator.h
+++ b/src/gpu/VirtualFluids_GPU/Communication/Communicator.h
@@ -20,7 +20,7 @@
 
 
 
-class VF_PUBLIC Communicator
+class VIRTUALFLUIDS_GPU_EXPORT Communicator
 {
 public:
 	static Communicator* getInstanz();
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridProvider.h b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridProvider.h
index ed263a124405a280d4270d0db011e37ec1ba836c..064ffb4ac82c257ba517099910e21ec05a3b2ab0 100644
--- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridProvider.h
+++ b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridProvider.h
@@ -13,7 +13,7 @@ class Parameter;
 class GridBuilder;
 class CudaMemoryManager;
 
-class VF_PUBLIC GridProvider
+class VIRTUALFLUIDS_GPU_EXPORT GridProvider
 {
 public:
     static std::shared_ptr<GridProvider> makeGridGenerator(std::shared_ptr<GridBuilder> builder, std::shared_ptr<Parameter> para, std::shared_ptr<CudaMemoryManager> cudaManager);
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h
index a7b75b4a8f8c97f1050d08ecb40d7da47a8ca0e4..0b5c66eaff4c8b11d02a449917504e9e6c6f6c97 100644
--- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h
+++ b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h
@@ -16,7 +16,7 @@ class BoundaryValues;
 class BoundaryQs;
 class CoordNeighborGeoV;
 
-class VF_PUBLIC GridReader
+class VIRTUALFLUIDS_GPU_EXPORT GridReader
 	: public GridProvider
 {
 private:
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h
index 7ab3ddc6892a4aa6af178aca219264110f16ffa4..d2ebcf217268de1254088628a5aa2069f67a9e21 100644
--- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h
+++ b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h
@@ -22,8 +22,8 @@ private:
 	std::shared_ptr<GridBuilder> builder;
 
 public:
-    VF_PUBLIC GridGenerator(std::shared_ptr<GridBuilder> builder, std::shared_ptr<Parameter> para, std::shared_ptr<CudaMemoryManager> cudaManager);
-	VF_PUBLIC virtual ~GridGenerator();
+    VIRTUALFLUIDS_GPU_EXPORT GridGenerator(std::shared_ptr<GridBuilder> builder, std::shared_ptr<Parameter> para, std::shared_ptr<CudaMemoryManager> cudaManager);
+	VIRTUALFLUIDS_GPU_EXPORT virtual ~GridGenerator();
 
 	void allocArrays_CoordNeighborGeo() override;
 	void allocArrays_BoundaryValues() override;
diff --git a/src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.h b/src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.h
index d23a73f92a34faf90e60a005f0c3cf78a9a2f7b1..61892741d477bb6eef7e0c97a51ce1d6391d5939 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.h
+++ b/src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.h
@@ -17,7 +17,7 @@
 class Parameter;
 class PorousMedia;
 
-class VF_PUBLIC CudaMemoryManager
+class VIRTUALFLUIDS_GPU_EXPORT CudaMemoryManager
 {
 public:
 	static std::shared_ptr<CudaMemoryManager> make(std::shared_ptr<Parameter> parameter);
diff --git a/src/gpu/VirtualFluids_GPU/GPU/EnstrophyAnalyzer.h b/src/gpu/VirtualFluids_GPU/GPU/EnstrophyAnalyzer.h
index ea5542a44b81121285b030d3c9659913ffb85b6a..f9c6a5177e0e59dae0707465ca246fc04cd29bb8 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/EnstrophyAnalyzer.h
+++ b/src/gpu/VirtualFluids_GPU/GPU/EnstrophyAnalyzer.h
@@ -11,7 +11,7 @@
 
 class Parameter;
 
-class VF_PUBLIC EnstrophyAnalyzer
+class VIRTUALFLUIDS_GPU_EXPORT EnstrophyAnalyzer
 {
 private:
 
diff --git a/src/gpu/VirtualFluids_GPU/GPU/KineticEnergyAnalyzer.h b/src/gpu/VirtualFluids_GPU/GPU/KineticEnergyAnalyzer.h
index 00970a610c91f4965564b30ee628b083d56d527a..9022527337333ab512a2c17e21ce8b73081af930 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/KineticEnergyAnalyzer.h
+++ b/src/gpu/VirtualFluids_GPU/GPU/KineticEnergyAnalyzer.h
@@ -11,7 +11,7 @@
 
 class Parameter;
 
-class VF_PUBLIC KineticEnergyAnalyzer
+class VIRTUALFLUIDS_GPU_EXPORT KineticEnergyAnalyzer
 {
 private:
 
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactory.h b/src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactory.h
index c57780e069bbd8b02954fb16f10f78171142257d..d5602030346f90309f3baf39df41dc9929c86e5a 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactory.h
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactory.h
@@ -12,7 +12,7 @@ class ADKernel;
 class Parameter;
 class PorousMedia;
 
-class VF_PUBLIC KernelFactory
+class VIRTUALFLUIDS_GPU_EXPORT KernelFactory
 {
 public:
 	virtual std::vector< std::shared_ptr< Kernel>> makeKernels(std::shared_ptr<Parameter> para) = 0;
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.h b/src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.h
index f8fd6cbdd6c12501e04714af6774c90f971bfe42..d8fba02b345c24fba1a310448a86b084cdf3bce8 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.h
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.h
@@ -5,7 +5,7 @@
 
 class PorousMedia;
 
-class VF_PUBLIC KernelFactoryImp : public KernelFactory
+class VIRTUALFLUIDS_GPU_EXPORT KernelFactoryImp : public KernelFactory
 {
 public:
 	static std::shared_ptr< KernelFactoryImp> getInstance();
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/Mapper/ADKernelMapper/ADKernelMapper.h b/src/gpu/VirtualFluids_GPU/Kernel/Utilities/Mapper/ADKernelMapper/ADKernelMapper.h
index b6a75a573090f4703e68a4d3ff6829458eb3a950..bdeee67bb49fabad75828d92809033a5f8eb4dfd 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/Mapper/ADKernelMapper/ADKernelMapper.h
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Utilities/Mapper/ADKernelMapper/ADKernelMapper.h
@@ -7,7 +7,7 @@
 #include <memory>
 #include <string>
 
-class VF_PUBLIC ADKernelMapper
+class VIRTUALFLUIDS_GPU_EXPORT ADKernelMapper
 {
 public:
 	static std::shared_ptr<ADKernelMapper> getInstance();
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/Mapper/KernelMapper/KernelMapper.h b/src/gpu/VirtualFluids_GPU/Kernel/Utilities/Mapper/KernelMapper/KernelMapper.h
index b9b1ec5fd8342744b736a246ad9401fb822578fd..593a86978b1e03c493b7f759e681f1a739ae68ad 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/Mapper/KernelMapper/KernelMapper.h
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Utilities/Mapper/KernelMapper/KernelMapper.h
@@ -7,7 +7,7 @@
 #include <memory>
 #include <string>
 
-class VF_PUBLIC KernelMapper
+class VIRTUALFLUIDS_GPU_EXPORT KernelMapper
 {
 public:
 	static std::shared_ptr<KernelMapper> getInstance(); 
diff --git a/src/gpu/VirtualFluids_GPU/LBM/Simulation.h b/src/gpu/VirtualFluids_GPU/LBM/Simulation.h
index 925c465b3b319d9768a7c68ddc41bf5aa5fcdb27..0366685dbaae8e1f6c1f4e8cc013430176953170 100644
--- a/src/gpu/VirtualFluids_GPU/LBM/Simulation.h
+++ b/src/gpu/VirtualFluids_GPU/LBM/Simulation.h
@@ -29,7 +29,7 @@ class PreProcessor;
 class PreProcessorFactory;
 class TrafficMovementFactory;
 
-class VF_PUBLIC Simulation
+class VIRTUALFLUIDS_GPU_EXPORT Simulation
 {
 public:
 	Simulation();
diff --git a/src/gpu/VirtualFluids_GPU/Output/FileWriter.cpp b/src/gpu/VirtualFluids_GPU/Output/FileWriter.cpp
index 01dd67f8d37e1e94ad59b192a1f6067a9cf1ea2a..7abf61b862968dc3cb78c43a4e19aa63091063d0 100644
--- a/src/gpu/VirtualFluids_GPU/Output/FileWriter.cpp
+++ b/src/gpu/VirtualFluids_GPU/Output/FileWriter.cpp
@@ -82,7 +82,7 @@ bool FileWriter::isPeriodicCell(std::shared_ptr<Parameter> para, int level, unsi
 		   (para->getParH(level)->coordZ_SP[number5] < para->getParH(level)->coordZ_SP[number1]);
 }
 
-void VF_PUBLIC FileWriter::writeCollectionFile(std::shared_ptr<Parameter> para, unsigned int timestep)
+void VIRTUALFLUIDS_GPU_EXPORT FileWriter::writeCollectionFile(std::shared_ptr<Parameter> para, unsigned int timestep)
 {
 
     std::string filename = para->getFName() + "_bin_ID_" + StringUtil::toString<int>(para->getMyID()) + "_t_" + StringUtil::toString<int>(timestep) + ".vtk";
@@ -126,7 +126,7 @@ void VF_PUBLIC FileWriter::writeCollectionFile(std::shared_ptr<Parameter> para,
     this->fileNamesForCollectionFile.clear();
 }
 
-void VF_PUBLIC FileWriter::writeCollectionFileMedian(std::shared_ptr<Parameter> para, unsigned int timestep)
+void VIRTUALFLUIDS_GPU_EXPORT FileWriter::writeCollectionFileMedian(std::shared_ptr<Parameter> para, unsigned int timestep)
 {
 
     std::string filename = para->getFName() + "_bin_median_ID_" + StringUtil::toString<int>(para->getMyID()) + "_t_" + StringUtil::toString<int>(timestep) + ".vtk";
diff --git a/src/gpu/VirtualFluids_GPU/Output/FileWriter.h b/src/gpu/VirtualFluids_GPU/Output/FileWriter.h
index 844e4a989ffdba51ead35f317830b32a458909ff..2aedd4b79030b528e2cad0fa6a59d5cf864b6404 100644
--- a/src/gpu/VirtualFluids_GPU/Output/FileWriter.h
+++ b/src/gpu/VirtualFluids_GPU/Output/FileWriter.h
@@ -15,25 +15,25 @@ class CudaMemoryManager;
 class FileWriter : public DataWriter
 {
 public:
-	VF_PUBLIC FileWriter() {}
+	VIRTUALFLUIDS_GPU_EXPORT FileWriter() {}
 
-	void VF_PUBLIC writeInit(std::shared_ptr<Parameter> para, std::shared_ptr<CudaMemoryManager> cudaManager) override;
-	void VF_PUBLIC writeTimestep(std::shared_ptr<Parameter> para, unsigned int timestep) override;
+	void VIRTUALFLUIDS_GPU_EXPORT writeInit(std::shared_ptr<Parameter> para, std::shared_ptr<CudaMemoryManager> cudaManager) override;
+	void VIRTUALFLUIDS_GPU_EXPORT writeTimestep(std::shared_ptr<Parameter> para, unsigned int timestep) override;
 
 private:
-	void VF_PUBLIC writeTimestep(std::shared_ptr<Parameter> para, unsigned int timestep, int level) override;
-	//void VF_PUBLIC writeParticle(Parameter* para, unsigned int t);
-	void VF_PUBLIC writeUnstrucuredGridLT(std::shared_ptr<Parameter> para, int level, std::vector<std::string >& fname);
-	void VF_PUBLIC writeUnstrucuredGridLTConc(std::shared_ptr<Parameter> para, int level, std::vector<std::string >& fname);
-	void VF_PUBLIC writeUnstrucuredGridMedianLT(std::shared_ptr<Parameter> para, int level, std::vector<std::string >& fname);
-	void VF_PUBLIC writeUnstrucuredGridMedianLTConc(std::shared_ptr<Parameter> para, int level, std::vector<std::string >& fname);
-	bool VF_PUBLIC isPeriodicCell(std::shared_ptr<Parameter> para, int level, unsigned int number2, unsigned int number1, unsigned int number3, unsigned int number5);
+	void VIRTUALFLUIDS_GPU_EXPORT writeTimestep(std::shared_ptr<Parameter> para, unsigned int timestep, int level) override;
+	//void VIRTUALFLUIDS_GPU_EXPORT writeParticle(Parameter* para, unsigned int t);
+	void VIRTUALFLUIDS_GPU_EXPORT writeUnstrucuredGridLT(std::shared_ptr<Parameter> para, int level, std::vector<std::string >& fname);
+	void VIRTUALFLUIDS_GPU_EXPORT writeUnstrucuredGridLTConc(std::shared_ptr<Parameter> para, int level, std::vector<std::string >& fname);
+	void VIRTUALFLUIDS_GPU_EXPORT writeUnstrucuredGridMedianLT(std::shared_ptr<Parameter> para, int level, std::vector<std::string >& fname);
+	void VIRTUALFLUIDS_GPU_EXPORT writeUnstrucuredGridMedianLTConc(std::shared_ptr<Parameter> para, int level, std::vector<std::string >& fname);
+	bool VIRTUALFLUIDS_GPU_EXPORT isPeriodicCell(std::shared_ptr<Parameter> para, int level, unsigned int number2, unsigned int number1, unsigned int number3, unsigned int number5);
 
 	FileWriter(const FileWriter& fileWriter) {};
 
-    void VF_PUBLIC writeCollectionFile( std::shared_ptr<Parameter> para, unsigned int timestep );
+    void VIRTUALFLUIDS_GPU_EXPORT writeCollectionFile( std::shared_ptr<Parameter> para, unsigned int timestep );
 
-    void VF_PUBLIC writeCollectionFileMedian( std::shared_ptr<Parameter> para, unsigned int timestep );
+    void VIRTUALFLUIDS_GPU_EXPORT writeCollectionFileMedian( std::shared_ptr<Parameter> para, unsigned int timestep );
 
     std::vector< std::string > fileNamesForCollectionFile;
     std::vector< std::string > fileNamesForCollectionFileMedian;
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h
index c090d4d18cc4627f1ff8392e6ca807391aa4fb6e..f658e3eb8d39d8f284202f84a1436b9d88931b92 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h
+++ b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h
@@ -300,7 +300,7 @@ struct ParameterStruct{
 	////////////////////////////////////////////////////////////////////////////
 };
 
-class VF_PUBLIC Parameter
+class VIRTUALFLUIDS_GPU_EXPORT Parameter
 {
 public:
 	////////////////////////////////////////////////////////////////////////////
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactory.h b/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactory.h
index 784468c575c31b8f57d5c53868f6c89ba0757156..141c2ddfa18c7870cff8e9f1a44dc51d0cf17750 100644
--- a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactory.h
+++ b/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactory.h
@@ -9,7 +9,7 @@
 class PreProcessor;
 class Parameter;
 
-class VF_PUBLIC PreProcessorFactory
+class VIRTUALFLUIDS_GPU_EXPORT PreProcessorFactory
 {
 public:
 	virtual std::shared_ptr<PreProcessor> makePreProcessor(std::vector<PreProcessorType> preProcessorTypes, std::shared_ptr<Parameter> para) = 0;
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h b/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h
index e26ce632ffdb07787cef5f07f8dc933faf56b771..843dc934907b8c91a0af5185db058bbb4f5d4049 100644
--- a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h
+++ b/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h
@@ -5,7 +5,7 @@
 
 class PreProcessorStrategy;
 
-class VF_PUBLIC PreProcessorFactoryImp : public PreProcessorFactory
+class VIRTUALFLUIDS_GPU_EXPORT PreProcessorFactoryImp : public PreProcessorFactory
 {
 public:
 	static std::shared_ptr< PreProcessorFactoryImp> getInstance();