diff --git a/.clang-tidy b/.clang-tidy
new file mode 100644
index 0000000000000000000000000000000000000000..2747454ca09d19d0af59207f587a0b3afe36b033
--- /dev/null
+++ b/.clang-tidy
@@ -0,0 +1,56 @@
+---
+Checks: '
+-*,
+
+bugprone-*,
+-bugprone-branch-clone,
+-bugprone-narrowing-conversions,
+-bugprone-macro-parentheses,
+
+misc-*,
+-misc-non-private-member-variables-in-classes,
+
+modernize-*,
+-modernize-avoid-c-arrays,
+-modernize-use-trailing-return-type,
+-modernize-raw-string-literal,
+-modernize-loop-convert,
+-modernize-use-auto,
+-modernize-use-nullptr,
+-modernize-pass-by-value,
+
+mpi-*,
+
+openmp-*
+
+performance-*,
+
+portability-*
+
+readability-*,
+-readability-braces-around-statements,
+-readability-magic-numbers,
+-readability-isolate-declaration,
+
+
+cppcoreguidelines-avoid-goto,
+cppcoreguidelines-avoid-non-const-global-variables,
+cppcoreguidelines-init-variables,
+cppcoreguidelines-interfaces-global-init,
+cppcoreguidelines-no-malloc,
+cppcoreguidelines-owning-memory,
+cppcoreguidelines-pro-type-const-cast,
+cppcoreguidelines-pro-type-member-init,
+cppcoreguidelines-pro-type-static-cast-downcast,
+cppcoreguidelines-slicing,
+cppcoreguidelines-special-member-functions,
+
+-cppcoreguidelines-init-variables,
+-cppcoreguidelines-pro-type-member-init,
+-cppcoreguidelines-owning-memory,
+-cppcoreguidelines-special-member-functions,
+-cppcoreguidelines-interfaces-global-init
+
+'
+HeaderFilterRegex: '\.h$'
+...
diff --git a/3rdParty/MuParser/CMakeLists.txt b/3rdParty/MuParser/CMakeLists.txt
index 14a1e4e4528181800f03adfd3695310783042707..49aa3ac25552f6050de4eb5ae08928fddb8a6cf4 100644
--- a/3rdParty/MuParser/CMakeLists.txt
+++ b/3rdParty/MuParser/CMakeLists.txt
@@ -35,7 +35,7 @@ if(MSVC)
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4251 /wd4310 /wd4267") # disable all muparser warnings
 elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
     # Update if necessary
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic")
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic -Wno-unknown-pragmas")
 endif()
 
 add_library(muparser
diff --git a/3rdParty/MuParser/include/muParser.h b/3rdParty/MuParser/include/muParser.h
index 321fba9c793179e29ce50438a332547fd1a3927f..ab1e21e5b2a7506593de90d4845b6c2e5e39904a 100644
--- a/3rdParty/MuParser/include/muParser.h
+++ b/3rdParty/MuParser/include/muParser.h
@@ -29,6 +29,8 @@
 #ifndef MU_PARSER_H
 #define MU_PARSER_H
 
+#pragma clang system_header
+
 //--- Standard includes ------------------------------------------------------------------------
 #include <vector>
 
diff --git a/3rdParty/MuParser/include/muParserBase.h b/3rdParty/MuParser/include/muParserBase.h
index 7793818a9c90a6f40c3df877099ed53d135f5f91..e42aca8b121c95b3d61e4ef2414f2f0bea76cab1 100644
--- a/3rdParty/MuParser/include/muParserBase.h
+++ b/3rdParty/MuParser/include/muParserBase.h
@@ -29,6 +29,8 @@
 #ifndef MU_PARSER_BASE_H
 #define MU_PARSER_BASE_H
 
+#pragma clang system_header
+
 //--- Standard includes ------------------------------------------------------------------------
 #include <cmath>
 #include <string>
diff --git a/CMake/VirtualFluidsMacros.cmake b/CMake/VirtualFluidsMacros.cmake
index cf0f24ec944883538749775ecbcdd4a43a370b3b..2e9abfeeeca983dd6035306358011a3cd071c63b 100644
--- a/CMake/VirtualFluidsMacros.cmake
+++ b/CMake/VirtualFluidsMacros.cmake
@@ -101,6 +101,12 @@ endfunction()
 #################################################################################
 function(vf_add_library)
 
+    # enable clang tidy for this target
+    if(BUILD_VF_CLANG_TIDY)
+        find_program(CLANG_TIDY_COMMAND NAMES clang-tidy)
+        set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_COMMAND}")
+    endif()
+
     set( options )
     set( oneValueArgs )
     set( multiValueArgs NAME BUILDTYPE DEPENDS FILES FOLDER EXCLUDE)
@@ -169,6 +175,7 @@ function(vf_add_library)
 
     status("... configuring target: ${library_name} (type=${ARG_BUILDTYPE}) done")
 
+    unset(CMAKE_CXX_CLANG_TIDY)
 endfunction()
 
 
diff --git a/CMake/compilerflags/GNU.cmake b/CMake/compilerflags/GNU.cmake
index f44cafc66eced55f1cf28f05ca0ddc9ad24b3e7d..8f932429c9c8f43d25b9dcd238efcbc3ed7a5fe0 100644
--- a/CMake/compilerflags/GNU.cmake
+++ b/CMake/compilerflags/GNU.cmake
@@ -21,7 +21,7 @@ list(APPEND CAB_COMPILER_ADDTIONAL_CXX_COMPILER_FLAGS "-Wall")
 list(APPEND CAB_COMPILER_ADDTIONAL_CXX_COMPILER_FLAGS "-Wno-unused-function")
 list(APPEND CAB_COMPILER_ADDTIONAL_CXX_COMPILER_FLAGS "-Wno-reorder")
 list(APPEND CAB_COMPILER_ADDTIONAL_CXX_COMPILER_FLAGS "-Wno-sign-compare")
-
+list(APPEND CAB_COMPILER_ADDTIONAL_CXX_COMPILER_FLAGS "-Wno-unknown-pragmas")
 
 #############################################################################################################
 # linker options
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6c98c8aa639a81526606a7124bf97e1c150a6032..3ca84ca3f9045f45344943c24a4d83570c4beeb5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -36,7 +36,9 @@ set (VF_ROOT_DIR  ${CMAKE_CURRENT_SOURCE_DIR})
 #################################################################################
 option(BUILD_VF_CPU "Build VirtualFluids cpu variant" OFF)
 option(BUILD_VF_GPU "Build VirtualFluids gpu variant" OFF)
+
 option(BUILD_VF_UNIT_TESTS "Build VirtualFluids unit tests" OFF)
+option(BUILD_VF_CLANG_TIDY "Add the clang tidy checks to the targets" OFF)
 
 option(BUILD_SHARED_LIBS "" ON)
 
diff --git a/apps/cpu/LidDrivenCavity/LidDrivenCavity.cpp b/apps/cpu/LidDrivenCavity/LidDrivenCavity.cpp
index bde6df56d697f197c2f0e486647a09f0c06ba20b..104d487b905c03901ffa3ecc24f2f34b44cffe5e 100644
--- a/apps/cpu/LidDrivenCavity/LidDrivenCavity.cpp
+++ b/apps/cpu/LidDrivenCavity/LidDrivenCavity.cpp
@@ -37,7 +37,7 @@
 
 using namespace std;
 
-int main(int argc, char* argv[])
+int main(int  /*argc*/, char*  /*argv*/[])
 {
    try
    {
@@ -110,30 +110,28 @@ int main(int argc, char* argv[])
       grid->accept(genBlocks);
 
       // Write block grid to VTK-file
-      SPtr<CoProcessor> ppblocks(new WriteBlocksCoProcessor(grid, SPtr<UbScheduler>(new UbScheduler(1)), path, WbWriterVtkXmlBinary::getInstance(), comm));
+      auto ppblocks = std::make_shared<WriteBlocksCoProcessor>(grid, SPtr<UbScheduler>(new UbScheduler(1)), path, WbWriterVtkXmlBinary::getInstance(), comm);
       ppblocks->process(0);
       ppblocks.reset();
 
       // Create LBM kernel
-      
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CumulantK17LBMKernel());
-
-      SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new LBMKernelETD3Q27BGK());
+      auto kernel = std::make_shared<LBMKernelETD3Q27BGK>();
+      // auto kernel = std::make_shared<CumulantK17LBMKernel>();
 
       //////////////////////////////////////////////////////////////////////////
       // Create boundary conditions (BC)
       //////////////////////////////////////////////////////////////////////////     
       // Create no-slip BC
-      SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter());
-      noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm()));
+      auto noSlipBCAdapter = std::make_shared<NoSlipBCAdapter>();
+      noSlipBCAdapter->setBcAlgorithm(std::make_shared<NoSlipBCAlgorithm>());
       
       // Velocity BC
       mu::Parser fct;
       fct.SetExpr("u");
       fct.DefineConst("u", u);
       // Set the same velocity in x and y-direction
-      SPtr<BCAdapter> velBCAdapter(new VelocityBCAdapter(true, true, false, fct, 0, BCFunction::INFCONST));
-      velBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityBCAlgorithm()));
+      auto velBCAdapter = std::make_shared<VelocityBCAdapter>(true, true, false, fct, 0, BCFunction::INFCONST);
+      velBCAdapter->setBcAlgorithm(std::make_shared<VelocityBCAlgorithm>());
 
       // Add velocity boundary condition to visitor. No-slip boundary   
       BoundaryConditionsBlockVisitor bcVisitor;
@@ -141,7 +139,7 @@ int main(int argc, char* argv[])
 
       // Create boundary conditions processor
       SPtr<BCProcessor> bcProc;
-      bcProc = SPtr<BCProcessor>(new BCProcessor());
+      bcProc = std::make_shared<BCProcessor>();
       kernel->setBCProcessor(bcProc);
 
       // Create boundary conditions geometry
diff --git a/cpu.cmake b/cpu.cmake
index fd33baa9173f9c7af7021e8c22e39069cfff82c2..35f7211295da3e0468433a1624490e2a78240dc8 100644
--- a/cpu.cmake
+++ b/cpu.cmake
@@ -80,6 +80,7 @@ if(${USE_METIS} AND NOT METIS_INCLUDEDIR)
 endif()
 
 
+
 add_subdirectory(${VF_THIRD_DIR}/MuParser)
 
 add_subdirectory(src/cpu/VirtualFluidsCore)
diff --git a/src/basics/Core/DataTypes.h b/src/basics/Core/DataTypes.h
index 67a17fa765514c41247c480709864b4dae1b28ba..b4fa3a0d96e10bd4e04a809c075e49e0f9867f05 100644
--- a/src/basics/Core/DataTypes.h
+++ b/src/basics/Core/DataTypes.h
@@ -7,10 +7,10 @@
 #ifdef VF_DOUBLE_ACCURACY
 typedef double real;
 #else
-typedef float  real;
+using real = float;
 #endif
 
-typedef unsigned int uint;
+using uint = unsigned int;
 #define INVALID_INDEX 4294967295 //max uint
 
 #endif
diff --git a/src/basics/Core/Input/ConfigData/ConfigData.h b/src/basics/Core/Input/ConfigData/ConfigData.h
index acd5ee053b6f1972e7e36751c15387e16d976688..16f789ef9f0104ce12caa630bc00181d80f06fa6 100644
--- a/src/basics/Core/Input/ConfigData/ConfigData.h
+++ b/src/basics/Core/Input/ConfigData/ConfigData.h
@@ -9,6 +9,8 @@
 class ConfigData
 {
 public:
+    virtual ~ConfigData() = default;
+
 	virtual real getViscosity() = 0;
 	virtual uint getNumberOfDevices() = 0;
 	virtual std::vector<uint> getDevices() = 0;
diff --git a/src/basics/Core/Input/ConfigData/ConfigDataImp.cpp b/src/basics/Core/Input/ConfigData/ConfigDataImp.cpp
index 48836eaa43ceb17748f7f105cdb24f509d665534..35652c2eb74a7d2c91123ab83c04753e648828d7 100644
--- a/src/basics/Core/Input/ConfigData/ConfigDataImp.cpp
+++ b/src/basics/Core/Input/ConfigData/ConfigDataImp.cpp
@@ -87,10 +87,6 @@ ConfigDataImp::ConfigDataImp()
 
 }
 
-ConfigDataImp::~ConfigDataImp(void)
-{
-}
-
 real ConfigDataImp::getViscosity()
 {
 	return this->viscosity;
diff --git a/src/basics/Core/Input/ConfigData/ConfigDataImp.h b/src/basics/Core/Input/ConfigData/ConfigDataImp.h
index bcd518056d282b89475ae8471207e5f86fc07bc4..94d503b78c25eb980b4f1972cfb99fc159fb3dd5 100644
--- a/src/basics/Core/Input/ConfigData/ConfigDataImp.h
+++ b/src/basics/Core/Input/ConfigData/ConfigDataImp.h
@@ -10,93 +10,92 @@ class  ConfigDataImp : public ConfigData
 {
 public:
     static std::shared_ptr<ConfigDataImp> getNewInstance();
-    virtual ~ConfigDataImp(void);
 
-	real getViscosity();
-	uint getNumberOfDevices();
-	std::vector<uint> getDevices();
-	std::string getOutputPath();
-	std::string getPrefix();
-	std::string getGridPath();
-	bool getPrintOutputFiles();
-	bool getGeometryValues();
-	bool getCalc2ndOrderMoments();
-	bool getCalc3rdOrderMoments();
-	bool getCalcHighOrderMoments();
-	bool getReadGeo();
-	bool getCalcMedian();
-	bool getCalcDragLift();
-	bool getCalcCp();
-	bool getWriteVeloASCIIfiles();
-	bool getCalcPlaneConc();
-	bool getConcFile();
-	bool getStreetVelocityFile();
-	bool getUseMeasurePoints();
-	bool getUseWale();
-	bool getUseInitNeq();
-	bool getSimulatePorousMedia();
-	uint getD3Qxx();
-	uint getTEnd();
-	uint getTOut();
-	uint getTStartOut();
-	uint getTimeCalcMedStart();
-	uint getTimeCalcMedEnd();
-	uint getPressInID();
-	uint getPressOutID();
-	uint getPressInZ();
-	uint getPressOutZ();
-	bool getDiffOn();
-	uint getDiffMod();
-	real getDiffusivity();
-	real getTemperatureInit();
-	real getTemperatureBC();
-	real getVelocity();
-	real getViscosityRatio();
-	real getVelocityRatio();
-	real getDensityRatio();
-	real getPressRatio();
-	real getRealX();
-	real getRealY();
-	real getFactorPressBC();
-	std::string getGeometryFileC();
-	std::string getGeometryFileM();
-	std::string getGeometryFileF();
-	uint getClockCycleForMP();
-	uint getTimestepForMP();
-	real getForcingX();
-	real getForcingY();
-	real getForcingZ();
-    real getQuadricLimiterP();
-    real getQuadricLimiterM();
-    real getQuadricLimiterD();
-	bool getCalcParticles();
-	int getParticleBasicLevel();
-	int getParticleInitLevel();
-	int getNumberOfParticles();
-	real getStartXHotWall();
-	real getEndXHotWall();
-	std::vector<std::string> getPossNeighborFilesX();
-	std::vector<std::string> getPossNeighborFilesY();
-	std::vector<std::string> getPossNeighborFilesZ();
+	real getViscosity() override;
+	uint getNumberOfDevices() override;
+	std::vector<uint> getDevices() override;
+	std::string getOutputPath() override;
+	std::string getPrefix() override;
+	std::string getGridPath() override;
+	bool getPrintOutputFiles() override;
+	bool getGeometryValues() override;
+	bool getCalc2ndOrderMoments() override;
+	bool getCalc3rdOrderMoments() override;
+	bool getCalcHighOrderMoments() override;
+	bool getReadGeo() override;
+	bool getCalcMedian() override;
+	bool getCalcDragLift() override;
+	bool getCalcCp() override;
+	bool getWriteVeloASCIIfiles() override;
+	bool getCalcPlaneConc() override;
+	bool getConcFile() override;
+	bool getStreetVelocityFile() override;
+	bool getUseMeasurePoints() override;
+	bool getUseWale() override;
+	bool getUseInitNeq() override;
+	bool getSimulatePorousMedia() override;
+	uint getD3Qxx() override;
+	uint getTEnd() override;
+	uint getTOut() override;
+	uint getTStartOut() override;
+	uint getTimeCalcMedStart() override;
+	uint getTimeCalcMedEnd() override;
+	uint getPressInID() override;
+	uint getPressOutID() override;
+	uint getPressInZ() override;
+	uint getPressOutZ() override;
+	bool getDiffOn() override;
+	uint getDiffMod() override;
+	real getDiffusivity() override;
+	real getTemperatureInit() override;
+	real getTemperatureBC() override;
+	real getVelocity() override;
+	real getViscosityRatio() override;
+	real getVelocityRatio() override;
+	real getDensityRatio() override;
+	real getPressRatio() override;
+	real getRealX() override;
+	real getRealY() override;
+	real getFactorPressBC() override;
+	std::string getGeometryFileC() override;
+	std::string getGeometryFileM() override;
+	std::string getGeometryFileF() override;
+	uint getClockCycleForMP() override;
+	uint getTimestepForMP() override;
+	real getForcingX() override;
+	real getForcingY() override;
+	real getForcingZ() override;
+    real getQuadricLimiterP() override;
+    real getQuadricLimiterM() override;
+    real getQuadricLimiterD() override;
+	bool getCalcParticles() override;
+	int getParticleBasicLevel() override;
+	int getParticleInitLevel() override;
+	int getNumberOfParticles() override;
+	real getStartXHotWall() override;
+	real getEndXHotWall() override;
+	std::vector<std::string> getPossNeighborFilesX() override;
+	std::vector<std::string> getPossNeighborFilesY() override;
+	std::vector<std::string> getPossNeighborFilesZ() override;
 	//std::vector<std::string> getPossNeighborFilesX();
 	//std::vector<std::string> getPossNeighborFilesY();
 	//std::vector<std::string> getPossNeighborFilesZ();
-	int getTimeDoCheckPoint();
-	int getTimeDoRestart();
-	bool getDoCheckPoint();
-	bool getDoRestart();
-	uint getMaxLevel();
-	std::vector<int> getGridX();
-	std::vector<int> getGridY();
-	std::vector<int> getGridZ();
-	std::vector<int> getDistX();
-	std::vector<int> getDistY();
-	std::vector<int> getDistZ();
-	std::vector<bool> getNeedInterface();
-	std::string getMainKernel();
-	bool getMultiKernelOn();
-	std::vector<int> getMultiKernelLevel();
-	std::vector<std::string> getMultiKernelName();
+	int getTimeDoCheckPoint() override;
+	int getTimeDoRestart() override;
+	bool getDoCheckPoint() override;
+	bool getDoRestart() override;
+	uint getMaxLevel() override;
+	std::vector<int> getGridX() override;
+	std::vector<int> getGridY() override;
+	std::vector<int> getGridZ() override;
+	std::vector<int> getDistX() override;
+	std::vector<int> getDistY() override;
+	std::vector<int> getDistZ() override;
+	std::vector<bool> getNeedInterface() override;
+	std::string getMainKernel() override;
+	bool getMultiKernelOn() override;
+	std::vector<int> getMultiKernelLevel() override;
+	std::vector<std::string> getMultiKernelName() override;
 
 	void setViscosity(real viscosity);
 	void setNumberOfDevices(uint numberOfDevices);
@@ -185,90 +184,90 @@ public:
 	void setMultiKernelLevel(std::vector<int> multiKernelLevel);
 	void setMultiKernelName(std::vector<std::string> multiKernelName);
 
-	bool isViscosityInConfigFile();
-	bool isNumberOfDevicesInConfigFile();
-	bool isDevicesInConfigFile();
-	bool isOutputPathInConfigFile();
-	bool isPrefixInConfigFile();
-	bool isGridPathInConfigFile();
-	bool isPrintOutputFilesInConfigFile();
-	bool isGeometryValuesInConfigFile();
-	bool isCalc2ndOrderMomentsInConfigFile();
-	bool isCalc3rdOrderMomentsInConfigFile();
-	bool isCalcHighOrderMomentsInConfigFile();
-	bool isReadGeoInConfigFile();
-	bool isCalcMedianInConfigFile();
-	bool isCalcDragLiftInConfigFile();
-	bool isCalcCpInConfigFile();
-	bool isWriteVeloASCIIfilesInConfigFile();
-	bool isCalcPlaneConcInConfigFile();
-	bool isConcFileInConfigFile();
-	bool isStreetVelocityFileInConfigFile();
-	bool isUseMeasurePointsInConfigFile();
-	bool isUseWaleInConfigFile();
-	bool isUseInitNeqInConfigFile();
-	bool isSimulatePorousMediaInConfigFile();
-	bool isD3QxxInConfigFile();
-	bool isTEndInConfigFile();
-	bool isTOutInConfigFile();
-	bool isTStartOutInConfigFile();
-	bool isTimeCalcMedStartInConfigFile();
-	bool isTimeCalcMedEndInConfigFile();
-	bool isPressInIDInConfigFile();
-	bool isPressOutIDInConfigFile();
-	bool isPressInZInConfigFile();
-	bool isPressOutZInConfigFile();
-	bool isDiffOnInConfigFile();
-	bool isDiffModInConfigFile();
-	bool isDiffusivityInConfigFile();
-	bool isTemperatureInitInConfigFile();
-	bool isTemperatureBCInConfigFile();
+	bool isViscosityInConfigFile() override;
+	bool isNumberOfDevicesInConfigFile() override;
+	bool isDevicesInConfigFile() override;
+	bool isOutputPathInConfigFile() override;
+	bool isPrefixInConfigFile() override;
+	bool isGridPathInConfigFile() override;
+	bool isPrintOutputFilesInConfigFile() override;
+	bool isGeometryValuesInConfigFile() override;
+	bool isCalc2ndOrderMomentsInConfigFile() override;
+	bool isCalc3rdOrderMomentsInConfigFile() override;
+	bool isCalcHighOrderMomentsInConfigFile() override;
+	bool isReadGeoInConfigFile() override;
+	bool isCalcMedianInConfigFile() override;
+	bool isCalcDragLiftInConfigFile() override;
+	bool isCalcCpInConfigFile() override;
+	bool isWriteVeloASCIIfilesInConfigFile() override;
+	bool isCalcPlaneConcInConfigFile() override;
+	bool isConcFileInConfigFile() override;
+	bool isStreetVelocityFileInConfigFile() override;
+	bool isUseMeasurePointsInConfigFile() override;
+	bool isUseWaleInConfigFile() override;
+	bool isUseInitNeqInConfigFile() override;
+	bool isSimulatePorousMediaInConfigFile() override;
+	bool isD3QxxInConfigFile() override;
+	bool isTEndInConfigFile() override;
+	bool isTOutInConfigFile() override;
+	bool isTStartOutInConfigFile() override;
+	bool isTimeCalcMedStartInConfigFile() override;
+	bool isTimeCalcMedEndInConfigFile() override;
+	bool isPressInIDInConfigFile() override;
+	bool isPressOutIDInConfigFile() override;
+	bool isPressInZInConfigFile() override;
+	bool isPressOutZInConfigFile() override;
+	bool isDiffOnInConfigFile() override;
+	bool isDiffModInConfigFile() override;
+	bool isDiffusivityInConfigFile() override;
+	bool isTemperatureInitInConfigFile() override;
+	bool isTemperatureBCInConfigFile() override;
 	//bool isViscosityInConfigFile();
-	bool isVelocityInConfigFile();
-	bool isViscosityRatioInConfigFile();
-	bool isVelocityRatioInConfigFile();
-	bool isDensityRatioInConfigFile();
-	bool isPressRatioInConfigFile();
-	bool isRealXInConfigFile();
-	bool isRealYInConfigFile();
-	bool isFactorPressBCInConfigFile();
-	bool isGeometryFileCInConfigFile();
-	bool isGeometryFileMInConfigFile();
-	bool isGeometryFileFInConfigFile();
-	bool isClockCycleForMPInConfigFile();
-	bool isTimestepForMPInConfigFile();
-	bool isForcingXInConfigFile();
-	bool isForcingYInConfigFile();
-	bool isForcingZInConfigFile();
-	bool isQuadricLimiterPInConfigFile();
-	bool isQuadricLimiterMInConfigFile();
-	bool isQuadricLimiterDInConfigFile();
-	bool isCalcParticlesInConfigFile();
-	bool isParticleBasicLevelInConfigFile();
-	bool isParticleInitLevelInConfigFile();
-	bool isNumberOfParticlesInConfigFile();
-	bool isNeighborWSBInConfigFile();
-	bool isStartXHotWallInConfigFile();
-	bool isEndXHotWallInConfigFile();
-	bool isPossNeighborFilesXInConfigFile();
-	bool isPossNeighborFilesYInConfigFile();
-	bool isPossNeighborFilesZInConfigFile();
-	bool isTimeDoCheckPointInConfigFile();
-	bool isTimeDoRestartInConfigFile();
-	bool isDoCheckPointInConfigFile();
-	bool isDoRestartInConfigFile();
-	bool isMaxLevelInConfigFile();
-	bool isGridXInConfigFile();
-	bool isGridYInConfigFile();
-	bool isGridZInConfigFile();
-	bool isDistXInConfigFile();
-	bool isDistYInConfigFile();
-	bool isDistZInConfigFile();
-	bool isNeedInterfaceInConfigFile();
-	bool isMainKernelInConfigFile();
-	bool isMultiKernelOnInConfigFile();
-	bool isMultiKernelLevelInConfigFile();
-	bool isMultiKernelNameInConfigFile();
+	bool isVelocityInConfigFile() override;
+	bool isViscosityRatioInConfigFile() override;
+	bool isVelocityRatioInConfigFile() override;
+	bool isDensityRatioInConfigFile() override;
+	bool isPressRatioInConfigFile() override;
+	bool isRealXInConfigFile() override;
+	bool isRealYInConfigFile() override;
+	bool isFactorPressBCInConfigFile() override;
+	bool isGeometryFileCInConfigFile() override;
+	bool isGeometryFileMInConfigFile() override;
+	bool isGeometryFileFInConfigFile() override;
+	bool isClockCycleForMPInConfigFile() override;
+	bool isTimestepForMPInConfigFile() override;
+	bool isForcingXInConfigFile() override;
+	bool isForcingYInConfigFile() override;
+	bool isForcingZInConfigFile() override;
+	bool isQuadricLimiterPInConfigFile() override;
+	bool isQuadricLimiterMInConfigFile() override;
+	bool isQuadricLimiterDInConfigFile() override;
+	bool isCalcParticlesInConfigFile() override;
+	bool isParticleBasicLevelInConfigFile() override;
+	bool isParticleInitLevelInConfigFile() override;
+	bool isNumberOfParticlesInConfigFile() override;
+	bool isNeighborWSBInConfigFile() override;
+	bool isStartXHotWallInConfigFile() override;
+	bool isEndXHotWallInConfigFile() override;
+	bool isPossNeighborFilesXInConfigFile() override;
+	bool isPossNeighborFilesYInConfigFile() override;
+	bool isPossNeighborFilesZInConfigFile() override;
+	bool isTimeDoCheckPointInConfigFile() override;
+	bool isTimeDoRestartInConfigFile() override;
+	bool isDoCheckPointInConfigFile() override;
+	bool isDoRestartInConfigFile() override;
+	bool isMaxLevelInConfigFile() override;
+	bool isGridXInConfigFile() override;
+	bool isGridYInConfigFile() override;
+	bool isGridZInConfigFile() override;
+	bool isDistXInConfigFile() override;
+	bool isDistYInConfigFile() override;
+	bool isDistZInConfigFile() override;
+	bool isNeedInterfaceInConfigFile() override;
+	bool isMainKernelInConfigFile() override;
+	bool isMultiKernelOnInConfigFile() override;
+	bool isMultiKernelLevelInConfigFile() override;
+	bool isMultiKernelNameInConfigFile() override;
 
 
 private:
diff --git a/src/basics/Core/Input/ConfigFileReader/ConfigFileReader.cpp b/src/basics/Core/Input/ConfigFileReader/ConfigFileReader.cpp
index 1053a7f5fcb2feb6280ebdbe563bd1a9c7196424..4bdf8669b1ed481e64d1059d1479f05cae7e164d 100644
--- a/src/basics/Core/Input/ConfigFileReader/ConfigFileReader.cpp
+++ b/src/basics/Core/Input/ConfigFileReader/ConfigFileReader.cpp
@@ -13,14 +13,10 @@ BASICS_EXPORT std::shared_ptr<ConfigFileReader> ConfigFileReader::getNewInstance
 }
 
 ConfigFileReader::ConfigFileReader()
-{
-
-}
+= default;
 
 BASICS_EXPORT ConfigFileReader::~ConfigFileReader()
-{
-
-}
+= default;
 
 BASICS_EXPORT std::shared_ptr<ConfigData> ConfigFileReader::readConfigFile(const std::string &filePath) const
 {
diff --git a/src/basics/Core/Input/ConfigFileReader/ConfigFileReader.h b/src/basics/Core/Input/ConfigFileReader/ConfigFileReader.h
index b33e0935ba1090ca8c243772a1d9a4fefd2e54d6..6dd241967652c9246640458e4fd1283766c32701 100644
--- a/src/basics/Core/Input/ConfigFileReader/ConfigFileReader.h
+++ b/src/basics/Core/Input/ConfigFileReader/ConfigFileReader.h
@@ -11,7 +11,7 @@ class  ConfigFileReader
 {
 public:
     BASICS_EXPORT static std::shared_ptr<ConfigFileReader> getNewInstance();
-    BASICS_EXPORT virtual ~ConfigFileReader(void);
+    BASICS_EXPORT virtual ~ConfigFileReader();
 
     BASICS_EXPORT std::shared_ptr<ConfigData> readConfigFile(const std::string &filePath) const;
 
diff --git a/src/basics/Core/Input/ConfigInput/ConfigInput.cpp b/src/basics/Core/Input/ConfigInput/ConfigInput.cpp
index ce8ea0401d1baf6a44fa174022576eaa7df59149..d894bcc28bd179e0c63b0f2ddf26adc9c070de36 100644
--- a/src/basics/Core/Input/ConfigInput/ConfigInput.cpp
+++ b/src/basics/Core/Input/ConfigInput/ConfigInput.cpp
@@ -1,5 +1,5 @@
 #include "ConfigInput.h"
-#include <errno.h>
+#include <cerrno>
 #include <algorithm>
 #include <sstream>
 #include <iostream>
@@ -37,9 +37,7 @@ namespace input
     }
 
     ConfigInput::~ConfigInput()
-    {
-
-    }
+    = default;
 
     bool ConfigInput::hasValue(const std::string &key) const
     {
@@ -67,7 +65,7 @@ namespace input
 
     void ConfigInput::makeLower(std::string &value) const
     {
-        for (unsigned i = 0; i < value.size(); i++)
+        for (size_t i = 0; i < value.size(); i++)
             value[i] = tolower(value[i]);
     }
 
diff --git a/src/basics/Core/Input/ConfigInput/ConfigInput.h b/src/basics/Core/Input/ConfigInput/ConfigInput.h
index 2ec97c14abe91e49a8d4945b50157c7d6b2cf993..d01e1b8128366ad5bd4287937b8f7c5577237528 100644
--- a/src/basics/Core/Input/ConfigInput/ConfigInput.h
+++ b/src/basics/Core/Input/ConfigInput/ConfigInput.h
@@ -16,10 +16,10 @@ namespace input
     {
     public:
         BASICS_EXPORT ConfigInput(std::istream &stream);
-        BASICS_EXPORT virtual ~ConfigInput(void);
+        BASICS_EXPORT ~ConfigInput() override;
    
-        BASICS_EXPORT bool hasValue(const std::string &key) const;
-        BASICS_EXPORT std::string getValue(const std::string &key);
+        BASICS_EXPORT bool hasValue(const std::string &key) const override;
+        BASICS_EXPORT std::string getValue(const std::string &key) override;
 
     protected:
         virtual void setTokenValuePair();
@@ -41,7 +41,7 @@ namespace input
 
     protected:
         std::istream &stream;
-        typedef std::pair <std::string, std::string> String_Pair;
+        using String_Pair = std::pair <std::string, std::string>;
         std::map<std::string, std::string> configEntries;
     };
 }
diff --git a/src/basics/Core/Input/Input.cpp b/src/basics/Core/Input/Input.cpp
index f5b3798e070cf60e024484efb2c1ef91978b26b1..4d2aee7de00d2e74727246f3720616a653aabc81 100644
--- a/src/basics/Core/Input/Input.cpp
+++ b/src/basics/Core/Input/Input.cpp
@@ -1,5 +1,7 @@
 #include "Input.h"
 
+#include <memory>
+
 #ifdef BUILD_JSONCPP
 #include "JsonInput/JsonInput.h"
 #endif
@@ -9,16 +11,14 @@
 namespace input
 {
 
-    std::unique_ptr<input::Input> Input::makeInput(std::istream &stream, const std::string &inputType)
+    std::unique_ptr<input::Input> Input::makeInput(std::istream &stream, const std::string & /*inputType*/)
     {
 #ifdef BUILD_JSONCPP
         if(inputType == "json")
             return std::unique_ptr<Input>(new JsonInput(stream));
 #endif
-         
-        // changed by St. Lenz: make_unique<...> is C++ 14 standard!
-        //return std::make_unique<ConfigInput>(stream);
-        return std::unique_ptr<ConfigInput>(new ConfigInput(stream));
+
+        return std::make_unique<ConfigInput>(stream);
     }
 
 }
diff --git a/src/basics/Core/Logger/Logger.cpp b/src/basics/Core/Logger/Logger.cpp
index 95c577bfd1f3d1a42fdeaa9650e4bbe51f8cf098..f7a9b2a1ec2ceb788840d918bbe08fff1e757795 100644
--- a/src/basics/Core/Logger/Logger.cpp
+++ b/src/basics/Core/Logger/Logger.cpp
@@ -23,9 +23,7 @@ namespace logging {
     }
 
     logging::Logger::~Logger()
-    {
-
-    }
+    = default;
 
     void Logger::addStreamToList(std::ostream* stream)
     {
diff --git a/src/basics/Core/Logger/implementations/LoggerImp.cpp b/src/basics/Core/Logger/implementations/LoggerImp.cpp
index b06523afbcee1fc26b8008a7b08ebdf82d68b579..48ad23a3082539706fa70b5d4ae895b35b0a7782 100644
--- a/src/basics/Core/Logger/implementations/LoggerImp.cpp
+++ b/src/basics/Core/Logger/implementations/LoggerImp.cpp
@@ -17,9 +17,7 @@ logging::LoggerImp::LoggerImp(std::ostream* stream) : logging::Logger(stream)
 }
 
 logging::LoggerImp::~LoggerImp()
-{
-
-}
+= default;
 
 logging::Logger& logging::LoggerImp::operator<<(const Level &level)
 {
diff --git a/src/basics/Core/Logger/implementations/LoggerImp.h b/src/basics/Core/Logger/implementations/LoggerImp.h
index 397c9095fe22f3c018352a5c92b612949b77b36f..851f294640d887be8d4ac32d17130c6713d13eac 100644
--- a/src/basics/Core/Logger/implementations/LoggerImp.h
+++ b/src/basics/Core/Logger/implementations/LoggerImp.h
@@ -16,7 +16,7 @@ namespace logging
     {
     public:
         LoggerImp(std::ostream* stream);
-        virtual ~LoggerImp();
+        ~LoggerImp() override;
 
         Logger& operator<<(const Level &level) override;
         Logger& operator<<(const std::string &message) override;
diff --git a/src/basics/Core/StringUtilities/StringUtil.cpp b/src/basics/Core/StringUtilities/StringUtil.cpp
index 42e8669c3e907c6f149b9bd4418a12fe73e7d211..8fd31c718b9426086ffa3866083f7f4949b1efdc 100644
--- a/src/basics/Core/StringUtilities/StringUtil.cpp
+++ b/src/basics/Core/StringUtilities/StringUtil.cpp
@@ -74,7 +74,7 @@ double StringUtil::toDouble(const std::string &input)
 
 bool StringUtil::toBool(const std::string &input)
 {
-    bool b = 0;
+    bool b {false};
     std::string trimmedInput = trim(input);
     if (!toBool(b, trimmedInput, std::boolalpha))
         throw "StringUtils::toBool() - Not a bool: " + trimmedInput;
@@ -143,7 +143,7 @@ std::vector<bool> StringUtil::toBoolVector(const std::string & input)
     inputEntries = split(input, " \n\t");
 	for(std::string entry : inputEntries)
 	{
-		bool b = 0;
+		bool b {false};
 		std::string trimmedInput = trim(input);
 		if (toBool(b, trimmedInput, std::noboolalpha))
 			v.push_back(b);
diff --git a/src/basics/Core/StringUtilities/StringUtil.h b/src/basics/Core/StringUtilities/StringUtil.h
index e860418cb826b800701c1ede60a378fa07f8cf92..63ee9e965737e6fdfdb91d17bd6b158c76634453 100644
--- a/src/basics/Core/StringUtilities/StringUtil.h
+++ b/src/basics/Core/StringUtilities/StringUtil.h
@@ -37,9 +37,9 @@ public:
     static BASICS_EXPORT bool endsWith(const std::string &input, const std::string &end);
 
 private:
-    StringUtil() {};
-    StringUtil(const StringUtil&) {};
-    virtual ~StringUtil() {};
+    StringUtil() = default;;
+    StringUtil(const StringUtil&) = default;;
+    virtual ~StringUtil() = default;;
 
     static bool toBool(bool &t, const std::string &input, std::ios_base &(*f)(std::ios_base&));
 };
diff --git a/src/basics/Core/Timer/TimerImp.h b/src/basics/Core/Timer/TimerImp.h
index 9cda82fb059e6a1dcb719aba8a4a972c4b363e9c..9759b9daac566fe23c04235105357ea9770457a7 100644
--- a/src/basics/Core/Timer/TimerImp.h
+++ b/src/basics/Core/Timer/TimerImp.h
@@ -12,7 +12,7 @@
 class BASICS_EXPORT TimerImp : public Timer
 {
 public:
-    typedef std::chrono::high_resolution_clock::time_point timePoint;
+    using timePoint = std::chrono::high_resolution_clock::time_point;
 
     void start() override;
     void end() override;
diff --git a/src/basics/Core/VectorTypes.cpp b/src/basics/Core/VectorTypes.cpp
index 5abd02cfe84c5707a6ad6cc7fdfd71924dc4d0fc..59c3d80c8cbfae3f177484a8378edf50bfdbb86e 100644
--- a/src/basics/Core/VectorTypes.cpp
+++ b/src/basics/Core/VectorTypes.cpp
@@ -2,19 +2,19 @@
 
 //Vec3 Vec3::operator+( Vec3& left, Vec3& right ){
 Vec3 Vec3::operator+( Vec3& right ){
-    return Vec3( this->x + right.x, 
+    return { this->x + right.x, 
                  this->y + right.y, 
-                 this->z + right.z );
+                 this->z + right.z };
 }
 
 Vec3 Vec3::operator-( Vec3& right ){
-    return Vec3( this->x - right.x, 
+    return { this->x - right.x, 
                  this->y - right.y, 
-                 this->z - right.z );
+                 this->z - right.z };
 }
 
 Vec3 operator*( real scalar, Vec3& vec ){
-    return Vec3( scalar * vec.x, 
+    return { scalar * vec.x, 
                  scalar * vec.y, 
-                 scalar * vec.z );
+                 scalar * vec.z };
 }
diff --git a/src/basics/Core/VectorTypes.h b/src/basics/Core/VectorTypes.h
index dd4b26779c594ca4bdb9a0f57268ce879026a3fb..d59771bf9934d59431ed3c3f408defc7950c02cd 100644
--- a/src/basics/Core/VectorTypes.h
+++ b/src/basics/Core/VectorTypes.h
@@ -16,10 +16,10 @@
 #include "RealConstants.h"
 
 struct BASICS_EXPORT Vec3 {
-    real x, y, z; 
+    real x{c0o1}, y{c0o1}, z{c0o1}; 
 
     __host__ __device__ Vec3(real x, real y, real z) : x(x), y(y), z(z) {}
-    __host__ __device__ Vec3() : x(c0o1), y(c0o1), z(c0o1) {}
+    __host__ __device__ Vec3()  = default;
 
     __host__ __device__ real length() {
         return std::sqrt( x*x + y*y + z*z );
diff --git a/src/basics/basics/container/CbArray2D.h b/src/basics/basics/container/CbArray2D.h
index c4c115c29321073b4f56dccf27ebd53507c93b20..107bc386f964b2276ccb0ece2bf022d139b757c6 100644
--- a/src/basics/basics/container/CbArray2D.h
+++ b/src/basics/basics/container/CbArray2D.h
@@ -53,13 +53,13 @@
 class IndexerX2X1
 {
 public:
-   typedef int size_type;
+   using size_type = int;
 public:
-   inline std::size_t getIndex(const size_type& x1, const size_type& x2, const size_type& nx1, const size_type& nx2) const
+   inline std::size_t getIndex(const size_type& x1, const size_type& x2, const size_type& nx1, const size_type&  /*nx2*/) const
    {
       return nx1* x2 + x1;
    }
-   inline std::size_t getStartIndexOfSortedArray(const size_type& x1, const size_type& x2, const size_type& nx1, const size_type& nx2) const
+   inline std::size_t getStartIndexOfSortedArray(const size_type&  /*x1*/, const size_type& x2, const size_type& nx1, const size_type&  /*nx2*/) const
    {
       return  nx1* x2;
    }
@@ -74,13 +74,13 @@ public:
 class IndexerX1X2
 {
 public:
-   typedef int size_type;
+   using size_type = int;
 public:
-   inline std::size_t getIndex(const size_type& x1, const size_type& x2, const size_type& nx1,const size_type& nx2) const
+   inline std::size_t getIndex(const size_type& x1, const size_type& x2, const size_type&  /*nx1*/,const size_type& nx2) const
    {
       return nx2* x1+ x2;
    }
-   inline std::size_t getStartIndexOfSortedArray(const size_type& x1, const size_type& x2, const size_type& nx1, const size_type& nx2) const
+   inline std::size_t getStartIndexOfSortedArray(const size_type& x1, const size_type&  /*x2*/, const size_type&  /*nx1*/, const size_type& nx2) const
    {
       return  nx2* x1;
    }
@@ -104,13 +104,13 @@ template<typename T, typename IndexClass = IndexerX2X1>
 class CbArray2D
 {
 public:
-   typedef T                                                   value_type;
-   typedef IndexClass                                          indexer_type;
-   typedef typename IndexClass::size_type                      size_type;
-   typedef typename std::vector< value_type >::reference       reference;
-   typedef typename std::vector< value_type >::const_reference const_reference;
-   typedef typename std::vector< value_type >::pointer         pointer;
-   typedef typename std::vector< value_type >::const_pointer   const_pointer;
+   using value_type = T;
+   using indexer_type = IndexClass;
+   using size_type = typename IndexClass::size_type;
+   using reference = typename std::vector<value_type>::reference;
+   using const_reference = typename std::vector<value_type>::const_reference;
+   using pointer = typename std::vector<value_type>::pointer;
+   using const_pointer = typename std::vector<value_type>::const_pointer;
 
 private:
    template< typename value_type2, typename IndexClass2 > friend class CbArray2D;
@@ -163,10 +163,7 @@ public:
          this->data[i] = src.data[i];
    }
    /*=======================================================================*/
-   virtual ~CbArray2D()
-   {
-      //vector wird automatisch zerstoert
-   }
+   virtual ~CbArray2D() = default;
    /*=======================================================================*/
    CbArray2D& operator= (const CbArray2D& rhs)
    {
diff --git a/src/basics/basics/container/CbArray3D.h b/src/basics/basics/container/CbArray3D.h
index f8ad3e8c9e114729bcaa1e6bfa67fa2c9cceba0d..103cc6110574328bfc673843d78c02563fdd5b66 100644
--- a/src/basics/basics/container/CbArray3D.h
+++ b/src/basics/basics/container/CbArray3D.h
@@ -56,15 +56,15 @@
 class IndexerX3X2X1// FunctorX1SortedForX1X2Plane
 {
 public:
-   typedef size_t size_type;
+   using size_type = size_t;
 public:
    inline std::size_t getIndex(  const size_type& x1 , const size_type& x2 , const size_type& x3
-                               , const size_type& nx1, const size_type& nx2, const size_type& nx3 ) const
+                               , const size_type& nx1, const size_type& nx2, const size_type&  /*nx3*/ ) const
    {
       return  nx1 * ( nx2 * x3 + x2) + x1 ;
    }
-   inline std::size_t getStartIndexOfSortedArray(  const size_type& x1 , const size_type& x2 , const size_type& x3
-                                                 , const size_type& nx1, const size_type& nx2, const size_type& nx3 ) const
+   inline std::size_t getStartIndexOfSortedArray(  const size_type&  /*x1*/ , const size_type& x2 , const size_type& x3
+                                                 , const size_type& nx1, const size_type& nx2, const size_type&  /*nx3*/ ) const
    {
       return  nx1 * ( nx2 * x3 + x2);
    }
@@ -80,15 +80,15 @@ public:
 class IndexerX1X2X3 //FunctorX3SortedForX3X2Plane
 {
 public:
-   typedef size_t size_type;
+   using size_type = size_t;
 public:
    inline std::size_t getIndex(  const size_type& x1 , const size_type& x2 , const size_type& x3
-                               , const size_type& nx1, const size_type& nx2, const size_type& nx3 ) const
+                               , const size_type&  /*nx1*/, const size_type& nx2, const size_type& nx3 ) const
    {
       return  nx3 * ( nx2 * x1 + x2) + x3 ;
    }
-   inline std::size_t getStartIndexOfSortedArray(  const size_type& x1 , const size_type& x2 , const size_type& x3
-                                                 , const size_type& nx1, const size_type& nx2, const size_type& nx3 ) const
+   inline std::size_t getStartIndexOfSortedArray(  const size_type& x1 , const size_type& x2 , const size_type&  /*x3*/
+                                                 , const size_type&  /*nx1*/, const size_type& nx2, const size_type& nx3 ) const
    {
       return  nx3 * ( nx2 * x1 + x2);
    }
@@ -104,15 +104,15 @@ public:
 class IndexerX2X1X3
 {
 public:
-   typedef size_t size_type;
+   using size_type = size_t;
 public:
    inline std::size_t getIndex(  const size_type& x1 , const size_type& x2 , const size_type& x3
-                               , const size_type& nx1, const size_type& nx2, const size_type& nx3 ) const
+                               , const size_type& nx1, const size_type&  /*nx2*/, const size_type& nx3 ) const
    {
       return  nx3* ( nx1 * x2 + x1) + x3 ;
    }
-   inline std::size_t getStartIndexOfSortedArray(  const size_type& x1 , const size_type& x2 , const size_type& x3
-                                                 , const size_type& nx1, const size_type& nx2, const size_type& nx3 ) const
+   inline std::size_t getStartIndexOfSortedArray(  const size_type& x1 , const size_type& x2 , const size_type&  /*x3*/
+                                                 , const size_type& nx1, const size_type&  /*nx2*/, const size_type& nx3 ) const
    {
       return  nx3* ( nx1 * x2 + x1);
    }
@@ -136,15 +136,15 @@ template<typename T, typename IndexClass = IndexerX3X2X1>
 class CbArray3D
 {
 public:
-   typedef SPtr< CbArray3D <T,IndexClass> > CbArray3DPtr;
+   using CbArray3DPtr = SPtr<CbArray3D<T, IndexClass> >;
 
-   typedef T                                                   value_type;
-   typedef IndexClass                                          indexer_type;
-   typedef typename IndexClass::size_type                      size_type;
-   typedef typename std::vector< value_type >::reference       reference;
-   typedef typename std::vector< value_type >::const_reference const_reference;
-   typedef typename std::vector< value_type >::pointer         pointer;
-   typedef typename std::vector< value_type >::const_pointer   const_pointer;
+   using value_type = T;
+   using indexer_type = IndexClass;
+   using size_type = typename IndexClass::size_type;
+   using reference = typename std::vector<value_type>::reference;
+   using const_reference = typename std::vector<value_type>::const_reference;
+   using pointer = typename std::vector<value_type>::pointer;
+   using const_pointer = typename std::vector<value_type>::const_pointer;
 
 private:
    template< typename value_type2, typename IndexClass2 > friend class CbArray3D;
@@ -199,10 +199,7 @@ public:
          this->data[i] = src.data[i];
    }
    /*=======================================================================*/
-   virtual ~CbArray3D()
-   {
-      //vector wird automatisch zerstoert
-   }
+   virtual ~CbArray3D() = default;
    /*=======================================================================*/
    CbArray3D& operator= (const CbArray3D& rhs)
    {
diff --git a/src/basics/basics/container/CbArray4D.h b/src/basics/basics/container/CbArray4D.h
index 21579b0da97abf5a7bb062d17f4cc03b3fefaaef..16c5542323de11ab72c3598e5b6fa03ed475e18e 100644
--- a/src/basics/basics/container/CbArray4D.h
+++ b/src/basics/basics/container/CbArray4D.h
@@ -56,15 +56,15 @@
 class IndexerX1X2X3X4
 {
 public:
-   typedef int size_type;
+   using size_type = int;
 public:
    inline std::size_t getIndex( const size_type& x1 , const size_type& x2 , const size_type& x3 , const size_type& x4
-                            , const size_type& nx1, const size_type& nx2, const size_type& nx3, const size_type& nx4 )  const
+                            , const size_type&  /*nx1*/, const size_type& nx2, const size_type& nx3, const size_type& nx4 )  const
    {
       return nx4*(nx3*(nx2*x1+ x2)+x3)+x4 ;
    }
-   inline std::size_t getStartIndexOfSortedArray(  const size_type& x1 , const size_type& x2 , const size_type& x3 , const size_type& x4
-                                               , const size_type& nx1, const size_type& nx2, const size_type& nx3, const size_type& nx4 )  const
+   inline std::size_t getStartIndexOfSortedArray(  const size_type& x1 , const size_type& x2 , const size_type& x3 , const size_type&  /*x4*/
+                                               , const size_type&  /*nx1*/, const size_type& nx2, const size_type& nx3, const size_type& nx4 )  const
    {
       return  nx4*(nx3*(nx2*x1+ x2)+x3);
    }
@@ -82,15 +82,15 @@ public:
 class IndexerX4X3X2X1
 {
 public:
-   typedef size_t size_type;
+   using size_type = size_t;
 public:
    inline std::size_t getIndex( const size_type& x1 , const size_type& x2 , const size_type& x3 , const size_type& x4
-      , const size_type& nx1, const size_type& nx2, const size_type& nx3, const size_type& nx4 )  const
+      , const size_type& nx1, const size_type& nx2, const size_type& nx3, const size_type&  /*nx4*/ )  const
    {
       return nx1*(nx2*(nx3*x4+ x3)+x2)+x1;
    }
-   inline std::size_t getStartIndexOfSortedArray(  const size_type& x1 , const size_type& x2 , const size_type& x3 , const size_type& x4
-      , const size_type& nx1, const size_type& nx2, const size_type& nx3, const size_type& nx4 )  const
+   inline std::size_t getStartIndexOfSortedArray(  const size_type&  /*x1*/ , const size_type& x2 , const size_type& x3 , const size_type& x4
+      , const size_type& nx1, const size_type& nx2, const size_type& nx3, const size_type&  /*nx4*/ )  const
    {
       return  nx1*(nx2*(nx3*x4+ x3)+x2);
    }
@@ -110,15 +110,15 @@ template<typename T, typename IndexClass = IndexerX4X3X2X1>
 class CbArray4D
 {
 public:
-   typedef SPtr< CbArray4D <T,IndexClass> > CbArray4DPtr;
+   using CbArray4DPtr = SPtr<CbArray4D<T, IndexClass> >;
 
-   typedef T                                                   value_type;
-   typedef IndexClass                                          indexer_type;
-   typedef typename IndexClass::size_type                      size_type;
-   typedef typename std::vector< value_type >::reference       reference;
-   typedef typename std::vector< value_type >::const_reference const_reference;
-   typedef typename std::vector< value_type >::pointer         pointer;
-   typedef typename std::vector< value_type >::const_pointer   const_pointer;
+   using value_type = T;
+   using indexer_type = IndexClass;
+   using size_type = typename IndexClass::size_type;
+   using reference = typename std::vector<value_type>::reference;
+   using const_reference = typename std::vector<value_type>::const_reference;
+   using pointer = typename std::vector<value_type>::pointer;
+   using const_pointer = typename std::vector<value_type>::const_pointer;
 
 private:
    template< typename value_type2, typename IndexClass2 > friend class CbArray4D;
@@ -175,10 +175,7 @@ public:
          this->data[i] = src.data[i];
    }
    /*=======================================================================*/
-   virtual ~CbArray4D()
-   {
-      //vector wird automatisch zerstoert
-   }
+   virtual ~CbArray4D()= default;
    /*=======================================================================*/
    CbArray4D& operator= (const CbArray4D& rhs)
    {
diff --git a/src/basics/basics/container/CbVector.h b/src/basics/basics/container/CbVector.h
index d0fc6144d0762b58d823fa4abbecfbf7c61a7aa3..300b0212b4203bbd82a8505a7570bb519d8dfeed 100644
--- a/src/basics/basics/container/CbVector.h
+++ b/src/basics/basics/container/CbVector.h
@@ -63,26 +63,27 @@ template< typename T >
 class CbVector
 {
 public:
-   typedef T           value_type;
-   typedef value_type* pointer;
-   typedef std::size_t size_type;
+   using value_type = T;
+   using pointer = value_type *;
+   using size_type = std::size_t;
 
    friend class CbVectorAllocator<value_type>; //um auf ptrData und dataSize zugreifen zu koennen!
 
+    CbVector<value_type>(const CbVector<value_type>& src) = delete;
 public:
    /*==========================================================*/
    CbVector( CbVectorAllocator<value_type>* const& allocator = new CbVectorAllocatorStd<value_type> )
       :  ptrData(NULL)
-       , dataSize(0)
-       , allocator(allocator)
+       , 
+        allocator(allocator)
    {
       this->allocator->alloc(*this,0,value_type());
    }
    /*==========================================================*/
    CbVector( const size_type size, CbVectorAllocator<value_type>* const& allocator = new CbVectorAllocatorStd<value_type>, const value_type& value=value_type() )
       :  ptrData(NULL)
-       , dataSize(0)
-       , allocator(allocator)
+       , 
+        allocator(allocator)
    {
       this->allocator->alloc(*this,size,value);
    }
@@ -99,7 +100,8 @@ public:
    /*=======================================================================*/
    CbVector& operator= (const CbVector& src)
    {
-      if(this == &src) return *this;
+      if(this == &src)
+          return *this;
 
       //gespeicherte Datenelemente loeschen
       //Laenge anpassen
@@ -205,9 +207,8 @@ public:
 
 private:
    value_type* ptrData;
-   size_type   dataSize;
+   size_type   dataSize{0};
    CbVectorAllocator<value_type>* allocator;
-   CbVector<value_type>(const CbVector<value_type>& src);
    //CbVector<value_type>& operator=(const CbVector<value_type>& src);
 };
 
@@ -218,12 +219,12 @@ template< typename T >
 class CbVectorAllocator
 {
 public:
-   typedef typename CbVector<T>::value_type          value_type;
-   typedef typename CbVector<value_type>::size_type  size_type;
+   using value_type = typename CbVector<T>::value_type;
+   using size_type = typename CbVector<value_type>::size_type;
 
 public:
-   CbVectorAllocator() {}
-   virtual ~CbVectorAllocator() {}
+   CbVectorAllocator() = default;
+   virtual ~CbVectorAllocator() = default;
 
    virtual bool alloc(CbVector< value_type >& vec, const size_type& dataSize, const value_type& value=value_type()) = 0;
    virtual bool resize(CbVector< value_type >& vec, const size_type& dataSize, const value_type& value=value_type()) = 0;
@@ -254,8 +255,8 @@ class CbVectorAllocatorStd : public CbVectorAllocator<T>
 {
 public:
    //typedefs wiederholen, da Basisklasse = template -> "Dependent-Base"-Problem
-   typedef typename CbVector<T>::value_type          value_type;
-   typedef typename CbVector<value_type>::size_type  size_type;
+   using value_type = typename CbVector<T>::value_type;
+   using size_type = typename CbVector<value_type>::size_type;
 
 public:
    CbVectorAllocatorStd() : CbVectorAllocator<value_type>()
diff --git a/src/basics/basics/objects/ObObject.h b/src/basics/basics/objects/ObObject.h
index 0675ae68ff99f7db380c3d99500268bf94698b2b..0b543dc18c2a260a7146a168155f33966d619638 100644
--- a/src/basics/basics/objects/ObObject.h
+++ b/src/basics/basics/objects/ObObject.h
@@ -43,14 +43,14 @@ public:
     ObObject() = default;
    ObObject(const std::string& name) : name(name) { }
 
-   virtual ~ObObject() = default;
+   ~ObObject() override = default;
 
    virtual ObObject* clone() = 0;
 
    virtual std::string getName()  { return name; }
    void setName(std::string name) { this->name = name; }
 
-   virtual std::string toString() override = 0;
+   std::string toString() override = 0;
 
 
 private:
diff --git a/src/basics/basics/utilities/UbComparators.h b/src/basics/basics/utilities/UbComparators.h
index abde770000e220422f06bae6ba83640ef9c45f15..0e7d2cbeda4334e34630611f9bafa90d4e5ab7c0 100644
--- a/src/basics/basics/utilities/UbComparators.h
+++ b/src/basics/basics/utilities/UbComparators.h
@@ -45,8 +45,8 @@ namespace UbComparators
    template <typename T, typename C> 
    struct MemberInfo<T C::*> 
    { 
-      typedef T type; 
-      typedef C class_type; 
+      using type = T; 
+      using class_type = C; 
 
       static       T& apply(       C& c, T C::* ptr ) { return c.*ptr; } 
       static const T& apply( const C& c, T C::* ptr ) { return c.*ptr; } 
@@ -56,8 +56,8 @@ namespace UbComparators
    template <typename T, typename C> 
    struct MemberInfo<T (C::*)()> 
    { 
-      typedef T type; 
-      typedef C class_type; 
+      using type = T; 
+      using class_type = C; 
 
       static T apply( C& c, T (C::*ptr)() ) { return (c.*ptr)(); } 
    }; 
@@ -66,8 +66,8 @@ namespace UbComparators
    template <typename T, typename C> 
    struct MemberInfo<T (C::*)() const> 
    { 
-      typedef T type; 
-      typedef C class_type; 
+      using type = T; 
+      using class_type = C; 
 
       static T apply( const C& c, T (C::*ptr)() const ) { return (c.*ptr)(); } 
    }; 
@@ -77,7 +77,7 @@ namespace UbComparators
    class MemComp 
       : private Comp  // -> usage of Empty Base Class Optimization (EBCO) 
    { 
-      typedef typename MemberInfo<Ptr>::class_type C; 
+      using C = typename MemberInfo<Ptr>::class_type; 
 
    public: 
       MemComp( Ptr ptr, Comp c = Comp() ) 
diff --git a/src/basics/basics/utilities/UbEqual.h b/src/basics/basics/utilities/UbEqual.h
index e748bec34fd33b1f14fa694a43e4ffcd26fbfaed..c605c36efd8b793ba4585aad27fc9eb083185e26 100644
--- a/src/basics/basics/utilities/UbEqual.h
+++ b/src/basics/basics/utilities/UbEqual.h
@@ -56,54 +56,54 @@
 template < typename T1, typename T2 >
 struct UbEqualTrait
 {
-   typedef T1 High;
-   typedef T1 Low;
+   using High = T1;
+   using Low = T1;
 };
 
 //std-trait, fuer gleiche T
 template < typename T >
 struct UbEqualTrait< T, T >
 {
-   typedef T High;
-   typedef T Low;
+   using High = T;
+   using Low = T;
 };
 
 //spezialisierung fuer diverse Typen-Tuples
-template<> struct UbEqualTrait< short, int >          { typedef int         High; typedef short  Low; };
-template<> struct UbEqualTrait< short, long >         { typedef long        High; typedef short  Low; };
-template<> struct UbEqualTrait< short, float >        { typedef float       High; typedef short  Low; };
-template<> struct UbEqualTrait< short, double >       { typedef double      High; typedef short  Low; };
-template<> struct UbEqualTrait< short, long double >  { typedef long double High; typedef short  Low; };
-
-template<> struct UbEqualTrait< int, short >          { typedef int         High; typedef short  Low; };
-template<> struct UbEqualTrait< int, long >           { typedef long        High; typedef int    Low; };
-template<> struct UbEqualTrait< int, float >          { typedef float       High; typedef int    Low; };
-template<> struct UbEqualTrait< int, double >         { typedef double      High; typedef int    Low; };
-template<> struct UbEqualTrait< int, long double >    { typedef long double High; typedef int    Low; };
-
-template<> struct UbEqualTrait< long, short >         { typedef long        High; typedef short  Low; };
-template<> struct UbEqualTrait< long, int >           { typedef long        High; typedef int    Low; };
-template<> struct UbEqualTrait< long, float >         { typedef float       High; typedef long   Low; };
-template<> struct UbEqualTrait< long, double >        { typedef double      High; typedef long   Low; };
-template<> struct UbEqualTrait< long, long double >   { typedef long double High; typedef long   Low; };
-
-template<> struct UbEqualTrait< float, short >        { typedef float       High; typedef short  Low; };
-template<> struct UbEqualTrait< float, int >          { typedef float       High; typedef int    Low; };
-template<> struct UbEqualTrait< float, long >         { typedef float       High; typedef long   Low; };
-template<> struct UbEqualTrait< float, double >       { typedef double      High; typedef float  Low; };
-template<> struct UbEqualTrait< float, long double >  { typedef long double High; typedef float  Low; };
-
-template<> struct UbEqualTrait< double, short >       { typedef double      High; typedef short  Low; };
-template<> struct UbEqualTrait< double, int >         { typedef double      High; typedef int    Low; };
-template<> struct UbEqualTrait< double, long >        { typedef double      High; typedef long   Low; };
-template<> struct UbEqualTrait< double, float >       { typedef double      High; typedef float  Low; };
-template<> struct UbEqualTrait< double, long double > { typedef long double High; typedef double Low; };
-
-template<> struct UbEqualTrait< long double, short >  { typedef long double High; typedef short  Low; };
-template<> struct UbEqualTrait< long double, int >    { typedef long double High; typedef int    Low; };
-template<> struct UbEqualTrait< long double, long >   { typedef long double High; typedef long   Low; };
-template<> struct UbEqualTrait< long double, float >  { typedef long double High; typedef float  Low; };
-template<> struct UbEqualTrait< long double, double > { typedef long double High; typedef double Low; };
+template<> struct UbEqualTrait< short, int >          { using High = int; using Low = short; };
+template<> struct UbEqualTrait< short, long >         { using High = long; using Low = short; };
+template<> struct UbEqualTrait< short, float >        { using High = float; using Low = short; };
+template<> struct UbEqualTrait< short, double >       { using High = double; using Low = short; };
+template<> struct UbEqualTrait< short, long double >  { using High = long double; using Low = short; };
+
+template<> struct UbEqualTrait< int, short >          { using High = int; using Low = short; };
+template<> struct UbEqualTrait< int, long >           { using High = long; using Low = int; };
+template<> struct UbEqualTrait< int, float >          { using High = float; using Low = int; };
+template<> struct UbEqualTrait< int, double >         { using High = double; using Low = int; };
+template<> struct UbEqualTrait< int, long double >    { using High = long double; using Low = int; };
+
+template<> struct UbEqualTrait< long, short >         { using High = long; using Low = short; };
+template<> struct UbEqualTrait< long, int >           { using High = long; using Low = int; };
+template<> struct UbEqualTrait< long, float >         { using High = float; using Low = long; };
+template<> struct UbEqualTrait< long, double >        { using High = double; using Low = long; };
+template<> struct UbEqualTrait< long, long double >   { using High = long double; using Low = long; };
+
+template<> struct UbEqualTrait< float, short >        { using High = float; using Low = short; };
+template<> struct UbEqualTrait< float, int >          { using High = float; using Low = int; };
+template<> struct UbEqualTrait< float, long >         { using High = float; using Low = long; };
+template<> struct UbEqualTrait< float, double >       { using High = double; using Low = float; };
+template<> struct UbEqualTrait< float, long double >  { using High = long double; using Low = float; };
+
+template<> struct UbEqualTrait< double, short >       { using High = double; using Low = short; };
+template<> struct UbEqualTrait< double, int >         { using High = double; using Low = int; };
+template<> struct UbEqualTrait< double, long >        { using High = double; using Low = long; };
+template<> struct UbEqualTrait< double, float >       { using High = double; using Low = float; };
+template<> struct UbEqualTrait< double, long double > { using High = long double; using Low = double; };
+
+template<> struct UbEqualTrait< long double, short >  { using High = long double; using Low = short; };
+template<> struct UbEqualTrait< long double, int >    { using High = long double; using Low = int; };
+template<> struct UbEqualTrait< long double, long >   { using High = long double; using Low = long; };
+template<> struct UbEqualTrait< long double, float >  { using High = long double; using Low = float; };
+template<> struct UbEqualTrait< long double, double > { using High = long double; using Low = double; };
 
 //////////////////////////////////////////////////////////////////////////
 //fuer Allgmeine-Typen ( operator== ):
@@ -127,7 +127,7 @@ inline bool specific_equal< long double, long double >(const long double& a, con
 template< typename T1, typename T2 >
 inline bool isUbEqual(const T1& a, const T2& b)
 {
-   typedef typename UbEqualTrait<T1,T2>::Low Low;
+   using Low = typename UbEqualTrait<T1, T2>::Low;
    return specific_equal< Low, Low >(static_cast< Low >( a ),static_cast< Low >( b ));
 };
 
diff --git a/src/basics/basics/utilities/UbException.h b/src/basics/basics/utilities/UbException.h
index f999f8e13f4d37ac88ccfb72b2fcd2f581a0f3e1..7c625c33f73fb92ae4d3aa1a7a20c822276f16a0 100644
--- a/src/basics/basics/utilities/UbException.h
+++ b/src/basics/basics/utilities/UbException.h
@@ -80,7 +80,7 @@
 class UbException : public std::runtime_error
 {
 public:
-   typedef UbTuple< std::string, int, std::string, std::string > ExceptionData;
+   using ExceptionData = UbTuple<std::string, int, std::string, std::string>;
 public:
    //////////////////////////////////////////////////////////////////////////
    //constructors
@@ -109,11 +109,11 @@ public:
    }
    //////////////////////////////////////////////////////////////////////////
    //destructor
-   virtual ~UbException() throw() { }
+   ~UbException() noexcept override = default;
    //////////////////////////////////////////////////////////////////////////
    //virtual public methods
    //returns  exception-string
-   virtual const char* what() const throw()
+   const char* what() const noexcept override
    {
       exceptionString = this->toString();
       return exceptionString.c_str();  //ansonsten ist das Verhalten anschliessend undefiniert!
diff --git a/src/basics/basics/utilities/UbInfinity.h b/src/basics/basics/utilities/UbInfinity.h
index 229a14b23c79fc3bc95650bb272209f3b7392d23..460c439ecd3141ab8bc1973934007acf58a42b50 100644
--- a/src/basics/basics/utilities/UbInfinity.h
+++ b/src/basics/basics/utilities/UbInfinity.h
@@ -69,7 +69,7 @@ class UbNegInfinity
       return UbLimits<T>::ninf() == rhs;
    }
  protected:
-    inline UbNegInfinity() {}
+    inline UbNegInfinity() = default;
 
  private:
    UbNegInfinity( const UbNegInfinity& ninf );             //copy constructor (private & undefined)
diff --git a/src/basics/basics/utilities/UbLogger.h b/src/basics/basics/utilities/UbLogger.h
index ccb3f1f87eb21e797f51ec1e8a6c9b48eecf942a..e30157cb56c8979f2b3fffb27129008626c66fba 100644
--- a/src/basics/basics/utilities/UbLogger.h
+++ b/src/basics/basics/utilities/UbLogger.h
@@ -110,7 +110,7 @@ template <typename OutputPolicy>
 class UbLogger
 {   
 public:
-   typedef OutputPolicy output_policy;
+   using output_policy = OutputPolicy;
 public:
     UbLogger();
     virtual ~UbLogger();
@@ -138,8 +138,7 @@ private:
 //////////////////////////////////////////////////////////////////////////
 template <typename OutputPolicy>
 UbLogger<OutputPolicy>::UbLogger()
-{
-}
+= default;
 /*==========================================================*/
 template <typename OutputPolicy>
 std::ostringstream& UbLogger<OutputPolicy>::get(const LogLevel& level) 
diff --git a/src/basics/basics/utilities/UbMath.h b/src/basics/basics/utilities/UbMath.h
index 659b66cc5d12dab588034e3f7997fe448f769a46..195dda3998120d85f506b8faf09409858a6a0a52 100644
--- a/src/basics/basics/utilities/UbMath.h
+++ b/src/basics/basics/utilities/UbMath.h
@@ -176,7 +176,7 @@ namespace UbMath
    template<typename T1, typename T2>
    inline bool equal(const T1& value, const T2& reference) 
    { 
-      typedef typename UbEqualTrait<T1,T2>::High High;
+      using High = typename UbEqualTrait<T1, T2>::High;
       return std::fabs(value-reference) < Epsilon<High>::val(); 
    }
    /*=======================================================*/
@@ -189,28 +189,28 @@ namespace UbMath
    template<typename T1, typename T2>
    inline bool less(const T1& value, const T2& reference)   
    { 
-      typedef typename UbEqualTrait<T1,T2>::High High;
+      using High = typename UbEqualTrait<T1, T2>::High;
       return value < reference - Epsilon<High>::val(); 
    }
    /*=======================================================*/
    template<typename T1, typename T2>
    inline bool lessEqual(const T1& value, const T2& reference) 
    { 
-      typedef typename UbEqualTrait<T1,T2>::High High;
+      using High = typename UbEqualTrait<T1, T2>::High;
       return value <= reference + Epsilon<High>::val();
    }
    /*=======================================================*/
    template<typename T1, typename T2>
    inline bool greater(const T1& value, const T2& reference)      
    { 
-      typedef typename UbEqualTrait<T1,T2>::High High;
+      using High = typename UbEqualTrait<T1, T2>::High;
       return value > reference + Epsilon<High>::val();  
    }
    /*=======================================================*/
    template<typename T1, typename T2>
    inline bool greaterEqual(const T1& value, const T2& reference) 
    { 
-      typedef typename UbEqualTrait<T1,T2>::High High;
+      using High = typename UbEqualTrait<T1, T2>::High;
       return value >= reference - Epsilon<High>::val(); 
    }
    /*=======================================================*/
diff --git a/src/basics/basics/utilities/UbObservable.h b/src/basics/basics/utilities/UbObservable.h
index 56967b904836debbec0f8e5fc785de030824749d..f877718f185615bd0645d8b54fd74b35eba4f476 100644
--- a/src/basics/basics/utilities/UbObservable.h
+++ b/src/basics/basics/utilities/UbObservable.h
@@ -77,17 +77,16 @@ protected:
      Usually this constructor is used in extended classes.
    */
    UbObservable()
-   {
-   }
+   = default;
    
-   UbObservable(const UbObservable& src)
+   UbObservable(const UbObservable&  /*src*/)
    {
       //no copy of observers !!!
    }
    
    //falls irgendein schlaumeier den =operator von UbObservable aufrufen sollte,
    //dann macht diesr auch keine kopie! (Allg: zuweisungsoperatoren werden nie vererbt
-   UbObservable& operator=(const UbObservable& src)
+   UbObservable& operator=(const UbObservable&  /*src*/)
    {
       return *this;
    }
diff --git a/src/basics/basics/utilities/UbObserver.h b/src/basics/basics/utilities/UbObserver.h
index 0f2db5270aec44ba41a72f9ac8e6022308a12ecd..dab5d28c0cc83a4a73fdba8d9be7f979f9d96c2b 100644
--- a/src/basics/basics/utilities/UbObserver.h
+++ b/src/basics/basics/utilities/UbObserver.h
@@ -50,11 +50,11 @@ class UbObserver
 {
 protected:
 
-   UbObserver(){}
+   UbObserver()= default;
 
 public:
 
-   virtual ~UbObserver(){}
+   virtual ~UbObserver()= default;
 
    /*======================================================================*/
    /*  Methods                                                           */
diff --git a/src/basics/basics/utilities/UbScheduler.h b/src/basics/basics/utilities/UbScheduler.h
index c927e45b4e4f3c3188b2d1b46a15abc6bd466319..fcb410b2270843ee8e6c8a274228be71446d2841 100644
--- a/src/basics/basics/utilities/UbScheduler.h
+++ b/src/basics/basics/utilities/UbScheduler.h
@@ -100,7 +100,7 @@ public:
       this->addSchedule(schedule);
    }
    /*==========================================================*/
-   virtual ~UbScheduler() {}
+   virtual ~UbScheduler() = default;
    /*==========================================================*/
    inline void addSchedule(const UbSchedule& schedule)
    {
@@ -136,7 +136,7 @@ public:
       }
 
       //nu aber:
-      schedules.push_back(UbSchedule(step, begin, end));
+      schedules.emplace_back(step, begin, end);
 
       if( end>maxT ) maxT = end;
 
@@ -318,7 +318,7 @@ protected:
    std::vector<UbSchedule> schedules;
 };
 
-typedef UbScheduler::UbSchedule UbSchedule;
+using UbSchedule = UbScheduler::UbSchedule;
 
 #endif //UBSCHEDULER_H
 
diff --git a/src/basics/basics/utilities/UbSystem.h b/src/basics/basics/utilities/UbSystem.h
index 8efe16cca5c988764bd1eb19f6ef62d41534355b..975e7027525c0c6f0b115279db08c006ddd8788b 100644
--- a/src/basics/basics/utilities/UbSystem.h
+++ b/src/basics/basics/utilities/UbSystem.h
@@ -57,7 +57,7 @@
    #include "dirent.h"
    #include <sys/stat.h>
    #include <unistd.h>
-   #include <string.h>
+   #include <cstring>
 #elif defined(__AIX__)
    #define UBSYSTEM_AIX
    #include "dirent.h"
@@ -243,7 +243,7 @@ namespace UbSystem
       return static_cast<std::string>( str );
    }
    /*==========================================================*/
-   inline bool isDirectory(const std::string& dir, const unsigned& attemptions = 3)
+   inline bool isDirectory(const std::string& dir, const unsigned&  /*attemptions*/ = 3)
    {
       if( dir.empty() ) 
          UB_THROW( UbException(UB_EXARGS,"dir is empty") );
@@ -493,14 +493,14 @@ namespace UbSystem
    template<typename Ta, typename Tb>
    class IfThenElse<true, Ta, Tb> {
    public:
-      typedef Ta ResultT;
+      using ResultT = Ta;
    };
 
    // partial specialization: false yields third argument
    template<typename Ta, typename Tb>
    class IfThenElse<false, Ta, Tb> {
    public:
-      typedef Tb ResultT;
+      using ResultT = Tb;
    };
    //////////////////////////////////////////////////////////////////////////
    // generic IfThenElse - end
@@ -512,7 +512,7 @@ namespace UbSystem
    template< typename T>
    struct type2type
    {
-      typedef T type;
+      using type = T;
    };
 
 
@@ -522,8 +522,8 @@ namespace UbSystem
    template <typename Pair>
    struct select1st
    {
-      typedef Pair argument_type ;
-      typedef typename Pair::first_type result_type ;
+      using argument_type = Pair ;
+      using result_type = typename Pair::first_type ;
 
       const result_type&  operator()(const argument_type &p) const
       {
@@ -534,8 +534,8 @@ namespace UbSystem
    template <typename Pair>
    struct select2nd
    {
-      typedef Pair argument_type ;
-      typedef typename Pair::second_type result_type ;
+      using argument_type = Pair ;
+      using result_type = typename Pair::second_type ;
 
       const result_type& operator()(const argument_type &p) const
       {
diff --git a/src/basics/basics/utilities/UbTiming.h b/src/basics/basics/utilities/UbTiming.h
index 9260892669a7010ef35c75acc81b460646c06243..35181c4198b818458145a4fa3879f355b24b6536 100644
--- a/src/basics/basics/utilities/UbTiming.h
+++ b/src/basics/basics/utilities/UbTiming.h
@@ -64,7 +64,7 @@ public:
       this->name        = name;
    }
    /*==========================================================*/
-   virtual ~UbTiming() {}  
+   virtual ~UbTiming() = default;  
    /*==========================================================*/
    virtual void initTiming()
    {
@@ -176,8 +176,8 @@ protected:
 
 #ifdef UBSYSTEM_APPLE   //Apple hack
    #include <mach/mach_time.h>  
-   #include <time.h>  
-   #include <stdio.h> 
+   #include <ctime>
+   #include <cstdio>
    inline void mach_absolute_difference(const uint64_t& end, const uint64_t& start, struct timespec *tp) 
    {  
          uint64_t difference = end - start;  
@@ -223,20 +223,19 @@ class UbTimer
 {
 public:
    UbTimer(const bool& storeLapTimes = false) 
-      :  name("unamed"), isMeasuring(false), storeLapTimes(storeLapTimes)
-       , startTime(0.0), totalTime(0.0), lapTime(0.0)
+      :  name("unamed"),  storeLapTimes(storeLapTimes)
+        
    {
 
    }
    /*==========================================================*/
    UbTimer(const std::string& name, const bool& storeLapTimes = false) 
-      :  name(name), isMeasuring(false), storeLapTimes(storeLapTimes)
-       , startTime(0.0), totalTime(0.0), lapTime(0.0)
+      :  name(name), storeLapTimes(storeLapTimes)
    {
 
    }
    /*==========================================================*/
-   virtual ~UbTimer() {}  
+   virtual ~UbTimer() = default;  
    /*==========================================================*/
    double              getLapTime() const               { return this->lapTime;  }
    std::vector<double> getLapTimes() const              { return this->lapTimes; }
@@ -355,12 +354,12 @@ public:
 
 protected:
    std::string name;
-   bool        isMeasuring;
+   bool        isMeasuring{false};
    bool        storeLapTimes;
 
-   double      startTime;
-   double      totalTime;
-   double      lapTime;
+   double      startTime{0.0};
+   double      totalTime{0.0};
+   double      lapTime{0.0};
    
    std::vector<double> lapTimes;
 };
@@ -380,16 +379,16 @@ protected:
 
 class UbProgressTimer : public UbTimer
 {
-private:
-	UbProgressTimer(const UbProgressTimer& rhs);
 public:
+    UbProgressTimer(const UbProgressTimer& rhs) = delete;
+
   explicit UbProgressTimer( std::ostream & os = std::cout )
      : UbTimer(),os(os) 
   {
   	  this->start();
   }
   /*==========================================================*/
-  ~UbProgressTimer()
+  ~UbProgressTimer() override
   {
   //  A) Throwing an exception from a destructor is a Bad Thing.
   //  B) The progress_timer destructor does output which may throw.
diff --git a/src/basics/basics/utilities/UbTuple.h b/src/basics/basics/utilities/UbTuple.h
index 6b9b8b52aef2cb498c127506125b644113456aad..f081f2e9e0a054e320a2dfb1fd6e6e49d0489216 100644
--- a/src/basics/basics/utilities/UbTuple.h
+++ b/src/basics/basics/utilities/UbTuple.h
@@ -78,12 +78,12 @@ template <typename T>
 class UbTypeOp    // primary template
 {           
 public:
-   typedef T         ArgT;
-   typedef T         BareT;
-   typedef T const   ConstT;
-   typedef T &       RefT;
-   typedef T &       RefBareT;
-   typedef T const & RefConstT;
+   using ArgT = T;
+   using BareT = T;
+   using ConstT = const T;
+   using RefT = T &;
+   using RefBareT = T &;
+   using RefConstT = const T &;
 };
 /**** end of typeop1.hpp ****/
 
@@ -95,12 +95,12 @@ template <typename T>
 class UbTypeOp <T const>  // partial specialization for const types
 {
  public:
-   typedef T const   ArgT;
-   typedef T         BareT;
-   typedef T const   ConstT;
-   typedef T const & RefT;
-   typedef T &       RefBareT;
-   typedef T const & RefConstT;
+   using ArgT = const T;
+   using BareT = T;
+   using ConstT = const T;
+   using RefT = const T &;
+   using RefBareT = T &;
+   using RefConstT = const T &;
 };
 /**** end of typeop2.hpp ****/
 
@@ -112,12 +112,12 @@ template <typename T>
 class UbTypeOp <T&>        // partial specialization for references
 {
 public:
-   typedef T &                           ArgT;
-   typedef typename UbTypeOp<T>::BareT   BareT;
-   typedef T const                       ConstT;
-   typedef T &                           RefT;
-   typedef typename UbTypeOp<T>::BareT & RefBareT;
-   typedef T const &                     RefConstT;
+   using ArgT = T &;
+   using BareT = typename UbTypeOp<T>::BareT;
+   using ConstT = const T;
+   using RefT = T &;
+   using RefBareT = typename UbTypeOp<T>::BareT &;
+   using RefConstT = const T &;
 };
 /**** end of typeop3.hpp ****/
 
@@ -129,12 +129,12 @@ template<>
 class UbTypeOp <void>      // full specialization for void
 {
 public:
-   typedef void       ArgT;
-   typedef void       BareT;
-   typedef void const ConstT;
-   typedef void       RefT;
-   typedef void       RefBareT;
-   typedef void       RefConstT;
+   using ArgT = void;
+   using BareT = void;
+   using ConstT = const void;
+   using RefT = void;
+   using RefBareT = void;
+   using RefConstT = void;
 };
 /**** end of typeop4.hpp ****/
 
@@ -149,8 +149,8 @@ template <typename T1, typename T2>
 class UbDuo 
 {
 public:
-   typedef T1 Type1;  // type of first field
-   typedef T2 Type2;  // type of second field
+   using Type1 = T1;  // type of first field
+   using Type2 = T2;  // type of second field
    enum { N = 2 };    // number of fields
 
 public:
@@ -224,8 +224,8 @@ template <typename A, typename B, typename C>
 class UbDuo<A, UbDuo<B,C> > 
 {
 public:
-   typedef A          T1;           // type of first field
-   typedef UbDuo<B,C> T2;           // type of second field
+   using T1 = A;           // type of first field
+   using T2 = UbDuo<B, C>;           // type of second field
    enum { N = UbDuo<B,C>::N + 1 };  // number of fields
  
 public:
@@ -264,7 +264,7 @@ template <int N, typename T>
 class UbDuoT 
 {
 public:
-   typedef void ResultT;    // in general, the result type is void
+   using ResultT = void;    // in general, the result type is void
 };
 
 // specialization for 1st field of a plain duo
@@ -272,7 +272,7 @@ template <typename A, typename B>
 class UbDuoT<1, UbDuo<A,B> > 
 {
 public:
-   typedef A ResultT;
+   using ResultT = A;
 };
 
 // specialization for 2nd field of a plain duo
@@ -280,7 +280,7 @@ template <typename A, typename B>
 class UbDuoT<2, UbDuo<A,B> > 
 {
 public:
-   typedef B ResultT;
+   using ResultT = B;
 };
 
 // specialization for Nth field of a recursive duo
@@ -288,7 +288,7 @@ template <int N, typename A, typename B, typename C>
 class UbDuoT<N, UbDuo<A, UbDuo<B,C> > > 
 {
 public:
-   typedef typename UbDuoT<N-1, UbDuo<B,C> >::ResultT ResultT;
+   using ResultT = typename UbDuoT<N - 1, UbDuo<B, C> >::ResultT;
 };
 
 // specialization for 1st field of a recursive duo
@@ -296,7 +296,7 @@ template <typename A, typename B, typename C>
 class UbDuoT<1, UbDuo<A, UbDuo<B,C> > > 
 {
 public:
-   typedef A ResultT;
+   using ResultT = A;
 };
 
 // specialization for 2nd field of a recursive duo
@@ -304,7 +304,7 @@ template <typename A, typename B, typename C>
 class UbDuoT<2, UbDuo<A, UbDuo<B,C> > > 
 {
 public:
-   typedef B ResultT;
+   using ResultT = B;
 };
 
 //duo4.hpp
@@ -388,8 +388,8 @@ template <typename A>
 struct UbDuo<A,void> 
 {
 public:
-   typedef A    T1;  // type of first field
-   typedef void T2;  // type of second field
+   using T1 = A;  // type of first field
+   using T2 = void;  // type of second field
    enum { N = 1 };   // number of fields
 
 private:
@@ -464,10 +464,10 @@ template <typename P1,
 class UbTuple : public UbDuo<P1, typename UbTuple<P2,P3,P4,P5,P6,P7,P8,UbNullT>::BaseT> 
 {
 public:
-   typedef UbDuo<P1, typename UbTuple<P2,P3,P4,P5,P6,P7,P8,UbNullT>::BaseT>  BaseT;
+   using BaseT = UbDuo<P1, typename UbTuple<P2, P3, P4, P5, P6, P7, P8, UbNullT>::BaseT>;
 
    // constructor:
-   UbTuple() {}
+   UbTuple() = default;
    UbTuple( typename UbTypeOp<P1>::RefConstT a1,
             typename UbTypeOp<P2>::RefConstT a2,
             typename UbTypeOp<P3>::RefConstT a3 = UbNullT(),
@@ -494,10 +494,10 @@ public:
 template <typename P1, typename P2>
 class UbTuple<P1,P2,UbNullT,UbNullT,UbNullT,UbNullT,UbNullT,UbNullT> : public UbDuo<P1,P2> {
 public:
-   typedef UbDuo<P1,P2> BaseT;
+   using BaseT = UbDuo<P1, P2>;
    
    // constructor:
-   UbTuple() {}
+   UbTuple() = default;
    UbTuple( typename UbTypeOp<P1>::RefConstT a1,
             typename UbTypeOp<P2>::RefConstT a2,
             typename UbTypeOp<UbNullT>::RefConstT = UbNullT(),
@@ -525,10 +525,10 @@ template <typename P1>
 class UbTuple<P1,UbNullT,UbNullT,UbNullT,UbNullT,UbNullT,UbNullT,UbNullT> : public UbDuo<P1,void>
 {
 public:
-   typedef UbDuo<P1,void> BaseT;
+   using BaseT = UbDuo<P1, void>;
 
    // constructor:
-   UbTuple() {}
+   UbTuple() = default;
    UbTuple( typename UbTypeOp<P1>::RefConstT a1,
             typename UbTypeOp<UbNullT>::RefConstT = UbNullT(),
             typename UbTypeOp<UbNullT>::RefConstT = UbNullT(),
@@ -608,26 +608,26 @@ inline UbTuple<T1,T2,T3,T4,T5,T6,T7,T8> makeUbTuple(T1 const &a1, T2 const &a2,T
 }
 
 //some typedefs
-typedef UbTuple<float,float>                               UbTupleFloat2;
-typedef UbTuple<float,float,float>                         UbTupleFloat3;
-typedef UbTuple<int,int>                                   UbTupleInt2;
-typedef UbTuple<int,int,int>                               UbTupleInt3;
-typedef UbTuple<int,int,int,int>                           UbTupleInt4;
-typedef UbTuple<int,int,int,int,int>                       UbTupleInt5;
-typedef UbTuple<int,int,int,int,int,int>                   UbTupleInt6;
-typedef UbTuple<int,int,int,int,int,int,int,int>           UbTupleInt8;
-typedef UbTuple<unsigned int,unsigned int,unsigned int,unsigned int,unsigned int,unsigned int,unsigned int,unsigned int> UbTupleUInt8;
-typedef UbTuple<double,double>                             UbTupleDouble2;
-typedef UbTuple<double,double,double>                      UbTupleDouble3;
-typedef UbTuple<double,double,double,double>               UbTupleDouble4;
-typedef UbTuple<double,double,double,double,double,double> UbTupleDouble6;
-typedef UbTuple<std::string,double,double>                 UbTupleStringDouble2;
-typedef UbTuple<std::string,double,double,double>          UbTupleStringDouble3;
-typedef UbTuple<std::string,int,int,int>                   UbTupleStringInt3;
-typedef UbTuple<short,short,short,short>                   UbTupleShort4;
-typedef UbTuple<bool,bool,bool>                            UbTupleBool3;
-typedef UbTuple<int,double,double>                         UbTupleIntDouble2;
-typedef UbTuple<int, bool>                                 UbTupleIntBool;
+using UbTupleFloat2 = UbTuple<float, float>;
+using UbTupleFloat3 = UbTuple<float, float, float>;
+using UbTupleInt2 = UbTuple<int, int>;
+using UbTupleInt3 = UbTuple<int, int, int>;
+using UbTupleInt4 = UbTuple<int, int, int, int>;
+using UbTupleInt5 = UbTuple<int, int, int, int, int>;
+using UbTupleInt6 = UbTuple<int, int, int, int, int, int>;
+using UbTupleInt8 = UbTuple<int, int, int, int, int, int, int, int>;
+using UbTupleUInt8 = UbTuple<unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int>;
+using UbTupleDouble2 = UbTuple<double, double>;
+using UbTupleDouble3 = UbTuple<double, double, double>;
+using UbTupleDouble4 = UbTuple<double, double, double, double>;
+using UbTupleDouble6 = UbTuple<double, double, double, double, double, double>;
+using UbTupleStringDouble2 = UbTuple<std::string, double, double>;
+using UbTupleStringDouble3 = UbTuple<std::string, double, double, double>;
+using UbTupleStringInt3 = UbTuple<std::string, int, int, int>;
+using UbTupleShort4 = UbTuple<short, short, short, short>;
+using UbTupleBool3 = UbTuple<bool, bool, bool>;
+using UbTupleIntDouble2 = UbTuple<int, double, double>;
+using UbTupleIntBool = UbTuple<int, bool>;
 
 
 #endif //UBTUPLE_H
diff --git a/src/basics/basics/utilities/Vector3D.cpp b/src/basics/basics/utilities/Vector3D.cpp
index bb8fb46a295205bc7d1cc085623b22ad84a40a90..75ab1b814c33f9f1d631dec6189d0117f6168b18 100644
--- a/src/basics/basics/utilities/Vector3D.cpp
+++ b/src/basics/basics/utilities/Vector3D.cpp
@@ -128,6 +128,9 @@ double& Vector3D::X3()
 /*=======================================================*/
 Vector3D& Vector3D::operator=(const Vector3D& rkV)
 {
+    if(this == &rkV)
+        return *this;
+
    m_afTuple[0] = rkV.m_afTuple[0];
    m_afTuple[1] = rkV.m_afTuple[1];
    m_afTuple[2] = rkV.m_afTuple[2];
diff --git a/src/basics/basics/writer/WbWriter.h b/src/basics/basics/writer/WbWriter.h
index 9683c446e47257f6b340aa7c0fed5084a2179aa9..8e5524416350c4704fc8a27882e6c9c61dc51c9f 100644
--- a/src/basics/basics/writer/WbWriter.h
+++ b/src/basics/basics/writer/WbWriter.h
@@ -57,16 +57,16 @@ public:
 
    //////////////////////////////////////////////////////////////////////////
    //nodes
-   virtual std::string writeNodes(const std::string& filename,std::vector< UbTupleFloat3 >& nodes) { throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() );  }
-   virtual std::string writeNodesWithNodeData(const std::string& filename,std::vector< UbTupleFloat3 >& nodes, std::vector<std::string >& datanames, std::vector<std::vector<double > >& nodedata) { throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() );  }
-   virtual std::string writeNodesWithNodeDataDouble(const std::string& filename,std::vector< UbTupleDouble3 >& nodes, std::vector<std::string >& datanames, std::vector<std::vector<double > >& nodedata) { throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() );  }
+   virtual std::string writeNodes(const std::string&  /*filename*/,std::vector< UbTupleFloat3 >&  /*nodes*/) { throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() );  }
+   virtual std::string writeNodesWithNodeData(const std::string&  /*filename*/,std::vector< UbTupleFloat3 >&  /*nodes*/, std::vector<std::string >&  /*datanames*/, std::vector<std::vector<double > >&  /*nodedata*/) { throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() );  }
+   virtual std::string writeNodesWithNodeDataDouble(const std::string&  /*filename*/,std::vector< UbTupleDouble3 >&  /*nodes*/, std::vector<std::string >&  /*datanames*/, std::vector<std::vector<double > >&  /*nodedata*/) { throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() );  }
 
    //////////////////////////////////////////////////////////////////////////
    //lines
    //     0 ---- 1
    //nodenumbering must start with 0!
-   virtual std::string writeLines(const std::string& filename,std::vector<UbTupleFloat3 >& nodes, std::vector<UbTupleInt2 >& lines) { throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() );  }
-   virtual std::string writeLinesWithNodeData(const std::string& filename,std::vector<UbTupleFloat3 >& nodes, std::vector<UbTupleInt2 >& lines) { throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() );  }
+   virtual std::string writeLines(const std::string&  /*filename*/,std::vector<UbTupleFloat3 >&  /*nodes*/, std::vector<UbTupleInt2 >&  /*lines*/) { throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() );  }
+   virtual std::string writeLinesWithNodeData(const std::string&  /*filename*/,std::vector<UbTupleFloat3 >&  /*nodes*/, std::vector<UbTupleInt2 >&  /*lines*/) { throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() );  }
 
    //////////////////////////////////////////////////////////////////////////
    //triangles
@@ -75,8 +75,8 @@ public:
    //                      
    //                  0 === 1
    //nodenumbering must start with 0!
-   virtual std::string writeTriangles(const std::string& filename,std::vector< UbTupleFloat3 >& nodes, std::vector< UbTupleInt3 >& cells){ throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() );  }
-   virtual std::string writeTrianglesWithNodeData(const std::string& filename,std::vector< UbTupleFloat3 >& nodes, std::vector< UbTupleInt3 >& cells, std::vector<std::string >& datanames, std::vector<std::vector<double > >& nodedata){ throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() );  }
+   virtual std::string writeTriangles(const std::string&  /*filename*/,std::vector< UbTupleFloat3 >&  /*nodes*/, std::vector< UbTupleInt3 >&  /*cells*/){ throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() );  }
+   virtual std::string writeTrianglesWithNodeData(const std::string&  /*filename*/,std::vector< UbTupleFloat3 >&  /*nodes*/, std::vector< UbTupleInt3 >&  /*cells*/, std::vector<std::string >&  /*datanames*/, std::vector<std::vector<double > >&  /*nodedata*/){ throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() );  }
 
    //////////////////////////////////////////////////////////////////////////
    //quads
@@ -85,11 +85,11 @@ public:
    //                  |   |
    //                  0---1
    //nodenumbering must start with 0!
-   virtual std::string writeQuads(const std::string& filename,std::vector< UbTupleFloat3 >& nodes, std::vector< UbTupleInt4 >& cells){ throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() );  }
-   virtual std::string writeQuadsWithNodeData(const std::string& filename,std::vector< UbTupleFloat3 >& nodes, std::vector< UbTupleInt4 >& cells, std::vector< std::string >& datanames, std::vector< std::vector< double > >& nodedata){ throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() );  }
-   virtual std::string writeQuadsWithCellData(const std::string& filename,std::vector< UbTupleFloat3 >& nodes, std::vector< UbTupleInt4 >& cells, std::vector< std::string >& datanames, std::vector< std::vector< double > >& celldata){ throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() );  }
-   virtual std::string writeQuadsWithNodeAndCellData(const std::string& filename,std::vector< UbTupleFloat3 >& nodes, std::vector< UbTupleInt4 >& cells, 
-                                                     std::vector< std::string >& nodedatanames, std::vector< std::vector< double > >& nodedata, std::vector< std::string >& celldatanames, std::vector< std::vector< double > >&celldata) { throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() );  }
+   virtual std::string writeQuads(const std::string&  /*filename*/,std::vector< UbTupleFloat3 >&  /*nodes*/, std::vector< UbTupleInt4 >&  /*cells*/){ throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() );  }
+   virtual std::string writeQuadsWithNodeData(const std::string&  /*filename*/,std::vector< UbTupleFloat3 >&  /*nodes*/, std::vector< UbTupleInt4 >&  /*cells*/, std::vector< std::string >&  /*datanames*/, std::vector< std::vector< double > >&  /*nodedata*/){ throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() );  }
+   virtual std::string writeQuadsWithCellData(const std::string&  /*filename*/,std::vector< UbTupleFloat3 >&  /*nodes*/, std::vector< UbTupleInt4 >&  /*cells*/, std::vector< std::string >&  /*datanames*/, std::vector< std::vector< double > >&  /*celldata*/){ throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() );  }
+   virtual std::string writeQuadsWithNodeAndCellData(const std::string&  /*filename*/,std::vector< UbTupleFloat3 >&  /*nodes*/, std::vector< UbTupleInt4 >&  /*cells*/, 
+                                                     std::vector< std::string >&  /*nodedatanames*/, std::vector< std::vector< double > >&  /*nodedata*/, std::vector< std::string >&  /*celldatanames*/, std::vector< std::vector< double > >& /*celldata*/) { throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() );  }
 
    //////////////////////////////////////////////////////////////////////////
    //octs
@@ -100,9 +100,9 @@ public:
    //   | 3 ---+ 2
    //   |/     |/
    //   0 ---- 1
-   virtual std::string writeOcts(const std::string& filename,std::vector< UbTupleFloat3 >& nodes, std::vector< UbTupleInt8 >& cells){ throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() );  }
-   virtual std::string writeOctsWithCellData(const std::string& filename,std::vector<UbTupleFloat3 >& nodes, std::vector<UbTupleInt8 >& cells, std::vector<std::string >& datanames, std::vector<std::vector<double > >& celldata){ throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() );  }
-   virtual std::string writeOctsWithNodeData(const std::string& filename,std::vector<UbTupleFloat3 >& nodes, std::vector<UbTupleUInt8 >& cells, std::vector<std::string >& datanames, std::vector<std::vector<double > >& nodedata){ throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() );  }
+   virtual std::string writeOcts(const std::string&  /*filename*/,std::vector< UbTupleFloat3 >&  /*nodes*/, std::vector< UbTupleInt8 >&  /*cells*/){ throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() );  }
+   virtual std::string writeOctsWithCellData(const std::string&  /*filename*/,std::vector<UbTupleFloat3 >&  /*nodes*/, std::vector<UbTupleInt8 >&  /*cells*/, std::vector<std::string >&  /*datanames*/, std::vector<std::vector<double > >&  /*celldata*/){ throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() );  }
+   virtual std::string writeOctsWithNodeData(const std::string&  /*filename*/,std::vector<UbTupleFloat3 >&  /*nodes*/, std::vector<UbTupleUInt8 >&  /*cells*/, std::vector<std::string >&  /*datanames*/, std::vector<std::vector<double > >&  /*nodedata*/){ throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() );  }
 
 private:
 
diff --git a/src/basics/basics/writer/WbWriterVtkXmlASCII.h b/src/basics/basics/writer/WbWriterVtkXmlASCII.h
index e43d976494d46cb045df4c53ca2ff5f4bdc11f7d..11b557287ba6f880c889c3a4082dfc6446cfeb66 100644
--- a/src/basics/basics/writer/WbWriterVtkXmlASCII.h
+++ b/src/basics/basics/writer/WbWriterVtkXmlASCII.h
@@ -45,6 +45,10 @@ public:
       static WbWriterVtkXmlASCII instance;
       return &instance;
    }
+
+   WbWriterVtkXmlASCII( const WbWriterVtkXmlASCII& ) = delete;
+   const WbWriterVtkXmlASCII& operator=( const WbWriterVtkXmlASCII& ) = delete;
+
 private:
    WbWriterVtkXmlASCII() : WbWriter() 
    {
@@ -52,8 +56,6 @@ private:
       if(sizeof(int)          !=4) throw UbException(UB_EXARGS,"error int   type mismatch");
       if(sizeof(float)        !=4) throw UbException(UB_EXARGS,"error float type mismatch");
    }
-   WbWriterVtkXmlASCII( const WbWriterVtkXmlASCII& );                  //no copy allowed 
-   const WbWriterVtkXmlASCII& operator=( const WbWriterVtkXmlASCII& ); //no copy allowed
 
    static std::string  pvdEndTag;
 
diff --git a/src/basics/basics/writer/WbWriterVtkXmlBinary.cpp b/src/basics/basics/writer/WbWriterVtkXmlBinary.cpp
index 448aeb91f0c67aa0352f01e5df01c2469666d22c..d88459eb5ed8c0ec90348618a4834def954f965e 100644
--- a/src/basics/basics/writer/WbWriterVtkXmlBinary.cpp
+++ b/src/basics/basics/writer/WbWriterVtkXmlBinary.cpp
@@ -38,7 +38,7 @@
 using namespace std;
 
 /*===============================================================================*/
-string WbWriterVtkXmlBinary::pvdEndTag ="   </Collection>\n</VTKFile>";
+const std::string WbWriterVtkXmlBinary::pvdEndTag ="   </Collection>\n</VTKFile>";
 /*===============================================================================*/
 string WbWriterVtkXmlBinary::writeCollection(const string& filename, const vector<string>& filenames, const double& timeStep, const bool& sepGroups)
 {
diff --git a/src/basics/basics/writer/WbWriterVtkXmlBinary.h b/src/basics/basics/writer/WbWriterVtkXmlBinary.h
index 6119fd2205c79c2f1db6cffff13f9e9a32985285..2beda26b7aa4830b30d47c8bc1c0cddc24c4c730 100644
--- a/src/basics/basics/writer/WbWriterVtkXmlBinary.h
+++ b/src/basics/basics/writer/WbWriterVtkXmlBinary.h
@@ -45,6 +45,10 @@ public:
       static WbWriterVtkXmlBinary instance;
       return &instance;
    }
+
+    WbWriterVtkXmlBinary( const WbWriterVtkXmlBinary& ) = delete;
+    const WbWriterVtkXmlBinary& operator=( const WbWriterVtkXmlBinary& ) = delete;
+
 private:
    WbWriterVtkXmlBinary() : WbWriter() 
    {
@@ -53,12 +57,9 @@ private:
       if(sizeof(float)        !=4) throw UbException(UB_EXARGS,"machine error float type mismatch");
    }
 
-   WbWriterVtkXmlBinary( const WbWriterVtkXmlBinary& );                  //no copy allowed 
-   const WbWriterVtkXmlBinary& operator=( const WbWriterVtkXmlBinary& ); //no copy allowed
-
-   static std::string  pvdEndTag;
+   static const std::string  pvdEndTag;
 public:
-   std::string getFileExtension() { return ".bin.vtu";   }
+   std::string getFileExtension() override { return ".bin.vtu";   }
 
    //write a metafile 
    std::string writeCollection(const std::string& filename, const std::vector<std::string>& filenames, const double& timestep, const bool& sepGroups);
@@ -67,14 +68,14 @@ public:
 
    //////////////////////////////////////////////////////////////////////////
    //nodes
-   std::string writeNodes(const std::string& filename,std::vector< UbTupleFloat3 >& nodes);
-   std::string writeNodesWithNodeData(const std::string& filename,std::vector< UbTupleFloat3 >& nodes, std::vector<std::string >& datanames, std::vector<std::vector<double > >& nodedata);
+   std::string writeNodes(const std::string& filename,std::vector< UbTupleFloat3 >& nodes) override;
+   std::string writeNodesWithNodeData(const std::string& filename,std::vector< UbTupleFloat3 >& nodes, std::vector<std::string >& datanames, std::vector<std::vector<double > >& nodedata) override;
 
    //////////////////////////////////////////////////////////////////////////
    //lines
    //     0 ---- 1
    //nodenumbering must start with 0!
-   std::string writeLines(const std::string& filename,std::vector<UbTupleFloat3 >& nodes, std::vector<UbTupleInt2 >& lines);
+   std::string writeLines(const std::string& filename,std::vector<UbTupleFloat3 >& nodes, std::vector<UbTupleInt2 >& lines) override;
     //std::string writeLinesWithNodeData(const std::string& filename,std::vector<UbTupleFloat3 >& nodes, std::vector<UbTupleInt2 >& lines, std::vector< std::string >& datanames, std::vector< std::vector< double > >& nodedata);
     // FIXME: hides function in base class
 
@@ -84,8 +85,8 @@ public:
    //                     
    //                  0---1
    //nodenumbering must start with 0!
-   std::string writeTriangles(const std::string& filename,std::vector<UbTupleFloat3 >& nodes, std::vector<UbTupleInt3 >& triangles);
-   std::string writeTrianglesWithNodeData(const std::string& filename,std::vector< UbTupleFloat3 >& nodes, std::vector< UbTupleInt3 >& cells, std::vector<std::string >& datanames, std::vector<std::vector<double > >& nodedata);
+   std::string writeTriangles(const std::string& filename,std::vector<UbTupleFloat3 >& nodes, std::vector<UbTupleInt3 >& triangles) override;
+   std::string writeTrianglesWithNodeData(const std::string& filename,std::vector< UbTupleFloat3 >& nodes, std::vector< UbTupleInt3 >& cells, std::vector<std::string >& datanames, std::vector<std::vector<double > >& nodedata) override;
 
    //////////////////////////////////////////////////////////////////////////
    //2D
@@ -95,12 +96,12 @@ public:
    //                  0---1
    //nodenumbering must start with 0!
 
-   std::string writeQuads(const std::string& filename,std::vector< UbTupleFloat3 >& nodes, std::vector< UbTupleInt4 >& cells);
-   std::string writeQuadsWithNodeData(const std::string& filename,std::vector< UbTupleFloat3 >& nodes, std::vector< UbTupleInt4 >& cells, std::vector< std::string >& datanames, std::vector< std::vector< double > >& nodedata);
-   std::string writeQuadsWithCellData(const std::string& filename,std::vector< UbTupleFloat3 >& nodes, std::vector< UbTupleInt4 >& cells, std::vector< std::string >& datanames, std::vector< std::vector< double > >& celldata);
+   std::string writeQuads(const std::string& filename,std::vector< UbTupleFloat3 >& nodes, std::vector< UbTupleInt4 >& cells) override;
+   std::string writeQuadsWithNodeData(const std::string& filename,std::vector< UbTupleFloat3 >& nodes, std::vector< UbTupleInt4 >& cells, std::vector< std::string >& datanames, std::vector< std::vector< double > >& nodedata) override;
+   std::string writeQuadsWithCellData(const std::string& filename,std::vector< UbTupleFloat3 >& nodes, std::vector< UbTupleInt4 >& cells, std::vector< std::string >& datanames, std::vector< std::vector< double > >& celldata) override;
    std::string writeQuadsWithNodeAndCellData(const std::string& filename,std::vector< UbTupleFloat3 >& nodes, std::vector< UbTupleInt4 >& cells, 
                                              std::vector< std::string >& nodedatanames, std::vector< std::vector< double > >& nodedata, std::vector< std::string >& celldatanames,
-                                             std::vector< std::vector< double > >& celldata                                                                    );
+                                             std::vector< std::vector< double > >& celldata                                                                    ) override;
    
    //////////////////////////////////////////////////////////////////////////
    //octs
@@ -111,9 +112,9 @@ public:
    //   | 3 ---+ 2
    //   |/     |/
    //   0 ---- 1
-   std::string writeOcts(const std::string& filename,std::vector< UbTupleFloat3 >& nodes, std::vector< UbTupleInt8 >& cells);
-   std::string writeOctsWithCellData(const std::string& filename,std::vector<UbTupleFloat3 >& nodes, std::vector<UbTupleInt8 >& cells, std::vector<std::string >& datanames, std::vector<std::vector<double > >& celldata);
-   std::string writeOctsWithNodeData(const std::string& filename,std::vector<UbTupleFloat3 >& nodes, std::vector<UbTupleUInt8 >& cells, std::vector<std::string >& datanames, std::vector<std::vector<double > >& nodedata);
+   std::string writeOcts(const std::string& filename,std::vector< UbTupleFloat3 >& nodes, std::vector< UbTupleInt8 >& cells) override;
+   std::string writeOctsWithCellData(const std::string& filename,std::vector<UbTupleFloat3 >& nodes, std::vector<UbTupleInt8 >& cells, std::vector<std::string >& datanames, std::vector<std::vector<double > >& celldata) override;
+   std::string writeOctsWithNodeData(const std::string& filename,std::vector<UbTupleFloat3 >& nodes, std::vector<UbTupleUInt8 >& cells, std::vector<std::string >& datanames, std::vector<std::vector<double > >& nodedata) override;
    
 private:
 
diff --git a/src/basics/geometry3d/GbCuboid3D.cpp b/src/basics/geometry3d/GbCuboid3D.cpp
index f95e114285d77694c6bd26f6550cd26263af4e3f..55bb6331bdc3dba88a6089d64c9b760c61a2fb6c 100644
--- a/src/basics/geometry3d/GbCuboid3D.cpp
+++ b/src/basics/geometry3d/GbCuboid3D.cpp
@@ -405,7 +405,7 @@ string GbCuboid3D::toString()
    return ss.str();
 }
 /*=======================================================*/
-GbPoint3D* GbCuboid3D::calculateInterSectionPoint3D(GbPoint3D& point1, GbPoint3D& point2)
+GbPoint3D* GbCuboid3D::calculateInterSectionPoint3D(GbPoint3D&  /*point1*/, GbPoint3D&  /*point2*/)
 {
    throw UbException(UB_EXARGS,"not correct implemented");
 }
diff --git a/src/basics/geometry3d/GbCuboid3D.h b/src/basics/geometry3d/GbCuboid3D.h
index 992e423bca78e4eb0e1d8bc86d9387f26a13b2d0..9a099737bd2259a78fcf05e826b488214ef1cc64 100644
--- a/src/basics/geometry3d/GbCuboid3D.h
+++ b/src/basics/geometry3d/GbCuboid3D.h
@@ -45,7 +45,7 @@ class GbObject3DCreator;
 
 #include <PointerDefinitions.h>
 class GbCuboid3D;
-typedef SPtr<GbCuboid3D> GbCuboid3DPtr;
+using GbCuboid3DPtr = SPtr<GbCuboid3D>;
 
 //! \brief This Class provides basic 3D box objects.
 class GbCuboid3D : public GbObject3D, public UbObserver
@@ -55,10 +55,10 @@ public:
    GbCuboid3D(const double& minX1,const double& minX2, const double& minX3, const double& maxX1,const double& maxX2, const double& maxX3);
    GbCuboid3D(GbPoint3D *p1, GbPoint3D *p2);
    GbCuboid3D(GbCuboid3D *cuboid);
-   ~GbCuboid3D();   
+   ~GbCuboid3D() override;   
 
-   GbCuboid3D* clone()    { return new GbCuboid3D(this); }
-   void finalize();
+   GbCuboid3D* clone() override    { return new GbCuboid3D(this); }
+   void finalize() override;
 
    GbPoint3D* getPoint1() { return this->p1; }
    GbPoint3D* getPoint2() { return this->p2; }
@@ -67,42 +67,42 @@ public:
    void setPoint2(GbPoint3D* point2);
    void setPoints(GbPoint3D* point1, GbPoint3D* point2);
 
-   double getX1Centroid();
-   double getX1Minimum();
-   double getX1Maximum();
-   double getX2Centroid();
-   double getX2Minimum();
-   double getX2Maximum();
-   double getX3Centroid();
-   double getX3Minimum();
-   double getX3Maximum();
-   void setCenterCoordinates(const double& x1, const double& x2, const double& x3);
-
-   void translate(const double& x1, const double& x2, const double& x3);
-   void rotate(const double& rx1, const double& rx2, const double& rx3) {}
-   void scale(const double& sx1, const double& sx2, const double& sx3);
+   double getX1Centroid() override;
+   double getX1Minimum() override;
+   double getX1Maximum() override;
+   double getX2Centroid() override;
+   double getX2Minimum() override;
+   double getX2Maximum() override;
+   double getX3Centroid() override;
+   double getX3Minimum() override;
+   double getX3Maximum() override;
+   void setCenterCoordinates(const double& x1, const double& x2, const double& x3) override;
+
+   void translate(const double& x1, const double& x2, const double& x3) override;
+   void rotate(const double& rx1, const double& rx2, const double& rx3) override {}
+   void scale(const double& sx1, const double& sx2, const double& sx3) override;
 
    double getLengthX1();
    double getLengthX2();
    double getLengthX3();
 
-   bool isPointInGbObject3D(const double& x1p, const double& x2p, const double& x3p, bool& pointIsOnBoundary);
-   bool isPointInGbObject3D(const double& x1p, const double& x2p, const double& x3p); 
-   bool isCellInsideGbObject3D(const double& x1a,const double& x2a,const double& x3a,const double& x1b,const double& x2b,const double& x3b);
-   bool isCellCuttingGbObject3D(const double& x1a,const double& x2a,const double& x3a,const double& x1b,const double& x2b,const double& x3b);
-   bool isCellInsideOrCuttingGbObject3D(const double& x1a,const double& x2a,const double& x3a,const double& x1b,const double& x2b,const double& x3b);
-   double getCellVolumeInsideGbObject3D(const double& x1a,const double& x2a,const double& x3a,const double& x1b,const double& x2b,const double& x3b);
+   bool isPointInGbObject3D(const double& x1p, const double& x2p, const double& x3p, bool& pointIsOnBoundary) override;
+   bool isPointInGbObject3D(const double& x1p, const double& x2p, const double& x3p) override; 
+   bool isCellInsideGbObject3D(const double& x1a,const double& x2a,const double& x3a,const double& x1b,const double& x2b,const double& x3b) override;
+   bool isCellCuttingGbObject3D(const double& x1a,const double& x2a,const double& x3a,const double& x1b,const double& x2b,const double& x3b) override;
+   bool isCellInsideOrCuttingGbObject3D(const double& x1a,const double& x2a,const double& x3a,const double& x1b,const double& x2b,const double& x3b) override;
+   double getCellVolumeInsideGbObject3D(const double& x1a,const double& x2a,const double& x3a,const double& x1b,const double& x2b,const double& x3b) override;
 
    GbPoint3D*  calculateInterSectionPoint3D(GbPoint3D& point1, GbPoint3D &point2);
    //GbCuboid3D* createClippedRectangle3D(const double& x1a,const double& x2a,const double& x3a,const double& x1b,const double& x2b,const double& x3b);
-   GbLine3D*   createClippedLine3D(GbPoint3D& point1, GbPoint3D& point2);
+   GbLine3D*   createClippedLine3D(GbPoint3D& point1, GbPoint3D& point2) override;
 
-   std::vector<GbTriangle3D*> getSurfaceTriangleSet();
-   void addSurfaceTriangleSet(std::vector<UbTupleFloat3>& nodes, std::vector<UbTupleInt3>& triangles);
+   std::vector<GbTriangle3D*> getSurfaceTriangleSet() override;
+   void addSurfaceTriangleSet(std::vector<UbTupleFloat3>& nodes, std::vector<UbTupleInt3>& triangles) override;
 
-   bool hasRaytracing() { return true; }
+   bool hasRaytracing() override { return true; }
    /*|r| must be 1! einheitsvector!!*/
-   double getIntersectionRaytraceFactor(const double& x1, const double& x2, const double& x3, const double& rx1, const double& rx2, const double& rx3);
+   double getIntersectionRaytraceFactor(const double& x1, const double& x2, const double& x3, const double& rx1, const double& rx2, const double& rx3) override;
 
 
    double getDistance(GbPoint3D* p)
@@ -128,11 +128,11 @@ public:
       }
    }
 
-   std::string toString();
+   std::string toString() override;
 
    //virtuelle Methoden von UbObserver
-   void objectChanged(UbObservable* changedObject);
-   void objectWillBeDeleted(UbObservable* objectForDeletion);
+   void objectChanged(UbObservable* changedObject) override;
+   void objectWillBeDeleted(UbObservable* objectForDeletion) override;
 
 
    using GbObject3D::isPointInGbObject3D; //Grund: dadurch muss man hier  isPointInGbObject3D(GbPoint3D*) nicht ausprogrammieren, welche sonst hier "ueberdeckt" waere
diff --git a/src/basics/geometry3d/GbLine3D.cpp b/src/basics/geometry3d/GbLine3D.cpp
index 9d4c5a6c4aaeb33535e276fc7a283bae35c1882e..752e3a421c982fd7606f5b4ed6f73218f0ca7014 100644
--- a/src/basics/geometry3d/GbLine3D.cpp
+++ b/src/basics/geometry3d/GbLine3D.cpp
@@ -139,7 +139,7 @@ string GbLine3D::toString()
    return(ss.str());
 }
 /*=======================================================*/
-GbPoint3D* GbLine3D::calculateIntersectionPoint3D(GbLine3D* line)
+GbPoint3D* GbLine3D::calculateIntersectionPoint3D(GbLine3D*  /*line*/)
 {
    throw UbException(UB_EXARGS," not implemented");
    //return(GbSystem::calculateIntersectionPoint3D(*this->p1, *this->p2, *line->p1, *line->p2));
diff --git a/src/basics/geometry3d/GbLine3D.h b/src/basics/geometry3d/GbLine3D.h
index 2990282f9509645bf3f841e9fcc296acafc395ad..25697f59b3cb04d61c3f5bcdbc16218315b9ef9b 100644
--- a/src/basics/geometry3d/GbLine3D.h
+++ b/src/basics/geometry3d/GbLine3D.h
@@ -60,10 +60,10 @@ public:
    GbLine3D();
 	GbLine3D(GbPoint3D* point1, GbPoint3D* point2);
 	GbLine3D(GbLine3D* line);
-   ~GbLine3D(); 
+   ~GbLine3D() override; 
 
-   GbLine3D* clone() { return new GbLine3D(this); }
-   void finalize();
+   GbLine3D* clone() override { return new GbLine3D(this); }
+   void finalize() override;
 
    void setPoint1(GbPoint3D* point1);
    void setPoint2(GbPoint3D* point2);
@@ -78,20 +78,20 @@ public:
    
    double getLength()     { return(this->length); }
 	
-   double getX1Centroid() { return((this->p1->x1+this->p2->x1)*0.5);}
-   double getX2Centroid() { return((this->p1->x2+this->p2->x2)*0.5); };
-   double getX3Centroid() { return((this->p1->x3+this->p2->x3)*0.5); }
+   double getX1Centroid() override { return((this->p1->x1+this->p2->x1)*0.5);}
+   double getX2Centroid() override { return((this->p1->x2+this->p2->x2)*0.5); };
+   double getX3Centroid() override { return((this->p1->x3+this->p2->x3)*0.5); }
    
-   double getX1Minimum()  { return(this->p1->x1 < this->p2->x1 ? this->p1->x1 : this->p2->x1); }
-   double getX2Minimum()  { return(this->p1->x2 < this->p2->x2 ? this->p1->x2 : this->p2->x2); }
-   double getX3Minimum()  { return(this->p1->x3 < this->p2->x3 ? this->p1->x3 : this->p2->x3); }
+   double getX1Minimum() override  { return(this->p1->x1 < this->p2->x1 ? this->p1->x1 : this->p2->x1); }
+   double getX2Minimum() override  { return(this->p1->x2 < this->p2->x2 ? this->p1->x2 : this->p2->x2); }
+   double getX3Minimum() override  { return(this->p1->x3 < this->p2->x3 ? this->p1->x3 : this->p2->x3); }
    
-   double getX1Maximum()  { return(this->p1->x1 > this->p2->x1 ? this->p1->x1 : this->p2->x1); }
-   double getX2Maximum()  { return(this->p1->x2 > this->p2->x2 ? this->p1->x2 : this->p2->x2); }
-   double getX3Maximum()  { return(this->p1->x3 > this->p2->x3 ? this->p1->x3 : this->p2->x3); }
+   double getX1Maximum() override  { return(this->p1->x1 > this->p2->x1 ? this->p1->x1 : this->p2->x1); }
+   double getX2Maximum() override  { return(this->p1->x2 > this->p2->x2 ? this->p1->x2 : this->p2->x2); }
+   double getX3Maximum() override  { return(this->p1->x3 > this->p2->x3 ? this->p1->x3 : this->p2->x3); }
 	                                               
-   void scale(const double& sx1, const double& sx2, const double& sx3);
-   void translate(const double& tx1, const double& tx2, const double& tx3);
+   void scale(const double& sx1, const double& sx2, const double& sx3) override;
+   void translate(const double& tx1, const double& tx2, const double& tx3) override;
 
    GbPoint3D* calculateIntersectionPoint3D(GbLine3D* line);
    GbLine3D*  createClippedLine3D(GbCuboid3D* cuboid);
@@ -100,27 +100,27 @@ public:
    double     getDistance(const GbPoint3D& point);
    double     getDistance(const double& x1,const double& x2,const double& x3);
 
-   std::vector<GbTriangle3D*> getSurfaceTriangleSet();
-   bool isPointInGbObject3D(const double& x1, const double& x2, const double& x3)
+   std::vector<GbTriangle3D*> getSurfaceTriangleSet() override;
+   bool isPointInGbObject3D(const double&  /*x1*/, const double&  /*x2*/, const double&  /*x3*/) override
    {
       throw UbException(UB_EXARGS,"not implemented");
    }
-   bool isPointInGbObject3D(const double& x1, const double& x2, const double& x3, bool& pointIsOnBoundary)
+   bool isPointInGbObject3D(const double&  /*x1*/, const double&  /*x2*/, const double&  /*x3*/, bool&  /*pointIsOnBoundary*/) override
    {
       throw UbException(UB_EXARGS,"not implemented");
    }
-   bool isCellInsideGbObject3D(const double& x11,const double& x21,const double& x31,const double& x12,const double& x22,const double& x32) { return false; }
+   bool isCellInsideGbObject3D(const double&  /*x11*/,const double&  /*x21*/,const double&  /*x31*/,const double&  /*x12*/,const double&  /*x22*/,const double&  /*x32*/) override { return false; }
 
-   GbLine3D* createClippedLine3D (GbPoint3D& point1, GbPoint3D& point2)
+   GbLine3D* createClippedLine3D (GbPoint3D&  /*point1*/, GbPoint3D&  /*point2*/) override
    {
       throw UbException(UB_EXARGS,"not implemented");
    }
 
    //virtuelle Methoden von UbObserver
-   void objectChanged(UbObservable* changedObject);
-   void objectWillBeDeleted(UbObservable* objectForDeletion);
+   void objectChanged(UbObservable* changedObject) override;
+   void objectWillBeDeleted(UbObservable* objectForDeletion) override;
 
-   std::string toString();
+   std::string toString() override;
 
    using GbObject3D::isPointInGbObject3D; //Grund: dadurch muss man hier  isPointInGbObject3D(GbPoint3D*) nicht ausprogrammieren, welche sonst hier "ueberdeckt" waere
 protected:
diff --git a/src/basics/geometry3d/GbObject3D.h b/src/basics/geometry3d/GbObject3D.h
index b0cca70e42ce8f9967f36f22b4dc69bb2edfe6b2..be2191811bbf99c54998699073e90563d584db77 100644
--- a/src/basics/geometry3d/GbObject3D.h
+++ b/src/basics/geometry3d/GbObject3D.h
@@ -111,17 +111,17 @@ public:
    double getLengthX2() { return (getX2Maximum()-getX2Minimum()); }
    double getLengthX3() { return (getX3Maximum()-getX3Minimum()); }
 
-   virtual void setCenterX1Coordinate(const double& value) { throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() ); }
-   virtual void setCenterX2Coordinate(const double& value) { throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() ); }
-   virtual void setCenterX3Coordinate(const double& value) { throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() ); }
-   virtual void setCenterCoordinates(const double& x1, const double& x2, const double& x3) { throw UbException(UB_EXARGS, "not implemented for " + (std::string)typeid(*this).name()); }
-   virtual void setCenterCoordinates(const UbTupleDouble3& position) { throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() ); }
+   virtual void setCenterX1Coordinate(const double&  /*value*/) { throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() ); }
+   virtual void setCenterX2Coordinate(const double&  /*value*/) { throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() ); }
+   virtual void setCenterX3Coordinate(const double&  /*value*/) { throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() ); }
+   virtual void setCenterCoordinates(const double&  /*x1*/, const double&  /*x2*/, const double&  /*x3*/) { throw UbException(UB_EXARGS, "not implemented for " + (std::string)typeid(*this).name()); }
+   virtual void setCenterCoordinates(const UbTupleDouble3&  /*position*/) { throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() ); }
 
    //Rotates the Point in relation to the origen.
    //Parameters must be radian measure.
-   virtual void rotate(const double& rx1, const double& rx2, const double& rx3) { throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() ); }
-   virtual void translate(const double& x1, const double& x2, const double& x3) { throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() ); }
-   virtual void scale(const double& sx1, const double& sx2, const double& sx3)  { throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() ); }
+   virtual void rotate(const double&  /*rx1*/, const double&  /*rx2*/, const double&  /*rx3*/) { throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() ); }
+   virtual void translate(const double&  /*x1*/, const double&  /*x2*/, const double&  /*x3*/) { throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() ); }
+   virtual void scale(const double&  /*sx1*/, const double&  /*sx2*/, const double&  /*sx3*/)  { throw UbException(UB_EXARGS,"not implemented for "+(std::string)typeid(*this).name() ); }
 
    virtual bool isPointInGbObject3D(GbPoint3D* p);
    virtual bool isPointInGbObject3D(const double& x1, const double& x2, const double& x3, bool& pointIsOnBoundary)=0;
@@ -130,20 +130,20 @@ public:
    virtual bool isCellInsideGbObject3D(const double& x1a,const double& x2a,const double& x3a,const double& x1b,const double& x2b,const double& x3b);
    virtual bool isCellCuttingGbObject3D(const double& x1a,const double& x2a,const double& x3a,const double& x1b,const double& x2b,const double& x3b);
    virtual bool isCellInsideOrCuttingGbObject3D(const double& x1a,const double& x2a,const double& x3a,const double& x1b,const double& x2b,const double& x3b);
-   virtual double getCellVolumeInsideGbObject3D(const double& x1a,const double& x2a,const double& x3a,const double& x1b,const double& x2b,const double& x3b){ return -1.0;};
+   virtual double getCellVolumeInsideGbObject3D(const double&  /*x1a*/,const double&  /*x2a*/,const double&  /*x3a*/,const double&  /*x1b*/,const double&  /*x2b*/,const double&  /*x3b*/){ return -1.0;};
 
    virtual bool isInsideCell(const double& minX1,const double& minX2,const double& minX3,const double& maxX1,const double& maxX2,const double& maxX3);
 
    virtual GbLine3D* createClippedLine3D (GbPoint3D &point1, GbPoint3D &point2) = 0;
    virtual std::vector<GbTriangle3D*> getSurfaceTriangleSet()=0;
 
-   virtual void addSurfaceTriangleSet(std::vector<UbTupleFloat3>& nodes, std::vector<UbTupleInt3>& triangles) { throw UbException("GbObject3D::addSurfaceTriangleSet - not implemented for "+(std::string)typeid(*this).name()); }
+   virtual void addSurfaceTriangleSet(std::vector<UbTupleFloat3>&  /*nodes*/, std::vector<UbTupleInt3>&  /*triangles*/) { throw UbException("GbObject3D::addSurfaceTriangleSet - not implemented for "+(std::string)typeid(*this).name()); }
 
    virtual bool hasRaytracing() { return false; }
    virtual bool raytracingSupportsPointsInside() { return false; }
    //|r| must be 1! einheitsvector!!
    //return negativ value oder zero if no intersection
-   virtual double getIntersectionRaytraceFactor(const double& x1, const double& x2, const double& x3, const double& rx1, const double& rx2, const double& rx3) { throw UbException("GbObject3D::getIntersectionRaytraceFactor - not implemented"); }
+   virtual double getIntersectionRaytraceFactor(const double&  /*x1*/, const double&  /*x2*/, const double&  /*x3*/, const double&  /*rx1*/, const double&  /*rx2*/, const double&  /*rx3*/) { throw UbException("GbObject3D::getIntersectionRaytraceFactor - not implemented"); }
 };
 /*=========================================================================*/
 
diff --git a/src/basics/geometry3d/GbPoint3D.cpp b/src/basics/geometry3d/GbPoint3D.cpp
index 6bbc180110c853fb4f70e4c5e4024b4e40f98a90..ff6852e78ee176fb02633aa684dd3b7626e05930 100644
--- a/src/basics/geometry3d/GbPoint3D.cpp
+++ b/src/basics/geometry3d/GbPoint3D.cpp
@@ -107,7 +107,7 @@ vector<GbTriangle3D*> GbPoint3D::getSurfaceTriangleSet()
    //triangles.push_back(new GbTriangle3D(new GbPoint3D(p1),new GbPoint3D(p1),new GbPoint3D(p1)));
 }
 /*=======================================================*/
-GbLine3D* GbPoint3D::createClippedLine3D (GbPoint3D& point1, GbPoint3D& point2)
+GbLine3D* GbPoint3D::createClippedLine3D (GbPoint3D&  /*point1*/, GbPoint3D&  /*point2*/)
 {
    throw UbException(UB_EXARGS,"not implemented");
 } 
diff --git a/src/basics/geometry3d/GbPoint3D.h b/src/basics/geometry3d/GbPoint3D.h
index 74b8cafaa51b8b2ef2fe8094b6050ce8fafac792..68760d789b2271e999a94997f8557bab65c8adc5 100644
--- a/src/basics/geometry3d/GbPoint3D.h
+++ b/src/basics/geometry3d/GbPoint3D.h
@@ -50,10 +50,10 @@ public:
    GbPoint3D();
    GbPoint3D(const double& x1, const double& x2, const double& x3);
    GbPoint3D(GbPoint3D *point);                
-   ~GbPoint3D() {}
+   ~GbPoint3D() override = default;
 
-   GbPoint3D* clone() {return new GbPoint3D(this);}
-   void finalize() {}
+   GbPoint3D* clone() override {return new GbPoint3D(this);}
+   void finalize() override {}
 
    void setCoordinates(const double& x1, const double& x2, const double& x3)
    {
@@ -72,29 +72,29 @@ public:
 
    void transform(const double matrix[4][4]);
  
-   double getX1Centroid()  { return this->x1; }
-   double getX1Minimum()   { return this->x1; }
-   double getX1Maximum()   { return this->x1; }
-   double getX2Centroid()  { return this->x2; }
-   double getX2Minimum()   { return this->x2; }
-   double getX2Maximum()   { return this->x2; }
-   double getX3Centroid()  { return this->x3; }
-   double getX3Minimum()   { return this->x3; }
-   double getX3Maximum()   { return this->x3; }        
+   double getX1Centroid() override  { return this->x1; }
+   double getX1Minimum() override   { return this->x1; }
+   double getX1Maximum() override   { return this->x1; }
+   double getX2Centroid() override  { return this->x2; }
+   double getX2Minimum() override   { return this->x2; }
+   double getX2Maximum() override   { return this->x2; }
+   double getX3Centroid() override  { return this->x3; }
+   double getX3Minimum() override   { return this->x3; }
+   double getX3Maximum() override   { return this->x3; }        
  
-   void translate(const double& x1, const double& x2, const double& x3);
-   void rotate(const double& rx1, const double& rx2, const double& rx3);
-   void scale(const double& sx1, const double& sx2, const double& sx3);
+   void translate(const double& x1, const double& x2, const double& x3) override;
+   void rotate(const double& rx1, const double& rx2, const double& rx3) override;
+   void scale(const double& sx1, const double& sx2, const double& sx3) override;
 
    double getDistance(GbPoint3D *p);
    bool equals(const GbPoint3D* point) const;
-   bool isPointInGbObject3D(const double& x1, const double& x2, const double& x3, bool& pointIsOnBoundary);
-   bool isPointInGbObject3D(const double& x1, const double& x2, const double& x3);
-   bool isCellInsideGbObject3D(const double& x11,const double& x21,const double& x31,const double& x12,const double& x22,const double& x23) { return false; }
+   bool isPointInGbObject3D(const double& x1, const double& x2, const double& x3, bool& pointIsOnBoundary) override;
+   bool isPointInGbObject3D(const double& x1, const double& x2, const double& x3) override;
+   bool isCellInsideGbObject3D(const double&  /*x11*/,const double&  /*x21*/,const double&  /*x31*/,const double&  /*x12*/,const double&  /*x22*/,const double&  /*x23*/) override { return false; }
 
-   std::vector<GbTriangle3D*> getSurfaceTriangleSet();
-   GbLine3D* createClippedLine3D(GbPoint3D &point1, GbPoint3D &point2);
-   virtual std::string toString();
+   std::vector<GbTriangle3D*> getSurfaceTriangleSet() override;
+   GbLine3D* createClippedLine3D(GbPoint3D &point1, GbPoint3D &point2) override;
+   std::string toString() override;
 
    using GbObject3D::isPointInGbObject3D; //Grund: dadurch muss man hier  isPointInGbObject3D(GbPoint3D*) nicht ausprogrammieren
                                           //, welche sonst hier "ueberdeckt" waere,da es dieselbe methode mit anderen args gibt!
diff --git a/src/basics/geometry3d/GbPolygon3D.h b/src/basics/geometry3d/GbPolygon3D.h
index 96b96a3acf08f9296f4584834a1390cec6d823e9..279b8bdb81c9460b9c3f35291652e1fc4900ff89 100644
--- a/src/basics/geometry3d/GbPolygon3D.h
+++ b/src/basics/geometry3d/GbPolygon3D.h
@@ -102,7 +102,7 @@ public:
    */
    GbPolygon3D(GbPolygon3D *polygon);
 
-   ~GbPolygon3D();
+   ~GbPolygon3D() override;
 
    /*======================================================================*/
 
@@ -249,17 +249,17 @@ public:
       std::vector<GbTriangle3D*> tmp;
       return tmp;
    }
-   bool isPointInGbObject3D(const double& x1, const double& x2, const double& x3) override
+   bool isPointInGbObject3D(const double&  /*x1*/, const double&  /*x2*/, const double&  /*x3*/) override
    {
       throw UbException(__FILE__, __LINE__, "GbPolygon3D::isPointInObject3D- not implemented");
    }
-   bool isPointInGbObject3D(const double& x1, const double& x2, const double& x3, bool& pointIsOnBoundary) override
+   bool isPointInGbObject3D(const double&  /*x1*/, const double&  /*x2*/, const double&  /*x3*/, bool&  /*pointIsOnBoundary*/) override
    {
       throw UbException(__FILE__, __LINE__, "GbPolygon3D::isPointInObject3D- not implemented");
    }
-   bool isCellInsideGbObject3D(const double& x1a,const double& x2a,const double& x3a,const double& x1b,const double& x2b,const double& x3b) override { return false; }
+   bool isCellInsideGbObject3D(const double&  /*x1a*/,const double&  /*x2a*/,const double&  /*x3a*/,const double&  /*x1b*/,const double&  /*x2b*/,const double&  /*x3b*/) override { return false; }
 
-   GbLine3D* createClippedLine3D (GbPoint3D& point1, GbPoint3D &point2) override
+   GbLine3D* createClippedLine3D (GbPoint3D&  /*point1*/, GbPoint3D & /*point2*/) override
    {
       throw UbException(__FILE__, __LINE__, "GbPolygon3D::createClippedLine3D - not implemented");
    }
diff --git a/src/basics/geometry3d/GbSystem3D.h b/src/basics/geometry3d/GbSystem3D.h
index bfe97c3d0b536c0c650934f8d532d57c5a3dad63..b448335caafc372bdca7ab103b213a631afa8442 100644
--- a/src/basics/geometry3d/GbSystem3D.h
+++ b/src/basics/geometry3d/GbSystem3D.h
@@ -112,7 +112,7 @@ namespace GbSystem3D
    public:
       PointSet3(int n);
       PointSet3(const std::vector<GbPoint3D>& points);
-      ~PointSet3(){}
+      ~PointSet3()= default;
       void   add(const GbPoint3D& point);
       void   addUnequal(const GbPoint3D& point);
       void   add(const std::vector<GbPoint3D>& p);
@@ -192,10 +192,7 @@ namespace GbSystem3D
          this->points.resize(0);//, NULL);
          this->add(points);
       };
-      ~OldPointSet3()
-      {
-         //			delete points;
-      };
+      ~OldPointSet3() = default;
       void add(GbPoint3D point)
          {
             if(this->sizet>0 && point.equals(&(this->points)[this->sizet-1])) return;
diff --git a/src/basics/geometry3d/GbTriangle3D.h b/src/basics/geometry3d/GbTriangle3D.h
index 7b931c1cc63584c5fa2fa7a3852d908bbdb9aac1..ae20245f03bb09dcd5982efcb37d4874003533df 100644
--- a/src/basics/geometry3d/GbTriangle3D.h
+++ b/src/basics/geometry3d/GbTriangle3D.h
@@ -63,12 +63,12 @@ public:
    GbTriangle3D();
    GbTriangle3D(GbPoint3D* point1, GbPoint3D* point2, GbPoint3D* point3);
    GbTriangle3D(GbTriangle3D* triangle);
-   ~GbTriangle3D();
+   ~GbTriangle3D() override;
    /*======================================================================*/
    /*  Methoden                                                            */
    /*                                                                      */
-   GbTriangle3D* clone();
-   void finalize()
+   GbTriangle3D* clone() override;
+   void finalize() override
    {
       this->deletePoints();
    }
@@ -87,51 +87,51 @@ public:
    GbPoint3D* getPoint(const int& index);
    std::vector<GbPoint3D> getPoints();
    double getArea();
-   double getX1Centroid();
-   double getX1Minimum();
-   double getX1Maximum();           
-   double getX2Centroid();
-   double getX2Minimum();
-   double getX2Maximum();
-   double getX3Centroid();
-   double getX3Minimum();
-   double getX3Maximum();
+   double getX1Centroid() override;
+   double getX1Minimum() override;
+   double getX1Maximum() override;           
+   double getX2Centroid() override;
+   double getX2Minimum() override;
+   double getX2Maximum() override;
+   double getX3Centroid() override;
+   double getX3Minimum() override;
+   double getX3Maximum() override;
 
    void setInconsistent() { this->consistent = false;}
 
    void setPoint(GbPoint3D *point, int index);
 
    //bool equals(GbObject3D *object)
-   std::vector<GbTriangle3D*> getSurfaceTriangleSet();
-   bool isPointInGbObject3D(const double& x1, const double& x2, const double& x3)   
+   std::vector<GbTriangle3D*> getSurfaceTriangleSet() override;
+   bool isPointInGbObject3D(const double&  /*x1*/, const double&  /*x2*/, const double&  /*x3*/) override   
    {
       //der einfachheit halber ... 
       return false;
       //throw UbException(__FILE__, __LINE__, "GbTriangle3D::isPointInObject3D- not implemented");
    }
-   bool isPointInGbObject3D(const double& x1, const double& x2, const double& x3, bool& pointIsOnBoundary)   
+   bool isPointInGbObject3D(const double&  /*x1*/, const double&  /*x2*/, const double&  /*x3*/, bool& pointIsOnBoundary) override   
    {
       //der einfachheit halber ... 
       pointIsOnBoundary = false;
       return false;
       //throw UbException(__FILE__, __LINE__, "GbTriangle3D::isPointInObject3D- not implemented");
    }
-   bool isCellInsideGbObject3D(const double& x11,const double& x21,const double& x31,const double& x12,const double& x22,const double& x23) { return false; }
+   bool isCellInsideGbObject3D(const double&  /*x11*/,const double&  /*x21*/,const double&  /*x31*/,const double&  /*x12*/,const double&  /*x22*/,const double&  /*x23*/) override { return false; }
 
 
    // get distance from a point to the triangle
    //todo CHANGE...
    double getDistanceFromPoint(GbVector3D punct);
 
-   std::string toString();
+   std::string toString() override;
 
    /*======================================================================*/
    /*  Calculation                                                         */
    /*                                                                      */
 //   std::vector<GbPoint3D> calculateIntersectionPoints3D(GbLine3D *line);
-   bool hasRaytracing() { return true; }
+   bool hasRaytracing() override { return true; }
    /*|r| must be 1! einheitsvector!!*/
-   double getIntersectionRaytraceFactor(const double& x1, const double& x2, const double& x3, const double& rx1, const double& rx2, const double& rx3);
+   double getIntersectionRaytraceFactor(const double& x1, const double& x2, const double& x3, const double& rx1, const double& rx2, const double& rx3) override;
 //   bool isPointOnEdge(GbVector3D& q);
    
    GbPoint3D* calculateIntersectionPoints3D(GbLine3D* line);
@@ -142,7 +142,7 @@ public:
 
    bool enclosesPoint2D(double x1, double x2);
    GbPolygon3D* createClippedPolygon3D(GbCuboid3D* cube);   
-   GbLine3D* createClippedLine3D (GbPoint3D& point1, GbPoint3D& point2);
+   GbLine3D* createClippedLine3D (GbPoint3D& point1, GbPoint3D& point2) override;
    //public GbPolygon2D createClippedPolygon2D(GbPoint2D p1, GbPoint2D p2);
    GbPolygon3D* createClippedPolygon3D(const double& p1x1, const double& p1x2, const double& p1x3, const double& p2x1, const double& p2x2, const double& p2x3);
    //bool enclosesRectangle2D(GbRectangle2D *rectangle);
@@ -163,7 +163,7 @@ public:
 
    //virtuelle Methoden von UbObserver
    //!! quick and dirty von sirann !!
-   void objectChanged(UbObservable* changedObject)
+   void objectChanged(UbObservable* changedObject) override
    {
       GbPoint3D* point = dynamic_cast<GbPoint3D*>(changedObject);
       if(!point || (  this->points[0]!=point && this->points[1]!=point && this->points[2]!=point) ) 
@@ -171,7 +171,7 @@ public:
       
       this->consistent = false;
    }
-   void objectWillBeDeleted(UbObservable* objectForDeletion)
+   void objectWillBeDeleted(UbObservable* objectForDeletion) override
    {
       if(this->points[0])
       {
diff --git a/src/basics/geometry3d/GbVector3D.cpp b/src/basics/geometry3d/GbVector3D.cpp
index 94e6e7f670e1c9a8f0fafab6dfc387c8eb0885e5..e763e425a6677ceeed5b9e23355b311e2a71e8a3 100644
--- a/src/basics/geometry3d/GbVector3D.cpp
+++ b/src/basics/geometry3d/GbVector3D.cpp
@@ -147,7 +147,10 @@ double& GbVector3D::X3 ()
 //----------------------------------------------------------------------------
 GbVector3D& GbVector3D::operator= (const GbVector3D& rkV)
 {
-   m_afTuple[0] = rkV.m_afTuple[0];
+    if(this == &rkV)
+        return *this;
+
+    m_afTuple[0] = rkV.m_afTuple[0];
    m_afTuple[1] = rkV.m_afTuple[1];
    m_afTuple[2] = rkV.m_afTuple[2];
    return *this;
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAdapter.h b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAdapter.h
index a34f899ae53df3fe4f48cd9b252a9c63bc4ff9a7..b4f08b2002670e8076f6bd19fb1577404f5af0f5 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAdapter.h
+++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAdapter.h
@@ -45,20 +45,14 @@ class D3Q27Interactor;
 class BCAdapter
 {
 public:
-   BCAdapter() 
-      :  secondaryBcOption(0)
-       , type(0)
-       , algorithmType(-1)
-   {
-   }
+   BCAdapter() = default;
+
    //! \param secondaryBcOption additional option of boundary conditions
    BCAdapter(const short& secondaryBcOption) 
-      :  secondaryBcOption(secondaryBcOption) 
-       , type(0)
-       , algorithmType(-1)
+      :  secondaryBcOption(secondaryBcOption)
    {
    }
-   virtual ~BCAdapter() {}
+   virtual ~BCAdapter() = default;
 
    //methods
    bool isTimeDependent() { return((this->type & TIMEDEPENDENT) ==  TIMEDEPENDENT); }
@@ -77,12 +71,12 @@ public:
    char getBcAlgorithmType() {return algorithmType;}
 
 protected:
-   short secondaryBcOption;
+   short secondaryBcOption{0};
 
-   char  type;
+   char  type{0};
 
    SPtr<BCAlgorithm> algorithm;
-   char algorithmType;
+   char algorithmType{-1};
 
    static const char   TIMEDEPENDENT = 1<<0;//'1';
    static const char   TIMEPERIODIC  = 1<<1;//'2';
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.cpp
index 7ec1efcc307e9cd288853faf72601306d9b89bd6..ffc8679ac08323fb4f1b0cde851dd04e352c4130 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.cpp
+++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.cpp
@@ -38,10 +38,6 @@
 #include "BCArray3D.h"
 
 
-BCAlgorithm::BCAlgorithm() : compressible(false)
-{
-
-}
 //////////////////////////////////////////////////////////////////////////
 void BCAlgorithm::setNodeIndex(int x1, int x2, int x3)
 {
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.h b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.h
index 45a06b56b72786dee4506b74421008f91ec536be..0b4110fe9147f8e081096e2cded21a0c0953cd53 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.h
+++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.h
@@ -58,7 +58,7 @@ public:
    static const char NonReflectingOutflowBCAlgorithm = 8;
 
 public:
-   BCAlgorithm();
+   BCAlgorithm() = default;
    virtual ~BCAlgorithm() = default;
    
    virtual void addDistributions(SPtr<DistributionArray3D> distributions) = 0;
@@ -74,7 +74,7 @@ public:
    virtual void applyBC() = 0;
 
 protected:
-   bool compressible;
+   bool compressible{false};
    char type;
    bool preCollision;
 
@@ -87,9 +87,9 @@ protected:
 
    LBMReal compressibleFactor;
 
-   typedef void(*CalcMacrosFct)(const LBMReal* const& /*f[27]*/, LBMReal& /*rho*/, LBMReal& /*vx1*/, LBMReal& /*vx2*/, LBMReal& /*vx3*/);
-   typedef LBMReal(*CalcFeqForDirFct)(const int& /*direction*/, const LBMReal& /*(d)rho*/, const LBMReal& /*vx1*/, const LBMReal& /*vx2*/, const LBMReal& /*vx3*/);
-   typedef  void(*CalcFeqFct)(LBMReal* const& /*feq[27]*/, const LBMReal& /*rho*/, const LBMReal& /*vx1*/, const LBMReal& /*vx2*/, const LBMReal& /*vx3*/);
+    using CalcMacrosFct = void (*)(const LBMReal *const &, LBMReal &, LBMReal &, LBMReal &, LBMReal &);
+    using CalcFeqForDirFct = LBMReal (*)(const int &, const LBMReal &, const LBMReal &, const LBMReal &, const LBMReal &);
+    using CalcFeqFct = void (*)(LBMReal *const &, const LBMReal &, const LBMReal &, const LBMReal &, const LBMReal &);
    
    CalcFeqForDirFct calcFeqsForDirFct ;
    CalcMacrosFct    calcMacrosFct;
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCArray3D.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCArray3D.cpp
index 76094ba5bbc4c1abc1c6d602eedd5acaf55ae88c..913967fabf3795223389498886732999de55adaf 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCArray3D.cpp
+++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCArray3D.cpp
@@ -40,7 +40,7 @@ const int BCArray3D::INTERFACEFC = -4;
 const int BCArray3D::UNDEFINED = -5;
 
 //////////////////////////////////////////////////////////////////////////
-BCArray3D::BCArray3D() {}
+BCArray3D::BCArray3D() = default;
 //////////////////////////////////////////////////////////////////////////
 BCArray3D::BCArray3D(std::size_t nx1, std::size_t nx2, std::size_t nx3)
 {
@@ -52,7 +52,7 @@ BCArray3D::BCArray3D(std::size_t nx1, std::size_t nx2, std::size_t nx3, int val)
    bcindexmatrix.resize(nx1, nx2, nx3, val);
 }
 //////////////////////////////////////////////////////////////////////////
-BCArray3D::~BCArray3D() {}
+BCArray3D::~BCArray3D() = default;
 //////////////////////////////////////////////////////////////////////////
 void BCArray3D::resize(std::size_t nx1, std::size_t nx2, std::size_t nx3)
 {
@@ -173,11 +173,11 @@ std::string BCArray3D::toString() const
    std::size_t bcCounter = 0;
    std::size_t undefCounter = 0;
 
-   for (int x1 = 0; x1 < bcindexmatrix.getNX1(); x1++)
+   for (size_t x1 = 0; x1 < bcindexmatrix.getNX1(); x1++)
    {
-      for (int x2 = 0; x2 < bcindexmatrix.getNX2(); x2++)
+      for (size_t x2 = 0; x2 < bcindexmatrix.getNX2(); x2++)
       {
-         for (int x3 = 0; x3 < bcindexmatrix.getNX3(); x3++)
+         for (size_t x3 = 0; x3 < bcindexmatrix.getNX3(); x3++)
          {
             if (bcindexmatrix(x1, x2, x3) >= 0) bcCounter++;
             else if (bcindexmatrix(x1, x2, x3) == FLUID) fluidCounter++;
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCProcessor.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCProcessor.cpp
index 9f4d9eab15320e28edbbf6dad2a47dcbfa2af118..020f4d60d091c4cb26beb7556b51f9edf94cc904 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCProcessor.cpp
+++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCProcessor.cpp
@@ -39,20 +39,16 @@
 #include "BCAlgorithm.h"
 
 BCProcessor::BCProcessor()
-{
-   
-}
+= default;
 //////////////////////////////////////////////////////////////////////////
 BCProcessor::BCProcessor(SPtr<ILBMKernel> kernel)
 {
    SPtr<DistributionArray3D> distributions = std::dynamic_pointer_cast<EsoTwist3D>(kernel->getDataSet()->getFdistributions());
-   bcArray = SPtr<BCArray3D>(new BCArray3D( distributions->getNX1(), distributions->getNX2(), distributions->getNX3(), BCArray3D::FLUID));
+   bcArray = std::make_shared<BCArray3D>(distributions->getNX1(), distributions->getNX2(), distributions->getNX3(), BCArray3D::FLUID);
 }
 //////////////////////////////////////////////////////////////////////////
 BCProcessor::~BCProcessor()
-{
-
-}
+= default;
 //////////////////////////////////////////////////////////////////////////
 SPtr<BCProcessor> BCProcessor::clone(SPtr<ILBMKernel> kernel)
 {
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.h b/src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.h
index 2c138e437aa8392ff851ce2852357090131b728f..1f740776ea4ef75d49e825c73f354357464145a7 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.h
+++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.h
@@ -48,24 +48,7 @@ class BoundaryConditions
 {
 public:
    BoundaryConditions() 
-      : noslipBoundaryFlags(0)		
-      , slipBoundaryFlags(0)		
-      , velocityBoundaryFlags(0)		
-      , densityBoundaryFlags(0)		
-      , wallModelBoundaryFlags(0)
-      , bcVelocityX1(0.0f)
-      , bcVelocityX2(0.0f)
-      , bcVelocityX3(0.0f)
-      , bcDensity(0.0f)
-      , bcLodiDensity(0.0f)
-      , bcLodiVelocityX1(0.0f)
-      , bcLodiVelocityX2(0.0f)
-      , bcLodiVelocityX3(0.0f)
-      , bcLodiLentgh(0.0f)
-      , nx1(0.0f)
-      , nx2(0.0f)
-      , nx3(0.0f)
-      , algorithmType(-1)
+       
    {
       UB_STATIC_ASSERT( sizeof(long long) >= 8);
       UB_STATIC_ASSERT( (sizeof(long long)*8) >= (D3Q27System::FENDDIR+1)*BoundaryConditions::optionDigits );
@@ -73,7 +56,7 @@ public:
       for(int fdir=D3Q27System::FSTARTDIR; fdir<=D3Q27System::FENDDIR; fdir++) 
          q[fdir] = -999.; 
    }
-   virtual ~BoundaryConditions() {}
+   virtual ~BoundaryConditions() = default;
 
    virtual bool isEmpty() { return (noslipBoundaryFlags&slipBoundaryFlags&velocityBoundaryFlags&densityBoundaryFlags)==0;}
    virtual bool hasBoundaryCondition()
@@ -227,10 +210,10 @@ public:
    virtual std::vector< std::string > getBCNames()
    {
       std::vector< std::string > tmp;
-      tmp.push_back( "NoSlipBC"   );
-      tmp.push_back( "SlipBC"     );
-      tmp.push_back( "VelocityBC" );
-      tmp.push_back( "DensityBC"  );
+      tmp.emplace_back("NoSlipBC"   );
+      tmp.emplace_back("SlipBC"     );
+      tmp.emplace_back("VelocityBC" );
+      tmp.emplace_back("DensityBC"  );
       return tmp;
    }
    virtual std::vector< long long > getBCFlags()
@@ -258,26 +241,26 @@ public:
 protected:
    LBMReal q[D3Q27System::FENDDIR+1];
 
-   long long noslipBoundaryFlags;		
-   long long slipBoundaryFlags;		
-   long long velocityBoundaryFlags;		
-   long long densityBoundaryFlags;		
-   long long wallModelBoundaryFlags;
+   long long noslipBoundaryFlags{0};		
+   long long slipBoundaryFlags{0};		
+   long long velocityBoundaryFlags{0};		
+   long long densityBoundaryFlags{0};		
+   long long wallModelBoundaryFlags{0};
 
-   LBMReal  bcVelocityX1;
-   LBMReal  bcVelocityX2;
-   LBMReal  bcVelocityX3;
-   LBMReal  bcDensity;
+   LBMReal  bcVelocityX1{0.0f};
+   LBMReal  bcVelocityX2{0.0f};
+   LBMReal  bcVelocityX3{0.0f};
+   LBMReal  bcDensity{0.0f};
 
-   LBMReal  bcLodiDensity;
-   LBMReal  bcLodiVelocityX1;
-   LBMReal  bcLodiVelocityX2;
-   LBMReal  bcLodiVelocityX3;
-   LBMReal  bcLodiLentgh;
+   LBMReal  bcLodiDensity{0.0f};
+   LBMReal  bcLodiVelocityX1{0.0f};
+   LBMReal  bcLodiVelocityX2{0.0f};
+   LBMReal  bcLodiVelocityX3{0.0f};
+   LBMReal  bcLodiLentgh{0.0f};
 
-   LBMReal  nx1,nx2,nx3;
+   LBMReal  nx1{0.0f},nx2{0.0f},nx3{0.0f};
 
-   char algorithmType;
+   char algorithmType{-1};
 
   private:
    friend class MPIIORestartCoProcessor;
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCAdapter.h b/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCAdapter.h
index 34ea8751f4bf60966527ec82f77a2e75fe945c01..53dfd8d5848accf50593be266901707943821b1d 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCAdapter.h
+++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCAdapter.h
@@ -49,15 +49,15 @@ public:
    {
    }
 
-   void init(const D3Q27Interactor* const& interactor, const double& time=0) {}
-   void update(const D3Q27Interactor* const& interactor, const double& time=0) {}
+   void init(const D3Q27Interactor* const& interactor, const double& time=0) override {}
+   void update(const D3Q27Interactor* const& interactor, const double& time=0) override {}
 
-   void adaptBCForDirection( const D3Q27Interactor& interactor, SPtr<BoundaryConditions> bc, const double& worldX1, const double& worldX2, const double& worldX3, const double& q, const int& fdirection, const double& time=0 )
+   void adaptBCForDirection( const D3Q27Interactor&  /*interactor*/, SPtr<BoundaryConditions> bc, const double&  /*worldX1*/, const double&  /*worldX2*/, const double&  /*worldX3*/, const double& q, const int& fdirection, const double&  /*time*/=0 ) override
    {
       bc->setNoSlipBoundaryFlag(D3Q27System::INVDIR[fdirection],secondaryBcOption);
       bc->setQ((float)q,fdirection);
    }
-   void adaptBC( const D3Q27Interactor& interactor, SPtr<BoundaryConditions> bc, const double& worldX1, const double& worldX2, const double& worldX3, const double& time=0 ) 
+   void adaptBC( const D3Q27Interactor&  /*interactor*/, SPtr<BoundaryConditions> bc, const double&  /*worldX1*/, const double&  /*worldX2*/, const double&  /*worldX3*/, const double&  /*time*/=0 ) override 
    {
       bc->setBcAlgorithmType(algorithmType);
    }
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAdapter.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAdapter.cpp
index 69759b7270f861acb9a2fd5483efc3e10119047d..f80cb1e2b32afd63b6fd722fcd98726d421a1d9a 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAdapter.cpp
+++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAdapter.cpp
@@ -49,25 +49,25 @@ VelocityBCAdapter::VelocityBCAdapter(const bool& vx1, const bool& vx2, const boo
 /*==========================================================*/
 VelocityBCAdapter::VelocityBCAdapter(const bool& vx1, const bool& vx2, const bool& vx3, const mu::Parser& function, const double& startTime, const double& endTime )
 {
-   if(vx1) this->vx1BCs.push_back(BCFunction(function,startTime,endTime));
-   if(vx2) this->vx2BCs.push_back(BCFunction(function,startTime,endTime));
-   if(vx3) this->vx3BCs.push_back(BCFunction(function,startTime,endTime));
+   if(vx1) this->vx1BCs.emplace_back(function,startTime,endTime);
+   if(vx2) this->vx2BCs.emplace_back(function,startTime,endTime);
+   if(vx3) this->vx3BCs.emplace_back(function,startTime,endTime);
    this->init();
 }
 /*==========================================================*/
 VelocityBCAdapter::VelocityBCAdapter(const bool& vx1, const bool& vx2, const bool& vx3, const mu::Parser& function1, const mu::Parser& function2, const mu::Parser& function3, const double& startTime, const double& endTime )
 {
-   if(vx1) this->vx1BCs.push_back(BCFunction(function1,startTime,endTime));
-   if(vx2) this->vx2BCs.push_back(BCFunction(function2,startTime,endTime));
-   if(vx3) this->vx3BCs.push_back(BCFunction(function3,startTime,endTime));
+   if(vx1) this->vx1BCs.emplace_back(function1,startTime,endTime);
+   if(vx2) this->vx2BCs.emplace_back(function2,startTime,endTime);
+   if(vx3) this->vx3BCs.emplace_back(function3,startTime,endTime);
    this->init();
 }
 /*==========================================================*/
 VelocityBCAdapter::VelocityBCAdapter(const bool& vx1, const bool& vx2, const bool& vx3, const string& functionstring, const double& startTime, const double& endTime )
 {
-   if(vx1) this->vx1BCs.push_back(BCFunction(functionstring,startTime,endTime));
-   if(vx2) this->vx2BCs.push_back(BCFunction(functionstring,startTime,endTime));
-   if(vx3) this->vx3BCs.push_back(BCFunction(functionstring,startTime,endTime));
+   if(vx1) this->vx1BCs.emplace_back(functionstring,startTime,endTime);
+   if(vx2) this->vx2BCs.emplace_back(functionstring,startTime,endTime);
+   if(vx3) this->vx3BCs.emplace_back(functionstring,startTime,endTime);
    this->init();
 }
 /*==========================================================*/
@@ -99,9 +99,9 @@ VelocityBCAdapter::VelocityBCAdapter(const double& vx1, const double& vx1StartTi
                                                const double& vx2, const double& vx2StartTime, const double& vx2EndTime,
                                                const double& vx3, const double& vx3StartTime, const double& vx3EndTime )
 {
-   this->vx1BCs.push_back(BCFunction(vx1,vx1StartTime,vx1EndTime));
-   this->vx2BCs.push_back(BCFunction(vx2,vx2StartTime,vx2EndTime));
-   this->vx3BCs.push_back(BCFunction(vx3,vx3StartTime,vx3EndTime));
+   this->vx1BCs.emplace_back(vx1,vx1StartTime,vx1EndTime);
+   this->vx2BCs.emplace_back(vx2,vx2StartTime,vx2EndTime);
+   this->vx3BCs.emplace_back(vx3,vx3StartTime,vx3EndTime);
    this->init();
 }
 /*==========================================================*/
@@ -109,9 +109,9 @@ VelocityBCAdapter::VelocityBCAdapter(const string& vx1Function, const double& vx
                                                const string& vx2Function, const double& vx2StartTime, const double& vx2EndTime,
                                                const string& vx3Function, const double& vx3StartTime, const double& vx3EndTime ) 
 {
-   if(vx1Function.size()) this->vx1BCs.push_back(BCFunction(vx1Function,vx1StartTime,vx1EndTime));
-   if(vx2Function.size()) this->vx2BCs.push_back(BCFunction(vx2Function,vx2StartTime,vx2EndTime));
-   if(vx3Function.size()) this->vx3BCs.push_back(BCFunction(vx3Function,vx3StartTime,vx3EndTime));
+   if(vx1Function.size()) this->vx1BCs.emplace_back(vx1Function,vx1StartTime,vx1EndTime);
+   if(vx2Function.size()) this->vx2BCs.emplace_back(vx2Function,vx2StartTime,vx2EndTime);
+   if(vx3Function.size()) this->vx3BCs.emplace_back(vx3Function,vx3StartTime,vx3EndTime);
    this->init();
 }
 /*==========================================================*/
@@ -120,9 +120,9 @@ void VelocityBCAdapter::setNewVelocities(const double& vx1, const double& vx1Sta
                                               const double& vx3, const double& vx3StartTime, const double& vx3EndTime )
 {
    this->clear();
-   this->vx1BCs.push_back(BCFunction(vx1,vx1StartTime,vx1EndTime));
-   this->vx2BCs.push_back(BCFunction(vx2,vx2StartTime,vx2EndTime));
-   this->vx3BCs.push_back(BCFunction(vx3,vx3StartTime,vx3EndTime));
+   this->vx1BCs.emplace_back(vx1,vx1StartTime,vx1EndTime);
+   this->vx2BCs.emplace_back(vx2,vx2StartTime,vx2EndTime);
+   this->vx3BCs.emplace_back(vx3,vx3StartTime,vx3EndTime);
    this->init();
 }
 /*==========================================================*/
@@ -266,7 +266,7 @@ void VelocityBCAdapter::update( const D3Q27Interactor* const& interactor, const
    this->init(interactor,time);
 }
 /*==========================================================*/
-void VelocityBCAdapter::adaptBCForDirection( const D3Q27Interactor& interactor, SPtr<BoundaryConditions> bc, const double& worldX1, const double& worldX2, const double& worldX3, const double& q, const int& fdirection, const double& time )
+void VelocityBCAdapter::adaptBCForDirection( const D3Q27Interactor&  /*interactor*/, SPtr<BoundaryConditions> bc, const double&  /*worldX1*/, const double&  /*worldX2*/, const double&  /*worldX3*/, const double& q, const int& fdirection, const double&  /*time*/ )
 {
    bc->setVelocityBoundaryFlag(D3Q27System::INVDIR[fdirection],secondaryBcOption);
    bc->setQ((float)q,fdirection);
@@ -278,7 +278,7 @@ void VelocityBCAdapter::adaptBC( const D3Q27Interactor& interactor, SPtr<Boundar
    bc->setBcAlgorithmType(algorithmType);
 }
 /*==========================================================*/
-void VelocityBCAdapter::setNodeVelocity( const D3Q27Interactor& interactor, SPtr<BoundaryConditions> bc, const double& worldX1, const double& worldX2, const double& worldX3, const double& timestep) 
+void VelocityBCAdapter::setNodeVelocity( const D3Q27Interactor&  /*interactor*/, SPtr<BoundaryConditions> bc, const double& worldX1, const double& worldX2, const double& worldX3, const double& timestep) 
 {
    //Geschwindigkeiten setzen
    try
@@ -312,7 +312,7 @@ UbTupleDouble3 VelocityBCAdapter::getVelocity(const double& x1, const double& x2
    if(tmpVx2Function) vx2 = tmpVx2Function->Eval();
    if(tmpVx3Function) vx3 = tmpVx3Function->Eval();
     
-   return UbTupleDouble3(vx1,vx2,vx3);
+   return { vx1,vx2,vx3 };
 }
 /*==========================================================*/
 string VelocityBCAdapter::toString()
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAdapter.h b/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAdapter.h
index 723b9de387e4f9a6869fc64a0e2ce7e2d2df5435..4c2b666fcbe6589b0102942842661a9fb68ad009 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAdapter.h
+++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAdapter.h
@@ -123,11 +123,11 @@ public:
    //------------- implements BCAdapter ----- start
    std::string toString();
    
-   void init(const D3Q27Interactor* const& interactor, const double& time=0);
-   void update(const D3Q27Interactor* const& interactor, const double& time=0);
+   void init(const D3Q27Interactor* const& interactor, const double& time=0) override;
+   void update(const D3Q27Interactor* const& interactor, const double& time=0) override;
 
-   void adaptBCForDirection( const D3Q27Interactor& interactor, SPtr<BoundaryConditions> bc, const double& worldX1, const double& worldX2, const double& worldX3, const double& q, const int& fdirection, const double& time=0 );
-   void adaptBC( const D3Q27Interactor& interactor, SPtr<BoundaryConditions> bc, const double& worldX1, const double& worldX2, const double& worldX3, const double& time=0 );
+   void adaptBCForDirection( const D3Q27Interactor& interactor, SPtr<BoundaryConditions> bc, const double& worldX1, const double& worldX2, const double& worldX3, const double& q, const int& fdirection, const double& time=0 ) override;
+   void adaptBC( const D3Q27Interactor& interactor, SPtr<BoundaryConditions> bc, const double& worldX1, const double& worldX2, const double& worldX3, const double& time=0 ) override;
 
    //------------- implements BCAdapter ----- end
 
diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/CoProcessor.cpp b/src/cpu/VirtualFluidsCore/CoProcessors/CoProcessor.cpp
index cd74e23229799f23688a820efbe3c06a5ce3a272..081aac9825a92956c2c13298ea6efab2ff810ead 100644
--- a/src/cpu/VirtualFluidsCore/CoProcessors/CoProcessor.cpp
+++ b/src/cpu/VirtualFluidsCore/CoProcessors/CoProcessor.cpp
@@ -37,8 +37,7 @@
 #include "UbScheduler.h"
 
 CoProcessor::CoProcessor()
-{
-}
+= default;
 
 CoProcessor::CoProcessor(SPtr<Grid3D> grid, SPtr<UbScheduler> s): grid(grid), scheduler(s)
 {
@@ -46,7 +45,5 @@ CoProcessor::CoProcessor(SPtr<Grid3D> grid, SPtr<UbScheduler> s): grid(grid), sc
 }
 
 CoProcessor::~CoProcessor()
-{
-
-}
+= default;
 
diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/NUPSCounterCoProcessor.cpp b/src/cpu/VirtualFluidsCore/CoProcessors/NUPSCounterCoProcessor.cpp
index e881706cacc53a98076131da2022fc417d9bf1e7..43652ec721991f00b5b5f6a47122ec807bb4e60c 100644
--- a/src/cpu/VirtualFluidsCore/CoProcessors/NUPSCounterCoProcessor.cpp
+++ b/src/cpu/VirtualFluidsCore/CoProcessors/NUPSCounterCoProcessor.cpp
@@ -66,8 +66,7 @@ NUPSCounterCoProcessor::NUPSCounterCoProcessor(SPtr<Grid3D> grid, SPtr<UbSchedul
 }
 //////////////////////////////////////////////////////////////////////////
 NUPSCounterCoProcessor::~NUPSCounterCoProcessor() 
-{
-}
+= default;
 //////////////////////////////////////////////////////////////////////////
 void NUPSCounterCoProcessor::process(double step)
 {
diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/NUPSCounterCoProcessor.h b/src/cpu/VirtualFluidsCore/CoProcessors/NUPSCounterCoProcessor.h
index 6d929fc25404aa53564598ac31d1bc18ee5acc98..f111a4b8cc4389217cdcfb758908d294733d6ba0 100644
--- a/src/cpu/VirtualFluidsCore/CoProcessors/NUPSCounterCoProcessor.h
+++ b/src/cpu/VirtualFluidsCore/CoProcessors/NUPSCounterCoProcessor.h
@@ -55,7 +55,7 @@ public:
    //! \param numOfThreads is number of threads
    //! \param comm is Communicator object
    NUPSCounterCoProcessor(SPtr<Grid3D> grid, SPtr<UbScheduler> s, int numOfThreads, SPtr<Communicator> comm);
-   virtual ~NUPSCounterCoProcessor();
+   ~NUPSCounterCoProcessor() override;
 
    void process(double step)override;
 
diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/WriteBlocksCoProcessor.cpp b/src/cpu/VirtualFluidsCore/CoProcessors/WriteBlocksCoProcessor.cpp
index f2843380f8bd0ccb386f9c5cdf745fdd8ab219dc..077c10e32a09b2902267ba4dd010dac27a5a15ff 100644
--- a/src/cpu/VirtualFluidsCore/CoProcessors/WriteBlocksCoProcessor.cpp
+++ b/src/cpu/VirtualFluidsCore/CoProcessors/WriteBlocksCoProcessor.cpp
@@ -52,8 +52,7 @@ WriteBlocksCoProcessor::WriteBlocksCoProcessor(SPtr<Grid3D> grid, SPtr<UbSchedul
 }
 //////////////////////////////////////////////////////////////////////////
 WriteBlocksCoProcessor::~WriteBlocksCoProcessor() 
-{
-}
+= default;
 //////////////////////////////////////////////////////////////////////////
 void WriteBlocksCoProcessor::process(double step)
 {
@@ -71,12 +70,12 @@ void WriteBlocksCoProcessor::collectData(double step)
       std::vector< UbTupleInt8 > cells;
       std::vector<std::string> celldatanames;
 
-      celldatanames.push_back("isActive");
-      celldatanames.push_back("rank");
-      celldatanames.push_back("interface");
-      celldatanames.push_back("ID");
-      celldatanames.push_back("part");
-      celldatanames.push_back("level");
+      celldatanames.emplace_back("isActive");
+      celldatanames.emplace_back("rank");
+      celldatanames.emplace_back("interface");
+      celldatanames.emplace_back("ID");
+      celldatanames.emplace_back("part");
+      celldatanames.emplace_back("level");
       //celldatanames.push_back("connectorCF");
       //celldatanames.push_back("connectorFC");
 #if defined VF_FETOL
diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/WriteBlocksCoProcessor.h b/src/cpu/VirtualFluidsCore/CoProcessors/WriteBlocksCoProcessor.h
index 8127c9a4653d00e81802bcaa8bb34f9d6fc09563..30beca56754f7bc74738664ee694e0b21acab146 100644
--- a/src/cpu/VirtualFluidsCore/CoProcessors/WriteBlocksCoProcessor.h
+++ b/src/cpu/VirtualFluidsCore/CoProcessors/WriteBlocksCoProcessor.h
@@ -57,7 +57,7 @@ public:
    //! \param writer is WbWriter object
    //! \param comm is Communicator object
    WriteBlocksCoProcessor(SPtr<Grid3D> grid, SPtr<UbScheduler> s, const std::string& path, WbWriter* const writer, SPtr<Communicator> comm);
-   virtual ~WriteBlocksCoProcessor();
+   ~WriteBlocksCoProcessor() override;
 
    void process(double step) override;
 
diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/WriteBoundaryConditionsCoProcessor.cpp b/src/cpu/VirtualFluidsCore/CoProcessors/WriteBoundaryConditionsCoProcessor.cpp
index ec21df5aebfc4b92be4fce2a1ec69692b6a2a7c7..4902ea845c4bc76c281f49c9b0db303adcd19dc8 100644
--- a/src/cpu/VirtualFluidsCore/CoProcessors/WriteBoundaryConditionsCoProcessor.cpp
+++ b/src/cpu/VirtualFluidsCore/CoProcessors/WriteBoundaryConditionsCoProcessor.cpp
@@ -50,9 +50,7 @@
 using namespace std;
 
 WriteBoundaryConditionsCoProcessor::WriteBoundaryConditionsCoProcessor()
-{
-
-}
+= default;
 //////////////////////////////////////////////////////////////////////////
 WriteBoundaryConditionsCoProcessor::WriteBoundaryConditionsCoProcessor(SPtr<Grid3D> grid, SPtr<UbScheduler> s,
    const std::string& path, WbWriter* const writer, SPtr<Communicator> comm)
@@ -151,10 +149,10 @@ void WriteBoundaryConditionsCoProcessor::addDataGeo(SPtr<Block3D> block)
 
    //Diese Daten werden geschrieben:
    datanames.resize(0);
-   datanames.push_back("Boundary Conditions");
-   datanames.push_back("Geometry");
-   datanames.push_back("Level");
-   //datanames.push_back("Interface CF");
+   datanames.emplace_back("Boundary Conditions");
+   datanames.emplace_back("Geometry");
+   datanames.emplace_back("Level");
+   //datanames.emplace_back("Interface CF");
 
    data.resize(datanames.size());
 
diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/WriteBoundaryConditionsCoProcessor.h b/src/cpu/VirtualFluidsCore/CoProcessors/WriteBoundaryConditionsCoProcessor.h
index 73bd92ffe485fad78adf34aaa2aeaf07e28b400d..b89db187db42d4d13a0f3f9b986451e3665e499b 100644
--- a/src/cpu/VirtualFluidsCore/CoProcessors/WriteBoundaryConditionsCoProcessor.h
+++ b/src/cpu/VirtualFluidsCore/CoProcessors/WriteBoundaryConditionsCoProcessor.h
@@ -61,7 +61,7 @@ public:
    //! \param writer is WbWriter object
    //! \param comm is Communicator object
    WriteBoundaryConditionsCoProcessor(SPtr<Grid3D> grid, SPtr<UbScheduler> s, const std::string& path, WbWriter* const writer, SPtr<Communicator> comm);
-   ~WriteBoundaryConditionsCoProcessor() {}
+   ~WriteBoundaryConditionsCoProcessor() override = default;
 
    void process(double step) override;
 
diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/WriteMacroscopicQuantitiesCoProcessor.cpp b/src/cpu/VirtualFluidsCore/CoProcessors/WriteMacroscopicQuantitiesCoProcessor.cpp
index 5654d1dfe567245621c90e1231f12966fd0b0f3e..d621d551561991fa2edde46152a1ce96cc9db264 100644
--- a/src/cpu/VirtualFluidsCore/CoProcessors/WriteMacroscopicQuantitiesCoProcessor.cpp
+++ b/src/cpu/VirtualFluidsCore/CoProcessors/WriteMacroscopicQuantitiesCoProcessor.cpp
@@ -47,9 +47,7 @@
 #include "BCArray3D.h"
 
 WriteMacroscopicQuantitiesCoProcessor::WriteMacroscopicQuantitiesCoProcessor()
-{
-
-}
+= default;
 //////////////////////////////////////////////////////////////////////////
 WriteMacroscopicQuantitiesCoProcessor::WriteMacroscopicQuantitiesCoProcessor(SPtr<Grid3D> grid, SPtr<UbScheduler> s,
                                                                                  const std::string& path, WbWriter* const writer, 
@@ -153,13 +151,13 @@ void WriteMacroscopicQuantitiesCoProcessor::addDataMQ(SPtr<Block3D> block)
 
    //Diese Daten werden geschrieben:
    datanames.resize(0);
-   datanames.push_back("Rho");
-   datanames.push_back("Vx");
-   datanames.push_back("Vy");
-   datanames.push_back("Vz");
-   //datanames.push_back("Press");
-   datanames.push_back("Level");
-   //datanames.push_back("BlockID");
+   datanames.emplace_back("Rho");
+   datanames.emplace_back("Vx");
+   datanames.emplace_back("Vy");
+   datanames.emplace_back("Vz");
+   //datanames.emplace_back("Press");
+   datanames.emplace_back("Level");
+   //datanames.emplace_back("BlockID");
 
      
 
@@ -219,9 +217,9 @@ void WriteMacroscopicQuantitiesCoProcessor::addDataMQ(SPtr<Block3D> block)
                int index = 0;
                nodeNumbers(ix1,ix2,ix3) = nr++;
                Vector3D worldCoordinates = grid->getNodeCoordinates(block, ix1, ix2, ix3);
-               nodes.push_back( UbTupleFloat3(float(worldCoordinates[0]),
+               nodes.emplace_back(float(worldCoordinates[0]),
                                               float(worldCoordinates[1]),
-                                              float(worldCoordinates[2]) ));
+                                              float(worldCoordinates[2]) );
 
                distributions->getDistribution(f, ix1, ix2, ix3);
                calcMacros(f,rho,vx1,vx2,vx3);
diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/WriteMacroscopicQuantitiesCoProcessor.h b/src/cpu/VirtualFluidsCore/CoProcessors/WriteMacroscopicQuantitiesCoProcessor.h
index 0386f938191630894e3facf04a2fa721e3fb6287..816999a71d92219f11d59fd2d9450e46531d427e 100644
--- a/src/cpu/VirtualFluidsCore/CoProcessors/WriteMacroscopicQuantitiesCoProcessor.h
+++ b/src/cpu/VirtualFluidsCore/CoProcessors/WriteMacroscopicQuantitiesCoProcessor.h
@@ -66,7 +66,7 @@ public:
    WriteMacroscopicQuantitiesCoProcessor(SPtr<Grid3D> grid, SPtr<UbScheduler> s,
                                            const std::string& path, WbWriter* const writer, 
                                            SPtr<LBMUnitConverter> conv, SPtr<Communicator> comm);
-   ~WriteMacroscopicQuantitiesCoProcessor(){}
+   ~WriteMacroscopicQuantitiesCoProcessor() override= default;
 
    void process(double step) override;
 
@@ -94,7 +94,7 @@ private:
    int gridRank;
    SPtr<Communicator> comm;
 
-   typedef void(*CalcMacrosFct)(const LBMReal* const& /*feq[27]*/, LBMReal& /*(d)rho*/, LBMReal& /*vx1*/, LBMReal& /*vx2*/, LBMReal& /*vx3*/);
+   using CalcMacrosFct = void (*)(const LBMReal *const &, LBMReal &, LBMReal &, LBMReal &, LBMReal &);
    CalcMacrosFct calcMacros;
 };
 
diff --git a/src/cpu/VirtualFluidsCore/Connectors/Block3DConnector.h b/src/cpu/VirtualFluidsCore/Connectors/Block3DConnector.h
index 527c42d3e3f43d9e3d9b3cdef8bf666b0c3d5450..1bef6737422efa711f15bb1f78b87312ea0032e2 100644
--- a/src/cpu/VirtualFluidsCore/Connectors/Block3DConnector.h
+++ b/src/cpu/VirtualFluidsCore/Connectors/Block3DConnector.h
@@ -46,9 +46,9 @@
 class Block3DConnector
 {
 public:
-   Block3DConnector() : sendDir(-1) {}
+   Block3DConnector() = default;
    Block3DConnector(const int& sendDir) : sendDir(sendDir) {}
-   virtual ~Block3DConnector() {}
+   virtual ~Block3DConnector() = default;
    //!Iniitializes connector
    virtual void init()=0;
    //!Synchronizes the send-buffer length
@@ -94,7 +94,7 @@ public:
    virtual void receiveVectorsX3() = 0;
 
 protected:
-   int  sendDir;
+   int  sendDir{-1};
 };
 
 #endif //BLOCK3DCONNECTOR_H
diff --git a/src/cpu/VirtualFluidsCore/Connectors/D3Q27ETFullDirectConnector.h b/src/cpu/VirtualFluidsCore/Connectors/D3Q27ETFullDirectConnector.h
index b9f2d1c24e1df8651c7d5c8e1b6a3aad4d1ddbb1..ffce993cce0b56cdafde01b875e43be614bdeef3 100644
--- a/src/cpu/VirtualFluidsCore/Connectors/D3Q27ETFullDirectConnector.h
+++ b/src/cpu/VirtualFluidsCore/Connectors/D3Q27ETFullDirectConnector.h
@@ -47,8 +47,8 @@ class D3Q27ETFullDirectConnector : public LocalBlock3DConnector
 {
 public:
    D3Q27ETFullDirectConnector(SPtr<Block3D> from, SPtr<Block3D> to, int sendDir);
-   void init();
-   void sendVectors();
+   void init() override;
+   void sendVectors() override;
 
 protected:
    inline void exchangeData(int x1From, int x2From, int x3From, int x1To, int x2To, int x3To);
diff --git a/src/cpu/VirtualFluidsCore/Connectors/LocalBlock3DConnector.h b/src/cpu/VirtualFluidsCore/Connectors/LocalBlock3DConnector.h
index 93bb6536d26020a55ad93ad379820ca0266e816d..de6a011788cd84772a23fd97111ecd1e6755b2a9 100644
--- a/src/cpu/VirtualFluidsCore/Connectors/LocalBlock3DConnector.h
+++ b/src/cpu/VirtualFluidsCore/Connectors/LocalBlock3DConnector.h
@@ -49,22 +49,22 @@ public:
    {
 
    }
-   virtual ~LocalBlock3DConnector() {}
-   void sendTransmitterDataSize() {}
-   void receiveTransmitterDataSize() {}
-   virtual void init() = 0;
-   void prepareForReceive() {}
-   void prepareForSend() {}
-   void fillSendVectors() {}
-   virtual void sendVectors()=0;
-   void receiveVectors() {}
+   ~LocalBlock3DConnector() override = default;
+   void sendTransmitterDataSize() override {}
+   void receiveTransmitterDataSize() override {}
+   void init() override = 0;
+   void prepareForReceive() override {}
+   void prepareForSend() override {}
+   void fillSendVectors() override {}
+   void sendVectors() override =0;
+   void receiveVectors() override {}
 
-   void distributeReceiveVectors() {}
+   void distributeReceiveVectors() override {}
 
-   bool isLocalConnector() { return true; }
-   bool isRemoteConnector() { return false; }
-   bool isInterpolationConnectorCF() { return false; }
-   bool isInterpolationConnectorFC() { return false; }
+   bool isLocalConnector() override { return true; }
+   bool isRemoteConnector() override { return false; }
+   bool isInterpolationConnectorCF() override { return false; }
+   bool isInterpolationConnectorFC() override { return false; }
 
    double getSendRecieveTime();
 
diff --git a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVector.cpp b/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVector.cpp
index 533f23f6bb2ad24e68e156b53ff9974324c9b2c4..113fd04ce73e162db48eca9396038920bc348321 100644
--- a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVector.cpp
+++ b/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVector.cpp
@@ -35,8 +35,7 @@
 #include "EsoTwistD3Q27System.h"
 
 D3Q27EsoTwist3DSplittedVector::D3Q27EsoTwist3DSplittedVector()
-{
-}
+= default;
 //////////////////////////////////////////////////////////////////////////
 D3Q27EsoTwist3DSplittedVector::D3Q27EsoTwist3DSplittedVector( size_t nx1, size_t nx2, size_t nx3, LBMReal value )
 {
@@ -44,16 +43,14 @@ D3Q27EsoTwist3DSplittedVector::D3Q27EsoTwist3DSplittedVector( size_t nx1, size_t
    this->NX2 = nx2;
    this->NX3 = nx3;
 
-   this->localDistributions    = CbArray4D<LBMReal,IndexerX4X3X2X1>::CbArray4DPtr(new CbArray4D<LBMReal,IndexerX4X3X2X1>(13, nx1+1, nx2+1, nx3+1, value));
-   this->nonLocalDistributions = CbArray4D<LBMReal,IndexerX4X3X2X1>::CbArray4DPtr(new CbArray4D<LBMReal,IndexerX4X3X2X1>(13, nx1+1, nx2+1, nx3+1, value));
+   this->localDistributions    = std::make_shared<CbArray4D<LBMReal, IndexerX4X3X2X1> >(13, nx1+1, nx2+1, nx3+1, value);
+   this->nonLocalDistributions = std::make_shared<CbArray4D<LBMReal, IndexerX4X3X2X1> >(13, nx1+1, nx2+1, nx3+1, value);
 
-   this->zeroDistributions     = CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal,IndexerX3X2X1>(nx1, nx2, nx3, value));
+   this->zeroDistributions     = std::make_shared<CbArray3D<LBMReal, IndexerX3X2X1> >(nx1, nx2, nx3, value);
 }
 //////////////////////////////////////////////////////////////////////////
 D3Q27EsoTwist3DSplittedVector::~D3Q27EsoTwist3DSplittedVector()
-{
-
-}
+= default;
 //////////////////////////////////////////////////////////////////////////
 void D3Q27EsoTwist3DSplittedVector::swap()
 {
diff --git a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVector.h b/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVector.h
index f555aabad86f5708c7e3bd35d824322a4245dff8..1e92809c0c429b0d72bc29e17806b17795fc4a67 100644
--- a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVector.h
+++ b/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVector.h
@@ -51,35 +51,35 @@ public:
    //! \param value initialisation value
    D3Q27EsoTwist3DSplittedVector(size_t nx1, size_t nx2, size_t nx3, LBMReal value);
    //////////////////////////////////////////////////////////////////////////
-   ~D3Q27EsoTwist3DSplittedVector();
+   ~D3Q27EsoTwist3DSplittedVector() override;
    //////////////////////////////////////////////////////////////////////////
-   void swap();
+   void swap() override;
    //////////////////////////////////////////////////////////////////////////
-   virtual void getDistribution( LBMReal* const f, size_t x1, size_t x2, size_t x3);
+   void getDistribution( LBMReal* const f, size_t x1, size_t x2, size_t x3) override;
    //////////////////////////////////////////////////////////////////////////
-   virtual void setDistribution(const LBMReal* const f, size_t x1, size_t x2, size_t x3);
+   void setDistribution(const LBMReal* const f, size_t x1, size_t x2, size_t x3) override;
    ////////////////////////////////////////////////////////////////////////
-   virtual void getDistributionInv( LBMReal* const f, size_t x1, size_t x2, size_t x3);
+   void getDistributionInv( LBMReal* const f, size_t x1, size_t x2, size_t x3) override;
    //////////////////////////////////////////////////////////////////////////
-   virtual void setDistributionInv(const LBMReal* const f, size_t x1, size_t x2, size_t x3);
+   void setDistributionInv(const LBMReal* const f, size_t x1, size_t x2, size_t x3) override;
    //////////////////////////////////////////////////////////////////////////
-   virtual void setDistributionForDirection(const LBMReal* const f, size_t x1, size_t x2, size_t x3, unsigned long int direction);
+   void setDistributionForDirection(const LBMReal* const f, size_t x1, size_t x2, size_t x3, unsigned long int direction) override;
    //////////////////////////////////////////////////////////////////////////
-   virtual void setDistributionForDirection(LBMReal f, size_t x1, size_t x2, size_t x3, int direction);
+   void setDistributionForDirection(LBMReal f, size_t x1, size_t x2, size_t x3, int direction) override;
    //////////////////////////////////////////////////////////////////////////
-   virtual LBMReal getDistributionInvForDirection(size_t x1, size_t x2, size_t x3, int direction);
+   LBMReal getDistributionInvForDirection(size_t x1, size_t x2, size_t x3, int direction) override;
    //////////////////////////////////////////////////////////////////////////
-   virtual void setDistributionInvForDirection(const LBMReal* const f, size_t x1, size_t x2, size_t x3, unsigned long int direction);
+   void setDistributionInvForDirection(const LBMReal* const f, size_t x1, size_t x2, size_t x3, unsigned long int direction) override;
    //////////////////////////////////////////////////////////////////////////
-   virtual void setDistributionInvForDirection(LBMReal f, size_t x1, size_t x2, size_t x3, unsigned long int direction);
+   void setDistributionInvForDirection(LBMReal f, size_t x1, size_t x2, size_t x3, unsigned long int direction) override;
    //////////////////////////////////////////////////////////////////////////
-   virtual LBMReal getDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction);
+   LBMReal getDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction) override;
    //////////////////////////////////////////////////////////////////////////
-   size_t getNX1() const;
+   size_t getNX1() const override;
    //////////////////////////////////////////////////////////////////////////
-   size_t getNX2() const;
+   size_t getNX2() const override;
    //////////////////////////////////////////////////////////////////////////
-   size_t getNX3() const;
+   size_t getNX3() const override;
    //////////////////////////////////////////////////////////////////////////
    CbArray4D<LBMReal,IndexerX4X3X2X1>::CbArray4DPtr getLocalDistributions();
    //////////////////////////////////////////////////////////////////////////
diff --git a/src/cpu/VirtualFluidsCore/Data/DataSet3D.h b/src/cpu/VirtualFluidsCore/Data/DataSet3D.h
index 095708b4aeddc3a411af077261e9c0872299343f..66fefb15ad256b9f0161dae938fe58795d5911f8 100644
--- a/src/cpu/VirtualFluidsCore/Data/DataSet3D.h
+++ b/src/cpu/VirtualFluidsCore/Data/DataSet3D.h
@@ -40,9 +40,9 @@
 #include "basics/container/CbArray3D.h"
 #include "DistributionArray3D.h"
 
-typedef CbArray4D<LBMReal,IndexerX4X3X2X1> AverageValuesArray3D;
-typedef CbArray4D<LBMReal,IndexerX4X3X2X1> ShearStressValuesArray3D;
-typedef CbArray3D<LBMReal, IndexerX3X2X1> RelaxationFactorArray3D;
+using AverageValuesArray3D = CbArray4D<LBMReal, IndexerX4X3X2X1>;
+using ShearStressValuesArray3D = CbArray4D<LBMReal, IndexerX4X3X2X1>;
+using RelaxationFactorArray3D = CbArray3D<LBMReal, IndexerX3X2X1>;
 
 //! A class provides an interface for data structures in the kernel.
 class DataSet3D
diff --git a/src/cpu/VirtualFluidsCore/Data/DistributionArray3D.h b/src/cpu/VirtualFluidsCore/Data/DistributionArray3D.h
index c72f358cddf6fd36b92e4b7f681ef438f37b1f72..89da1577ffe6c57f9ef77c96dec4dd92a73c569a 100644
--- a/src/cpu/VirtualFluidsCore/Data/DistributionArray3D.h
+++ b/src/cpu/VirtualFluidsCore/Data/DistributionArray3D.h
@@ -6,8 +6,9 @@
 class DistributionArray3D
 {
 public:
-   DistributionArray3D() {};
-   virtual ~DistributionArray3D(){};
+   DistributionArray3D() = default;;
+   virtual ~DistributionArray3D()= default;;
+
    virtual size_t getNX1() const = 0;
    virtual size_t getNX2() const = 0;
    virtual size_t getNX3() const = 0;
diff --git a/src/cpu/VirtualFluidsCore/Data/EsoTwist3D.h b/src/cpu/VirtualFluidsCore/Data/EsoTwist3D.h
index 87c1639bf85a9b9e12f2787280f98375050bc6b4..2e0475f1d76faa992431d1e8ebbeb64760178e13 100644
--- a/src/cpu/VirtualFluidsCore/Data/EsoTwist3D.h
+++ b/src/cpu/VirtualFluidsCore/Data/EsoTwist3D.h
@@ -50,38 +50,38 @@ class EsoTwistPlusD3Q19UnrollArray{};
 class EsoTwist3D : public DistributionArray3D
 {
 public:
-   EsoTwist3D(){};
-   virtual ~EsoTwist3D(){};
+   EsoTwist3D()= default;;
+   ~EsoTwist3D() override= default;;
    //////////////////////////////////////////////////////////////////////////
-   virtual void swap() = 0;
+   void swap() override = 0;
    //////////////////////////////////////////////////////////////////////////
-   virtual void getDistribution(LBMReal* const f, size_t x1, size_t x2, size_t x3) = 0;
+   void getDistribution(LBMReal* const f, size_t x1, size_t x2, size_t x3) override = 0;
    //////////////////////////////////////////////////////////////////////////
-   virtual void setDistribution(const LBMReal* const f, size_t x1, size_t x2, size_t x3) = 0;
+   void setDistribution(const LBMReal* const f, size_t x1, size_t x2, size_t x3) override = 0;
    ////////////////////////////////////////////////////////////////////////
-   virtual void getDistributionInv( LBMReal* const f, size_t x1, size_t x2, size_t x3) = 0;
+   void getDistributionInv( LBMReal* const f, size_t x1, size_t x2, size_t x3) override = 0;
    //////////////////////////////////////////////////////////////////////////
-   virtual void setDistributionInv(const LBMReal* const f, size_t x1, size_t x2, size_t x3) = 0;
+   void setDistributionInv(const LBMReal* const f, size_t x1, size_t x2, size_t x3) override = 0;
    //////////////////////////////////////////////////////////////////////////
-   virtual void setDistributionForDirection(const LBMReal* const f, size_t x1, size_t x2, size_t x3, unsigned long int direction) = 0;
+   void setDistributionForDirection(const LBMReal* const f, size_t x1, size_t x2, size_t x3, unsigned long int direction) override = 0;
    //////////////////////////////////////////////////////////////////////////
-   virtual void setDistributionForDirection(LBMReal f, size_t x1, size_t x2, size_t x3, int direction) = 0;
+   void setDistributionForDirection(LBMReal f, size_t x1, size_t x2, size_t x3, int direction) override = 0;
    //////////////////////////////////////////////////////////////////////////
    //virtual void getDistributionInvForDirection(LBMReal* const& f, const size_t& x1, const size_t& x2, const size_t& x3, const unsigned long int& direction) = 0;
    //////////////////////////////////////////////////////////////////////////
-   virtual LBMReal getDistributionInvForDirection(size_t x1, size_t x2, size_t x3, int direction) = 0;
+   LBMReal getDistributionInvForDirection(size_t x1, size_t x2, size_t x3, int direction) override = 0;
    //////////////////////////////////////////////////////////////////////////
-   virtual void setDistributionInvForDirection(const LBMReal* const f, size_t x1, size_t x2, size_t x3, unsigned long int direction) = 0;
+   void setDistributionInvForDirection(const LBMReal* const f, size_t x1, size_t x2, size_t x3, unsigned long int direction) override = 0;
    //////////////////////////////////////////////////////////////////////////
-   virtual void setDistributionInvForDirection(LBMReal f, size_t x1, size_t x2, size_t x3, unsigned long int direction) = 0;
+   void setDistributionInvForDirection(LBMReal f, size_t x1, size_t x2, size_t x3, unsigned long int direction) override = 0;
    //////////////////////////////////////////////////////////////////////////
-   virtual LBMReal getDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction) = 0;
+   LBMReal getDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction) override = 0;
    //////////////////////////////////////////////////////////////////////////
-   virtual size_t getNX1() const = 0;
+   size_t getNX1() const override = 0;
    //////////////////////////////////////////////////////////////////////////
-   virtual size_t getNX2() const = 0;
+   size_t getNX2() const override = 0;
    //////////////////////////////////////////////////////////////////////////
-   virtual size_t getNX3() const = 0;
+   size_t getNX3() const override = 0;
    //////////////////////////////////////////////////////////////////////////
   
 };
diff --git a/src/cpu/VirtualFluidsCore/Grid/BasicCalculator.cpp b/src/cpu/VirtualFluidsCore/Grid/BasicCalculator.cpp
index d0127b372cd2969f9aef6a5517b904ca6e01d4eb..55c35a9cd465799f7877d88a3f4c4a81524f518a 100644
--- a/src/cpu/VirtualFluidsCore/Grid/BasicCalculator.cpp
+++ b/src/cpu/VirtualFluidsCore/Grid/BasicCalculator.cpp
@@ -52,11 +52,6 @@ BasicCalculator::BasicCalculator(SPtr<Grid3D> grid, SPtr<UbScheduler> additional
    Calculator(grid, additionalGhostLayerUpdateScheduler, numberOfTimeSteps)
 {
 
-}
-//////////////////////////////////////////////////////////////////////////
-BasicCalculator::~BasicCalculator()
-{
-
 }
 //////////////////////////////////////////////////////////////////////////
 void BasicCalculator::calculate()
diff --git a/src/cpu/VirtualFluidsCore/Grid/BasicCalculator.h b/src/cpu/VirtualFluidsCore/Grid/BasicCalculator.h
index 0e681746156f7cbbec5216f7eb0bb10fe8fa5c07..7585f53ce3651c8d80328c5cc3a0821e5e7cda43 100644
--- a/src/cpu/VirtualFluidsCore/Grid/BasicCalculator.h
+++ b/src/cpu/VirtualFluidsCore/Grid/BasicCalculator.h
@@ -46,8 +46,8 @@ class BasicCalculator : public Calculator
 {
 public:
    BasicCalculator(SPtr<Grid3D> grid, SPtr<UbScheduler> additionalGhostLayerUpdateScheduler, int numberOfTimeSteps);
-   virtual ~BasicCalculator();
-   virtual void calculate();
+   ~BasicCalculator() override = default;
+   void calculate() override;
 
 protected:
    void calculateBlocks(int startLevel, int maxInitLevel, int calcStep);
diff --git a/src/cpu/VirtualFluidsCore/Grid/Block3D.cpp b/src/cpu/VirtualFluidsCore/Grid/Block3D.cpp
index f11cfde0d0b69cc60862ab43d9afdf21d4dc5dae..23fc3903bfa7877211ff9e47d5993f0f7b39d742 100644
--- a/src/cpu/VirtualFluidsCore/Grid/Block3D.cpp
+++ b/src/cpu/VirtualFluidsCore/Grid/Block3D.cpp
@@ -39,38 +39,19 @@
 
 
 int Block3D::counter = 0;
-//////////////////////////////////////////////////////////////////////////
-Block3D::Block3D() : x1(0),x2(0),x3(0)
-                     ,active(true)
-                     ,globalID(-1)
-                     ,rank(-1),part(-1)
-                     ,interpolationFlagCF(0)
-                     ,interpolationFlagFC(0)
-                     ,level(-1)
-                     ,bundle(-1)
-                     ,lrank(-1)
-                     ,localID(-1)
-{
-}
+
 //////////////////////////////////////////////////////////////////////////
 Block3D::Block3D(int x1, int x2, int x3, int level)
-               : x1(x1), x2(x2), x3(x3)
-               ,active(true)
-               ,globalID(-1)
-               ,rank(0),part(0)
-               ,interpolationFlagCF(0)
-               ,interpolationFlagFC(0)
-               ,level(level)
-               ,bundle(0)
-               ,lrank(-1)
-               ,localID(-1)
+               : x1(x1), x2(x2), x3(x3),
+               rank(0),part(0),
+               level(level), bundle(0)
+               
 {
    globalID = counter++;
 }
 //////////////////////////////////////////////////////////////////////////
 Block3D::~Block3D()
-{
-}
+= default;
 //////////////////////////////////////////////////////////////////////////
 bool Block3D::operator==(const Block3D& src) const
 {
@@ -521,7 +502,7 @@ void Block3D::addWeight( int rank, int weight )
 //////////////////////////////////////////////////////////////////////////
 void Block3D::addWeightForAll( int weight )
 {
-   typedef std::map<int, int> wMap;
+   using wMap = std::map<int, int>;
    for (wMap::value_type &w : this->weight)
    {
       w.second += weight;
diff --git a/src/cpu/VirtualFluidsCore/Grid/Block3D.h b/src/cpu/VirtualFluidsCore/Grid/Block3D.h
index 674517f187e61bc29daa753464f8b6c97525aa27..0912f82ace8aed11bb04be55d08e0c579b1c63df 100644
--- a/src/cpu/VirtualFluidsCore/Grid/Block3D.h
+++ b/src/cpu/VirtualFluidsCore/Grid/Block3D.h
@@ -47,7 +47,7 @@ class ILBMKernel;
 class Block3D
 {
 public:
-   Block3D();
+   Block3D() = default;
    Block3D(int x1, int x2, int x3, int level);
    virtual ~Block3D();
    bool operator==(const Block3D& src) const;
@@ -137,29 +137,29 @@ public:
    std::string toString() ;
 
    static int getMaxGlobalID() { return counter; }
-   static void setMaxGlobalID(int c) { counter = 0; }
+   static void setMaxGlobalID(int  /*c*/) { counter = 0; } // FIXME ???
 
 private:
-  int   x1;
-  int   x2;
-  int   x3;
+  int   x1{0};
+  int   x2{0};
+  int   x3{0};
 
-  bool active;
+  bool active{true};
 
-  int interpolationFlagCF;
-  int interpolationFlagFC;
+  int interpolationFlagCF{0};
+  int interpolationFlagFC{0};
 
   SPtr<LBMKernel> kernel;
   std::vector<SPtr<Block3DConnector> > connectors;
   std::map<int, int> weight;
 
-  int bundle;
-  int rank;
-  int lrank;
-  int globalID;
-  int localID;
-  int part;
-  int level;
+  int bundle{-1};
+  int rank{-1};
+  int lrank{-1};
+  int globalID{-1};
+  int localID{-1};
+  int part{-1};
+  int level{-1};
   static int counter;
 
 };
diff --git a/src/cpu/VirtualFluidsCore/Grid/Calculator.cpp b/src/cpu/VirtualFluidsCore/Grid/Calculator.cpp
index 9a314f0668da70149023c56ed4e458aee969244e..5fc3f8d42117876076e7c5e0185f3815346c6ab6 100644
--- a/src/cpu/VirtualFluidsCore/Grid/Calculator.cpp
+++ b/src/cpu/VirtualFluidsCore/Grid/Calculator.cpp
@@ -76,9 +76,7 @@ Calculator::Calculator(SPtr<Grid3D> grid, SPtr<UbScheduler> additionalGhostLayer
 }
 //////////////////////////////////////////////////////////////////////////
 Calculator::~Calculator()
-{
-
-}
+= default;
 //////////////////////////////////////////////////////////////////////////
 void Calculator::addCoProcessor(SPtr<CoProcessor> coProcessor)
 {
@@ -154,9 +152,9 @@ void Calculator::initRemoteConnectors()
       initConnectors(remoteConns[l]);
       if (l != maxLevel)
       {
-		 for(int i = 0; i < remoteInterConnsCF[l].size(); i++)
+		 for(size_t i = 0; i < remoteInterConnsCF[l].size(); i++)
 			remoteInterConns[l].push_back(remoteInterConnsCF[l][i]);
-		 for(int i = 0; i < remoteInterConnsFC[l+1].size(); i++)
+		 for(size_t i = 0; i < remoteInterConnsFC[l+1].size(); i++)
 	      remoteInterConns[l].push_back(remoteInterConnsFC[l+1][i]);
       }
    }
diff --git a/src/cpu/VirtualFluidsCore/Grid/Grid3D.cpp b/src/cpu/VirtualFluidsCore/Grid/Grid3D.cpp
index c80f0b7d87c09d9d5c3c20a3fd7c43e7e31337cf..3cb76a8b263be5fe02d3c1667b9c8b8368147b50 100644
--- a/src/cpu/VirtualFluidsCore/Grid/Grid3D.cpp
+++ b/src/cpu/VirtualFluidsCore/Grid/Grid3D.cpp
@@ -49,38 +49,14 @@
 
 using namespace std;
 
-Grid3D::Grid3D() :
-   rank(0),
-   bundle(0),
-   orgDeltaX(1.0),
-   periodicX1(false),
-   periodicX2(false),
-   periodicX3(false),
-   timeStep(0.0),
-   blockNx1(0),
-   blockNx2(0),
-   blockNx3(0),
-   nx1(0),
-   nx2(0),
-   nx3(0)
+Grid3D::Grid3D() 
+   
 {
    levelSet.resize(Grid3DSystem::MAXLEVEL + 1);
 }
 //////////////////////////////////////////////////////////////////////////
-Grid3D::Grid3D(SPtr<Communicator> comm) :
-   rank(0),
-   bundle(0),
-   orgDeltaX(1.0),
-   periodicX1(false),
-   periodicX2(false),
-   periodicX3(false),
-   timeStep(0.0),
-   blockNx1(0),
-   blockNx2(0),
-   blockNx3(0),
-   nx1(0),
-   nx2(0),
-   nx3(0)
+Grid3D::Grid3D(SPtr<Communicator> comm) 
+   
 {
    levelSet.resize(Grid3DSystem::MAXLEVEL + 1);
    bundle = comm->getBundleID();
@@ -88,13 +64,7 @@ Grid3D::Grid3D(SPtr<Communicator> comm) :
 }
 //////////////////////////////////////////////////////////////////////////
 Grid3D::Grid3D(SPtr<Communicator> comm, int blockNx1, int blockNx2, int blockNx3, int gridNx1, int gridNx2, int gridNx3) :
-   rank(0),
-   bundle(0),
-   orgDeltaX(1.0),
-   periodicX1(false),
-   periodicX2(false),
-   periodicX3(false),
-   timeStep(0.0),
+   
    blockNx1(blockNx1),
    blockNx2(blockNx2),
    blockNx3(blockNx2),
@@ -105,7 +75,7 @@ Grid3D::Grid3D(SPtr<Communicator> comm, int blockNx1, int blockNx2, int blockNx3
    levelSet.resize(Grid3DSystem::MAXLEVEL + 1);
    bundle = comm->getBundleID();
    rank = comm->getProcessID();
-   trafo = SPtr<CoordinateTransformation3D>(new CoordinateTransformation3D(0.0, 0.0, 0.0, (double)blockNx1, (double)blockNx2, (double)blockNx3));
+   trafo = std::make_shared<CoordinateTransformation3D>(0.0, 0.0, 0.0, (double)blockNx1, (double)blockNx2, (double)blockNx3);
    UbTupleInt3 minInd(0, 0, 0);
    UbTupleInt3 maxInd(gridNx1, gridNx2, gridNx3);
    this->fillExtentWithBlocks(minInd, maxInd);
@@ -354,14 +324,14 @@ bool Grid3D::expandBlock(int ix1, int ix2, int ix3, int level)
    int bottom = ix3 << 1;
    int top = bottom + 1;
 
-   SPtr<Block3D> blockBSW = SPtr<Block3D>(new Block3D(west, south, bottom, l));
-   SPtr<Block3D> blockBSE = SPtr<Block3D>(new Block3D(east, south, bottom, l));
-   SPtr<Block3D> blockBNW = SPtr<Block3D>(new Block3D(west, north, bottom, l));
-   SPtr<Block3D> blockBNE = SPtr<Block3D>(new Block3D(east, north, bottom, l));
-   SPtr<Block3D> blockTSW = SPtr<Block3D>(new Block3D(west, south, top, l));
-   SPtr<Block3D> blockTSE = SPtr<Block3D>(new Block3D(east, south, top, l));
-   SPtr<Block3D> blockTNW = SPtr<Block3D>(new Block3D(west, north, top, l));
-   SPtr<Block3D> blockTNE = SPtr<Block3D>(new Block3D(east, north, top, l));
+   auto blockBSW = std::make_shared<Block3D>(west, south, bottom, l);
+   auto blockBSE = std::make_shared<Block3D>(east, south, bottom, l);
+   auto blockBNW = std::make_shared<Block3D>(west, north, bottom, l);
+   auto blockBNE = std::make_shared<Block3D>(east, north, bottom, l);
+   auto blockTSW = std::make_shared<Block3D>(west, south, top, l);
+   auto blockTSE = std::make_shared<Block3D>(east, south, top, l);
+   auto blockTNW = std::make_shared<Block3D>(west, north, top, l);
+   auto blockTNE = std::make_shared<Block3D>(east, north, top, l);
 
    if (!this->deleteBlock(ix1, ix2, ix3, level))
       throw UbException(UB_EXARGS, "could not delete block");
@@ -429,7 +399,7 @@ SPtr<Block3D> Grid3D::collapseBlock(int fix1, int fix2, int fix3, int flevel, in
    /*TNE*/fineBlocks[6] = this->getBlock(fx1[1], fx2[1], fx3[1], flevel);
    /*TNW*/fineBlocks[7] = this->getBlock(fx1[0], fx2[1], fx3[1], flevel);
 
-   SPtr<Block3D> cblock = SPtr<Block3D>(new Block3D(cix1, cix2, cix3, clevel));
+   auto cblock = std::make_shared<Block3D>(cix1, cix2, cix3, clevel);
 
    for (int i = 0; i < 2; i++)
       for (int k = 0; k < 2; k++)
@@ -651,11 +621,12 @@ UbTupleDouble3 Grid3D::getBlockWorldCoordinates(int blockX1Index, int blockX2Ind
    double x2 = (double)blockX2Index * c1oShiftedLevel;
    double x3 = (double)blockX3Index * c1oShiftedLevel;
 
-   if (!trafo) return UbTupleDouble3(x1, x2, x3);
+   if (!trafo)
+       return { x1, x2, x3 };
 
-   return UbTupleDouble3(trafo->transformBackwardToX1Coordinate(x1, x2, x3)
+   return {trafo->transformBackwardToX1Coordinate(x1, x2, x3)
       , trafo->transformBackwardToX2Coordinate(x1, x2, x3)
-      , trafo->transformBackwardToX3Coordinate(x1, x2, x3));
+      , trafo->transformBackwardToX3Coordinate(x1, x2, x3) };
 }
 //////////////////////////////////////////////////////////////////////////
 //double Grid3D::getDeltaT(SPtr<Block3D> block) const 
diff --git a/src/cpu/VirtualFluidsCore/Grid/Grid3D.h b/src/cpu/VirtualFluidsCore/Grid/Grid3D.h
index 77e250439bfe2a3207b49b9e2e7ad59ad7e33ba7..c91dca4a0410cf2cffaeebfd2ce8cf46173860de 100644
--- a/src/cpu/VirtualFluidsCore/Grid/Grid3D.h
+++ b/src/cpu/VirtualFluidsCore/Grid/Grid3D.h
@@ -59,17 +59,17 @@ class Interactor3D;
 class Grid3D : public enableSharedFromThis<Grid3D>
 {
 public:
-   typedef UbKeys::Key3<int>                  Block3DKey;
-   typedef std::map< Block3DKey, SPtr<Block3D> > Block3DMap;
-   typedef std::map< int, SPtr<Block3D> >    BlockIDMap;
-   typedef std::vector<Block3DMap>        LevelSet;
-   typedef std::vector<SPtr<Interactor3D> >   Interactor3DSet;
+   using Block3DKey = UbKeys::Key3<int>;
+   using Block3DMap = std::map<Block3DKey, SPtr<Block3D> >;
+   using BlockIDMap = std::map<int, SPtr<Block3D> >;
+   using LevelSet = std::vector<Block3DMap>;
+   using Interactor3DSet = std::vector<SPtr<Interactor3D> >;
 
 public:
    Grid3D();
    Grid3D(SPtr<Communicator> comm);
    Grid3D(SPtr<Communicator> comm, int blockNx1, int blockNx2, int blockNx3, int gridNx1, int gridNx2, int gridNx3);
-   virtual ~Grid3D(){}
+   virtual ~Grid3D() = default;
    //////////////////////////////////////////////////////////////////////////
    //blocks control
    void addBlock(SPtr<Block3D> block);
@@ -252,25 +252,25 @@ private:
    BlockIDMap blockIdMap;
    Interactor3DSet interactors;
 
-   int rank;
-   int bundle;
+   int rank{0};
+   int bundle{0};
    
-   bool periodicX1;
-   bool periodicX2;
-   bool periodicX3;
+   bool periodicX1{false};
+   bool periodicX2{false};
+   bool periodicX3{false};
 
-   int blockNx1;    
-   int blockNx2;    
-   int blockNx3; 
+   int blockNx1{0};    
+   int blockNx2{0};    
+   int blockNx3{0}; 
 
-   int nx1;    
-   int nx2;    
-   int nx3;    
+   int nx1{0};    
+   int nx2{0};    
+   int nx3{0};    
 
    SPtr<CoordinateTransformation3D> trafo;
-   double orgDeltaX;
+   double orgDeltaX{1.0};
 
-   double timeStep;
+   double timeStep{0.0};
    
 };
 
diff --git a/src/cpu/VirtualFluidsCore/Interactors/D3Q27Interactor.cpp b/src/cpu/VirtualFluidsCore/Interactors/D3Q27Interactor.cpp
index 7e5b482297cbdff20fea571339e9f91682eef7f6..bc77cedde86a4aa83bb1328cad15a3e72f71af31 100644
--- a/src/cpu/VirtualFluidsCore/Interactors/D3Q27Interactor.cpp
+++ b/src/cpu/VirtualFluidsCore/Interactors/D3Q27Interactor.cpp
@@ -84,9 +84,7 @@ D3Q27Interactor::D3Q27Interactor(SPtr<GbObject3D> geoObject3D, SPtr<Grid3D> grid
 }
 //////////////////////////////////////////////////////////////////////////
 D3Q27Interactor::~D3Q27Interactor()
-{
-
-}
+= default;
 //////////////////////////////////////////////////////////////////////////
 void D3Q27Interactor::initRayVectors()
 {
@@ -324,7 +322,7 @@ bool D3Q27Interactor::setDifferencesToGbObject3D(const SPtr<Block3D> block)
                            bc = bcArray->getBC(ix1,ix2,ix3);
                            if(!bc)
                            {
-                              bc = SPtr<BoundaryConditions>(new BoundaryConditions);
+                              bc = std::make_shared<BoundaryConditions>();
                               bcArray->setBC(ix1,ix2,ix3,bc);
                            }
 
@@ -469,7 +467,7 @@ bool D3Q27Interactor::setDifferencesToGbObject3D(const SPtr<Block3D> block)
                               bc = bcArray->getBC(ix1,ix2,ix3);
                               if(!bc)
                               {
-                                 bc = SPtr<BoundaryConditions>(new BoundaryConditions);
+                                 bc = std::make_shared<BoundaryConditions>();
                                  bcArray->setBC(ix1,ix2,ix3,bc);
                               }
                               for(int index=(int)bcAdapters.size()-1; index>=0; --index)
diff --git a/src/cpu/VirtualFluidsCore/Interactors/D3Q27Interactor.h b/src/cpu/VirtualFluidsCore/Interactors/D3Q27Interactor.h
index 6ecb10f02c86af013d6102e5a698486084bb8e67..d0c16b2a5799dab42788b1ec3f11c2cd3549a8ed 100644
--- a/src/cpu/VirtualFluidsCore/Interactors/D3Q27Interactor.h
+++ b/src/cpu/VirtualFluidsCore/Interactors/D3Q27Interactor.h
@@ -53,8 +53,8 @@ class Block3D;
 class Grid3D;
 class GbObject3D;
 
-typedef std::map<SPtr<Block3D>, std::set< std::vector<int> > > BcNodeIndicesMap;
-typedef std::map<SPtr<Block3D>, std::set< UbTupleInt3 > > SolidNodeIndicesMap;
+using BcNodeIndicesMap = std::map<SPtr<Block3D>, std::set< std::vector<int> > >;
+using SolidNodeIndicesMap = std::map<SPtr<Block3D>, std::set<UbTupleInt3> >;
 
 //! \brief A specialized class for grid generation.
 //! \details Support standard geometric primitives.
@@ -66,7 +66,7 @@ public:
    D3Q27Interactor(SPtr<GbObject3D> geoObject3D, SPtr<Grid3D> grid, SPtr<BCAdapter> bcAdapter,  int type);
    D3Q27Interactor(SPtr<GbObject3D> geoObject3D, SPtr<Grid3D> grid, SPtr<BCAdapter> bcAdapter,  int type, Interactor3D::Accuracy a);
 
-   virtual ~D3Q27Interactor();
+   ~D3Q27Interactor() override;
 
    void setRelevantForForces(const bool& value) {  this->relevantForForces = value; }
    bool isRelevantForForces() { return this->relevantForForces; }
@@ -75,15 +75,15 @@ public:
    void deleteBCAdapter() { bcAdapters.clear(); }
 
  
-   virtual void initInteractor(const double& timeStep=0);
-   void updateInteractor(const double& timestep=0); 
+   void initInteractor(const double& timeStep=0) override;
+   void updateInteractor(const double& timestep=0) override; 
 
    void setReinitWithStoredQs(bool reinitWithStoredQsFlag) { this->reinitWithStoredQsFlag = reinitWithStoredQsFlag; }
    
-   void removeSolidBlocks() { Interactor3D::removeSolidBlocks(); solidNodeIndicesMap.clear(); }
-   void removeBcBlocks() { Interactor3D::removeBcBlocks(); bcNodeIndicesMap.clear(); }
+   void removeSolidBlocks() override { Interactor3D::removeSolidBlocks(); solidNodeIndicesMap.clear(); }
+   void removeBcBlocks() override { Interactor3D::removeBcBlocks(); bcNodeIndicesMap.clear(); }
 
-   bool setDifferencesToGbObject3D(const SPtr<Block3D> block);
+   bool setDifferencesToGbObject3D(const SPtr<Block3D> block) override;
 
    ObObject* clone() { throw UbException(UB_EXARGS,"not implemented");	}
 
diff --git a/src/cpu/VirtualFluidsCore/Interactors/Interactor3D.cpp b/src/cpu/VirtualFluidsCore/Interactors/Interactor3D.cpp
index c05fc12ef3af5e50ee562423efd1ee703bf57740..0899c8634a887c9e9af36c40830c1d3b1dcab347 100644
--- a/src/cpu/VirtualFluidsCore/Interactors/Interactor3D.cpp
+++ b/src/cpu/VirtualFluidsCore/Interactors/Interactor3D.cpp
@@ -86,8 +86,7 @@ Interactor3D::Interactor3D(SPtr<GbObject3D> geoObject3D, SPtr<Grid3D> grid, int
 }
 //////////////////////////////////////////////////////////////////////////
 Interactor3D::~Interactor3D()
-{
-}
+= default;
 //////////////////////////////////////////////////////////////////////////
 bool Interactor3D::arePointsInsideGeoObject(double minX1, double minX2, double minX3, double maxX1, double maxX2, double maxX3, double delta)
 {
@@ -327,7 +326,7 @@ bool Interactor3D::isActive()
    return active;
 }
 //////////////////////////////////////////////////////////////////////////
-void Interactor3D::initInteractor(const double& timeStep)
+void Interactor3D::initInteractor(const double&  /*timeStep*/)
 {
    //UBLOG(logINFO, "transBlocks.size = "<<transBlocks.size());
 
@@ -337,7 +336,7 @@ void Interactor3D::initInteractor(const double& timeStep)
    }
 }
 //////////////////////////////////////////////////////////////////////////
-void Interactor3D::updateInteractor(const double& timeStep)
+void Interactor3D::updateInteractor(const double&  /*timeStep*/)
 {
    UB_THROW( UbException("Interactor3D::updateInteractor - toDo") );
 }
diff --git a/src/cpu/VirtualFluidsCore/Interactors/Interactor3D.h b/src/cpu/VirtualFluidsCore/Interactors/Interactor3D.h
index abfffbd316bcb17723a788b41728095fed83940d..ef7ac33dbbd1e34fa8518d3f719ccf0b8841bdf5 100644
--- a/src/cpu/VirtualFluidsCore/Interactors/Interactor3D.h
+++ b/src/cpu/VirtualFluidsCore/Interactors/Interactor3D.h
@@ -76,7 +76,7 @@ public:
    SPtr<Grid3D> getGrid3D()  const { return grid.lock();   }
    void setGrid3D(SPtr<Grid3D> grid) { this->grid = grid; }
    virtual SPtr<GbObject3D>  getGbObject3D() const { return geoObject3D; }
-   virtual bool setDifferencesToGbObject3D(const SPtr<Block3D> block/*, const double& x1, const double& x2, const double& x3, const double& blockLengthX1, const double& blockLengthX2, const double& blockLengthX3, const double& timestep=0*/)
+   virtual bool setDifferencesToGbObject3D(const SPtr<Block3D>  /*block*//*, const double& x1, const double& x2, const double& x3, const double& blockLengthX1, const double& blockLengthX2, const double& blockLengthX3, const double& timestep=0*/)
    {
       //UBLOG(logINFO, "Interactor3D::setDifferencesToGbObject3D()");
       return false;  
diff --git a/src/cpu/VirtualFluidsCore/Interactors/InteractorsHelper.cpp b/src/cpu/VirtualFluidsCore/Interactors/InteractorsHelper.cpp
index 354bdd4a9b3bc6ba3450ae7fa0ccb9d524686c27..29ccab6babf4eae939b86fd06e96a5828ffdbfe7 100644
--- a/src/cpu/VirtualFluidsCore/Interactors/InteractorsHelper.cpp
+++ b/src/cpu/VirtualFluidsCore/Interactors/InteractorsHelper.cpp
@@ -49,9 +49,7 @@ InteractorsHelper::InteractorsHelper(SPtr<Grid3D> grid, SPtr<Grid3DVisitor> visi
 }
 //////////////////////////////////////////////////////////////////////////
 InteractorsHelper::~InteractorsHelper()
-{
-
-}
+= default;
 //////////////////////////////////////////////////////////////////////////
 void InteractorsHelper::addInteractor( SPtr<Interactor3D> interactor )
 {
diff --git a/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernel.cpp b/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernel.cpp
index 92387c298e6f45186c813ff0f321a1898da01837..77226bd240f1a113372a8fba6f702fa2ad769e9e 100644
--- a/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernel.cpp
+++ b/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernel.cpp
@@ -34,7 +34,7 @@
 #include "CumulantK17LBMKernel.h"
 #include "D3Q27System.h"
 #include "D3Q27EsoTwist3DSplittedVector.h"
-#include <math.h>
+#include <cmath>
 #include "DataSet3D.h"
 #include "LBMKernel.h"
 #include "Block3D.h"
@@ -51,9 +51,7 @@ CumulantK17LBMKernel::CumulantK17LBMKernel()
 }
 //////////////////////////////////////////////////////////////////////////
 CumulantK17LBMKernel::~CumulantK17LBMKernel(void)
-{
-
-}
+= default;
 //////////////////////////////////////////////////////////////////////////
 void CumulantK17LBMKernel::initDataSet()
 {
diff --git a/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernel.h b/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernel.h
index 1958b39d812695033ec395964236b1c7f9ce2e84..96062021abc966db801e5a131bf06f24abec2cf4 100644
--- a/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernel.h
+++ b/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernel.h
@@ -52,10 +52,10 @@ class CumulantK17LBMKernel : public LBMKernel
 {
 public:
    CumulantK17LBMKernel();
-   virtual ~CumulantK17LBMKernel(void);
-   virtual void calculate(int step);
-   virtual SPtr<LBMKernel> clone();
-   virtual double getCalculationTime() { return .0; }
+   virtual ~CumulantK17LBMKernel() override;
+   void calculate(int step) override;
+   SPtr<LBMKernel> clone() override;
+   double getCalculationTime() override { return .0; }
 
 protected:
    inline void forwardInverseChimeraWithK(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2, LBMReal Kinverse, LBMReal K);
diff --git a/src/cpu/VirtualFluidsCore/LBM/LBMKernel.cpp b/src/cpu/VirtualFluidsCore/LBM/LBMKernel.cpp
index ec1bb4049181b613542fc66953a8f0e34859182a..7004a4d734c5aff518148631d5881fc0ba0a7f8b 100644
--- a/src/cpu/VirtualFluidsCore/LBM/LBMKernel.cpp
+++ b/src/cpu/VirtualFluidsCore/LBM/LBMKernel.cpp
@@ -37,16 +37,13 @@
 #include "Block3D.h"
 #include "BCArray3D.h"
 
-LBMKernel::LBMKernel() : ghostLayerWidth(1),
-                             deltaT(1.0),
-                             withForcing(false),
-                             withSpongeLayer(false),
-                             compressible(false)
+LBMKernel::LBMKernel() 
+                             
 {
    this->setForcingX1(0.0);
    this->setForcingX2(0.0);
    this->setForcingX3(0.0);
-   dataSet = SPtr<DataSet3D>(new DataSet3D());
+   dataSet = std::make_shared<DataSet3D>();
    this->nx[0] = 0;
    this->nx[1] = 0;
    this->nx[2] = 0;
diff --git a/src/cpu/VirtualFluidsCore/LBM/LBMKernel.h b/src/cpu/VirtualFluidsCore/LBM/LBMKernel.h
index 91d213fc8549c0c926f8479b224b1183639baa27..1b2326374ec0b49bd19f540f6c9572266c2a3d0c 100644
--- a/src/cpu/VirtualFluidsCore/LBM/LBMKernel.h
+++ b/src/cpu/VirtualFluidsCore/LBM/LBMKernel.h
@@ -49,7 +49,7 @@ class Block3D;
 class LBMKernel : public ILBMKernel, public enableSharedFromThis<LBMKernel>
 {
 public:
-    typedef std::numeric_limits<LBMReal> LBMRealLim;
+    using LBMRealLim = std::numeric_limits<LBMReal>;
 public:
     LBMKernel();
 
@@ -113,19 +113,19 @@ protected:
     SPtr<DataSet3D> dataSet;
     SPtr<BCProcessor> bcProcessor;
     LBMReal collFactor;
-    int ghostLayerWidth;
-    bool compressible;
+    int ghostLayerWidth{1};
+    bool compressible{false};
 
     //forcing 
-    bool withForcing;
+    bool withForcing{false};
     mu::Parser muForcingX1;
     mu::Parser muForcingX2;
     mu::Parser muForcingX3;
     int ix1, ix2, ix3;
-    LBMReal deltaT;
+    LBMReal deltaT{1.0};
 
     //sponge layer
-    bool withSpongeLayer;
+    bool withSpongeLayer{false};
     mu::Parser muSpongeLayer;
 
     WPtr<Block3D> block;
diff --git a/src/cpu/VirtualFluidsCore/LBM/LBMSystem.h b/src/cpu/VirtualFluidsCore/LBM/LBMSystem.h
index 49a82b3938f9ceebc6239fd033b7c6d30373cd60..7b016a3b75675d9551d62c111e60364385c95493 100644
--- a/src/cpu/VirtualFluidsCore/LBM/LBMSystem.h
+++ b/src/cpu/VirtualFluidsCore/LBM/LBMSystem.h
@@ -49,7 +49,7 @@ namespace LBMSystem
    typedef float real;
    #define REAL_CAST(x) ( (LBMSystem::real)(x) )
 #else
-   typedef double real;
+   using real = double;
    #define REAL_CAST(x) ( x )
 #endif
 
@@ -89,7 +89,7 @@ namespace LBMSystem
 }
 
 //some typedefs for global namespace
-typedef LBMSystem::real LBMReal;
+using LBMReal = LBMSystem::real;
 
 #endif
 
diff --git a/src/cpu/VirtualFluidsCore/LBM/LBMUnitConverter.h b/src/cpu/VirtualFluidsCore/LBM/LBMUnitConverter.h
index b65ebd7b3d381518f07dc7a72341d7644a03a1ef..7e1e31f145ff816fbd1ba201e61f5590f02b60c7 100644
--- a/src/cpu/VirtualFluidsCore/LBM/LBMUnitConverter.h
+++ b/src/cpu/VirtualFluidsCore/LBM/LBMUnitConverter.h
@@ -33,17 +33,7 @@ public:
 
    enum WORLD_MATERIAL { WATER  = 0, SEAWWATER  = 1, AIR_20C  = 2, OIL  = 3  }; 
 
-   LBMUnitConverter() :  factorLengthLbToW(1.0),
-                         factorTimeLbToW(1.0),
-                         factorMassLbToW(1.0), 
-                         refRhoLb(1.0),
-                         factorVelocityLbToW(1.0), 
-                         factorViscosityLbToW(1.0),
-                         factorDensityLbToW(1.0),
-                         factorPressureLbToW(1.0)
-   {
-
-   }
+   LBMUnitConverter() = default;
 
    LBMUnitConverter(   const double& refLengthWorld, const double& csWorld, const double& rhoWorld
       , const double& refLengthLb   , const double& csLb = 1.0/std::sqrt(3.0)  , const double& rhoLb = 1.0   )
@@ -76,7 +66,7 @@ public:
       factorPressureLbToW = factorDensityLbToW;
    }
 
-   virtual ~LBMUnitConverter() {}
+   virtual ~LBMUnitConverter() = default;
 
    double  getRefRhoLb()             { return refRhoLb; }
 
@@ -170,7 +160,7 @@ public:
 
 
 
-   void init(  const double& refLengthWorld, const double& csWorld, const double& rhoWorld, const double& vWorld, 
+   void init(  const double& refLengthWorld, const double&  /*csWorld*/, const double& rhoWorld, const double& vWorld, 
                const double& refLengthLb, const double& rhoLb, const double& vLb  )
    {
       factorLengthLbToW = refLengthWorld / refLengthLb;
@@ -180,16 +170,16 @@ public:
       this->refRhoLb = rhoLb;
    }
    protected:
-   double factorLengthLbToW;
-   double factorTimeLbToW;
-   double factorMassLbToW;
-   double refRhoLb;
-   double factorTimeWithoutDx;
+   double factorLengthLbToW{1.0};
+   double factorTimeLbToW{1.0};
+   double factorMassLbToW{1.0};
+   double refRhoLb{1.0};
+   double factorTimeWithoutDx{0.0};
    
-   double factorVelocityLbToW;
-   double factorViscosityLbToW;
-   double factorDensityLbToW;
-   double factorPressureLbToW;
+   double factorVelocityLbToW{1.0};
+   double factorViscosityLbToW{1.0};
+   double factorDensityLbToW{1.0};
+   double factorPressureLbToW{1.0};
 
 };
 
diff --git a/src/cpu/VirtualFluidsCore/Parallel/Communicator.h b/src/cpu/VirtualFluidsCore/Parallel/Communicator.h
index 69c90125bd7cd35836a6486b3197cd4eb1bf266e..1ab893e56196a37c20622b8cf985babee02ca8d0 100644
--- a/src/cpu/VirtualFluidsCore/Parallel/Communicator.h
+++ b/src/cpu/VirtualFluidsCore/Parallel/Communicator.h
@@ -43,7 +43,7 @@
 class Communicator
 {
 public:
-   virtual ~Communicator(){}
+   virtual ~Communicator()= default;
    static SPtr<Communicator> getInstance();
    virtual int getBundleID() = 0;
    virtual int getNumberOfBundles() = 0;
@@ -83,8 +83,8 @@ public:
    virtual void broadcast(std::vector<double>& values) = 0;
    virtual void broadcast(std::vector<long int>& values) = 0;
 protected:
-   Communicator(){}
-   Communicator( const Communicator& ){}
+   Communicator()= default;
+   Communicator( const Communicator& )= default;
    static SPtr<Communicator> instance;
 };
 
diff --git a/src/cpu/VirtualFluidsCore/Parallel/NullCommunicator.cpp b/src/cpu/VirtualFluidsCore/Parallel/NullCommunicator.cpp
index 5e3bcf132065e766b50e2deb5b028561a8d39335..384f39b3d42338174c73bd0bb182e28e17f32f50 100644
--- a/src/cpu/VirtualFluidsCore/Parallel/NullCommunicator.cpp
+++ b/src/cpu/VirtualFluidsCore/Parallel/NullCommunicator.cpp
@@ -35,12 +35,10 @@
 
 
 NullCommunicator::NullCommunicator()
-{
-}
+= default;
 //////////////////////////////////////////////////////////////////////////
 NullCommunicator::~NullCommunicator()
-{
-}
+= default;
 //////////////////////////////////////////////////////////////////////////
 int NullCommunicator::getBundleID() 
 {
diff --git a/src/cpu/VirtualFluidsCore/Utilities/MemoryUtil.h b/src/cpu/VirtualFluidsCore/Utilities/MemoryUtil.h
index 1102acac0d6c0fc761204ebb5e2463d00299e145..863b4d4f1ce0fbee66ef43a43d0edb5443e2450f 100644
--- a/src/cpu/VirtualFluidsCore/Utilities/MemoryUtil.h
+++ b/src/cpu/VirtualFluidsCore/Utilities/MemoryUtil.h
@@ -43,16 +43,16 @@
 #define MEMORYUTIL_APPLE
    #include "sys/types.h"
    #include "sys/sysctl.h"
-   #include "stdlib.h"
-   #include "stdio.h"
-   #include "string.h"
+   #include <cstdlib>
+   #include <cstdio>
+   #include <cstring>
 #elif (defined(__amd64) || defined(__amd64__) || defined(__unix__) || defined(__CYGWIN__)) && !defined(__AIX__)
    #define MEMORYUTIL_LINUX
    #include "sys/types.h"
    #include "sys/sysinfo.h"
-   #include "stdlib.h"
-   #include "stdio.h"
-   #include "string.h"
+   #include "cstdlib"
+   #include "cstdio"
+   #include "cstring"
 #else
    #error "MemoryUtil::UnknownMachine"
 #endif
diff --git a/src/cpu/VirtualFluidsCore/Visitors/Block3DVisitor.h b/src/cpu/VirtualFluidsCore/Visitors/Block3DVisitor.h
index f333f521c82a3398976d3b5e32b50a230e514728..e3ce942167e1377d0fd0172caa2fea8e7b6b4474 100644
--- a/src/cpu/VirtualFluidsCore/Visitors/Block3DVisitor.h
+++ b/src/cpu/VirtualFluidsCore/Visitors/Block3DVisitor.h
@@ -43,17 +43,13 @@ class Grid3D;
 class Block3DVisitor
 {
 public:
-   Block3DVisitor() : startLevel(-1), stopLevel(-1)
-   {
-   }
+   Block3DVisitor() = default;
 
    Block3DVisitor(int startLevel, int stopLevel) : startLevel(startLevel), stopLevel(stopLevel)
    {
    }
 
-	virtual ~Block3DVisitor()
-   {
-   }
+	virtual ~Block3DVisitor() = default;
 	
    virtual void visit(SPtr<Grid3D> grid, SPtr<Block3D> block) = 0;
    
@@ -63,8 +59,8 @@ public:
    void setStopLevel(int level);
 
 private:
-   int  startLevel;
-   int  stopLevel;
+   int  startLevel{-1};
+   int  stopLevel{-1};
 };
 //////////////////////////////////////////////////////////////////////////
 inline int  Block3DVisitor::getStartLevel() const
diff --git a/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitor.cpp b/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitor.cpp
index e75d09c2cb755204829bc277aba202a8f8f86079..7f1e57b2469e8aa2d051043740064f0e8c7d4bd8 100644
--- a/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitor.cpp
+++ b/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitor.cpp
@@ -49,9 +49,7 @@ Block3DVisitor(0, Grid3DSystem::MAXLEVEL)
 }
 //////////////////////////////////////////////////////////////////////////
 BoundaryConditionsBlockVisitor::~BoundaryConditionsBlockVisitor()
-{
-
-}
+= default;
 //////////////////////////////////////////////////////////////////////////
 void BoundaryConditionsBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block)
 {
diff --git a/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitor.h b/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitor.h
index 9bd52139b77b04d639a9b1ac4d3406d616897a9e..c7ea28e58237846b74c1cf6aa80563d4c20b6427 100644
--- a/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitor.h
+++ b/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitor.h
@@ -50,7 +50,7 @@ class BoundaryConditionsBlockVisitor : public Block3DVisitor
 {
 public:
    BoundaryConditionsBlockVisitor();
-   virtual ~BoundaryConditionsBlockVisitor();
+   ~BoundaryConditionsBlockVisitor() override;
    
       void visit(SPtr<Grid3D> grid, SPtr<Block3D> block) override;
    void addBC(SPtr<BCAdapter> bc);
diff --git a/src/cpu/VirtualFluidsCore/Visitors/GenBlocksGridVisitor.h b/src/cpu/VirtualFluidsCore/Visitors/GenBlocksGridVisitor.h
index e9f2670716dd0add52db6730ded0b2fb05d868b6..65db6fa109087b7121358f0c3227846dbb246326 100644
--- a/src/cpu/VirtualFluidsCore/Visitors/GenBlocksGridVisitor.h
+++ b/src/cpu/VirtualFluidsCore/Visitors/GenBlocksGridVisitor.h
@@ -48,9 +48,9 @@ class GenBlocksGridVisitor : public Grid3DVisitor
 {
 public:
    GenBlocksGridVisitor(SPtr<GbObject3D> boundingBox);
-   virtual ~GenBlocksGridVisitor(){}
+   ~GenBlocksGridVisitor() override= default;
 
-   void visit(SPtr<Grid3D> grid);
+   void visit(SPtr<Grid3D> grid) override;
 
 private:
    UbTupleInt3 minInd, maxInd;
diff --git a/src/cpu/VirtualFluidsCore/Visitors/Grid3DVisitor.h b/src/cpu/VirtualFluidsCore/Visitors/Grid3DVisitor.h
index 2d836daf77d2f180788d0090243b28f86f85f8cc..5484ac44202930eaeacde3e64ac20c2d6bccaabd 100644
--- a/src/cpu/VirtualFluidsCore/Visitors/Grid3DVisitor.h
+++ b/src/cpu/VirtualFluidsCore/Visitors/Grid3DVisitor.h
@@ -43,8 +43,8 @@ class Grid3D;
 class Grid3DVisitor
 {
 public:
-   Grid3DVisitor() {}
-   virtual ~Grid3DVisitor() {}
+   Grid3DVisitor() = default;
+   virtual ~Grid3DVisitor() = default;
 
    virtual void visit(SPtr<Grid3D> grid) = 0;
 };
diff --git a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitor.cpp b/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitor.cpp
index 4ba5de0ccfa5320ce3e1b66dbc3ce78d215460cf..055cf6a2ba68dce48c3bb49e3c1a94dc9a3c9748 100644
--- a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitor.cpp
+++ b/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitor.cpp
@@ -139,9 +139,8 @@ void InitDistributionsBlockVisitor::visit(const SPtr<Grid3D> grid, SPtr<Block3D>
    this->muVx3.DefineVar("x1",&x1); this->muVx3.DefineVar("x2",&x2); this->muVx3.DefineVar("x3",&x3);
    this->muRho.DefineVar("x1",&x1); this->muRho.DefineVar("x2",&x2); this->muRho.DefineVar("x3",&x3);
 
-   //Funktionszeiger
-   typedef void (*CalcFeqsFct)(LBMReal* const& /*feq[27]*/,const LBMReal& /*(d)rho*/,const LBMReal& /*vx1*/,const LBMReal& /*vx2*/,const LBMReal& /*vx3*/);
-   CalcFeqsFct   calcFeqsFct   = NULL;
+   using CalcFeqsFct = void (*)(LBMReal* const& /*feq[27]*/,const LBMReal& /*(d)rho*/,const LBMReal& /*vx1*/,const LBMReal& /*vx2*/,const LBMReal& /*vx3*/);
+   CalcFeqsFct calcFeqsFct   = NULL;
    
    LBMReal vx1,vx2,vx3,rho;
 
@@ -168,9 +167,9 @@ void InitDistributionsBlockVisitor::visit(const SPtr<Grid3D> grid, SPtr<Block3D>
 
       LBMReal f[D3Q27System::ENDF+1];
 
-      for(int ix3=0; ix3<bcArray->getNX3(); ix3++)
-         for(int ix2=0; ix2<bcArray->getNX2(); ix2++)
-            for(int ix1=0; ix1<bcArray->getNX1(); ix1++)
+      for(size_t ix3=0; ix3<bcArray->getNX3(); ix3++)
+         for(size_t ix2=0; ix2<bcArray->getNX2(); ix2++)
+            for(size_t ix1=0; ix1<bcArray->getNX1(); ix1++)
             {
                Vector3D coords = grid->getNodeCoordinates(block, ix1, ix2, ix3);
                x1 = coords[0];
diff --git a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitor.h b/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitor.h
index 1e7425796e7502b9caf7049141ffc37af051ae62..bddda7901b29995d6c38de764b737c1d6636b2d8 100644
--- a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitor.h
+++ b/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitor.h
@@ -63,7 +63,7 @@ class Block3D;
 class InitDistributionsBlockVisitor : public Block3DVisitor
 {
 public:
-   typedef std::numeric_limits<LBMReal> D3Q27RealLim;
+   using D3Q27RealLim = std::numeric_limits<LBMReal>;
 
 public:
    InitDistributionsBlockVisitor();
diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetBcBlocksBlockVisitor.h b/src/cpu/VirtualFluidsCore/Visitors/SetBcBlocksBlockVisitor.h
index 9836b61fb134ac27dbc183c2fb6f5ac984cba2d7..5db362a3b9f41ec59606374a7761da934b8f8f10 100644
--- a/src/cpu/VirtualFluidsCore/Visitors/SetBcBlocksBlockVisitor.h
+++ b/src/cpu/VirtualFluidsCore/Visitors/SetBcBlocksBlockVisitor.h
@@ -47,9 +47,9 @@ class SetBcBlocksBlockVisitor : public Block3DVisitor
 {
 public:
    SetBcBlocksBlockVisitor(SPtr<Interactor3D> interactor);
-   virtual ~SetBcBlocksBlockVisitor() {}
+   ~SetBcBlocksBlockVisitor() override = default;
 
-   virtual void visit(SPtr<Grid3D> grid, SPtr<Block3D> block);
+   void visit(SPtr<Grid3D> grid, SPtr<Block3D> block) override;
 
 private:
    SPtr<Interactor3D> interactor;
diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetConnectorsBlockVisitor.cpp b/src/cpu/VirtualFluidsCore/Visitors/SetConnectorsBlockVisitor.cpp
index ae9a00e2c954a8bb7a147afc73ffb816a5830ad6..52496aaf49cda98151480cea79024931caaf36e3 100644
--- a/src/cpu/VirtualFluidsCore/Visitors/SetConnectorsBlockVisitor.cpp
+++ b/src/cpu/VirtualFluidsCore/Visitors/SetConnectorsBlockVisitor.cpp
@@ -54,8 +54,7 @@ Block3DVisitor(0, Grid3DSystem::MAXLEVEL),
 }
 //////////////////////////////////////////////////////////////////////////
 SetConnectorsBlockVisitor::~SetConnectorsBlockVisitor(void)
-{
-}
+= default;
 //////////////////////////////////////////////////////////////////////////
 void SetConnectorsBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block)
 {
diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetConnectorsBlockVisitor.h b/src/cpu/VirtualFluidsCore/Visitors/SetConnectorsBlockVisitor.h
index 18d6b1f09a92fe45e47c7eeb4e8f777df821891b..7e7f13931b2d9ecf4200ed7987bb03ca04e5f9f4 100644
--- a/src/cpu/VirtualFluidsCore/Visitors/SetConnectorsBlockVisitor.h
+++ b/src/cpu/VirtualFluidsCore/Visitors/SetConnectorsBlockVisitor.h
@@ -51,7 +51,7 @@ class SetConnectorsBlockVisitor : public Block3DVisitor
 {
 public:
 	SetConnectorsBlockVisitor(SPtr<Communicator> comm, bool fullConnector, int dirs, LBMReal nue, SPtr<InterpolationProcessor> iProcessor);
-	virtual ~SetConnectorsBlockVisitor();
+	~SetConnectorsBlockVisitor() override;
 	void visit(SPtr<Grid3D> grid, SPtr<Block3D> block) override;
 	//////////////////////////////////////////////////////////////////////////
 protected:
diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitor.cpp b/src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitor.cpp
index 3209dbe06f1bd385883fc3bf6504cb74d4bc5bb3..d3ec9e85ec58b977008e6fee49e5c5b64786e3c4 100644
--- a/src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitor.cpp
+++ b/src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitor.cpp
@@ -33,6 +33,8 @@
 //=======================================================================================
 
 #include "SetKernelBlockVisitor.h"
+
+#include <utility>
 #include "Grid3DSystem.h"
 #include "LBMSystem.h"
 #include "DataSet3D.h"
@@ -45,7 +47,7 @@
 SetKernelBlockVisitor::SetKernelBlockVisitor(SPtr<LBMKernel> kernel, LBMReal nue, double availMem, double needMem,
                                              SetKernelBlockVisitor::Action action) : Block3DVisitor(0,
                                                                                                     Grid3DSystem::MAXLEVEL),
-                                                                                     kernel(kernel), nue(nue),
+                                                                                     kernel(std::move(kernel)), nue(nue),
                                                                                      action(action), dataSetFlag(true)
 {
     if (needMem > availMem)
diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitor.h b/src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitor.h
index 9be7bad9d48190d7c2840d62fe612befa18f4774..771eb66751e089a49cad06474175eac8df4af119 100644
--- a/src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitor.h
+++ b/src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitor.h
@@ -62,10 +62,9 @@ public:
     SetKernelBlockVisitor(SPtr<LBMKernel> kernel, LBMReal nue, int &numberOfProcesses,
                           SetKernelBlockVisitor::Action action = SetKernelBlockVisitor::NewKernel);
 
-    virtual ~SetKernelBlockVisitor()
-    {}
+    ~SetKernelBlockVisitor() override = default;
 
-    void visit(SPtr<Grid3D> grid, SPtr<Block3D> block) override;
+    void visit(SPtr<Grid3D> grid, SPtr<Block3D> block);
 
     void setNoDataSetFlag(bool flag);
 
diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetSolidBlocksBlockVisitor.cpp b/src/cpu/VirtualFluidsCore/Visitors/SetSolidBlocksBlockVisitor.cpp
index 5c3d0762f21e94ffb5dc95a5d192cd1b788c885d..de9edef09deb391a772651bb590f7bdbde703522 100644
--- a/src/cpu/VirtualFluidsCore/Visitors/SetSolidBlocksBlockVisitor.cpp
+++ b/src/cpu/VirtualFluidsCore/Visitors/SetSolidBlocksBlockVisitor.cpp
@@ -33,13 +33,15 @@
 
 #include "SetSolidBlocksBlockVisitor.h"
 
+#include <utility>
+
 #include "Interactor3D.h"
 #include "Grid3DSystem.h"
 #include "Grid3D.h"
 #include "Block3D.h"
 
 SetSolidBlocksBlockVisitor::SetSolidBlocksBlockVisitor(SPtr<Interactor3D> interactor) :
-   Block3DVisitor(0, Grid3DSystem::MAXLEVEL), interactor(interactor)
+   Block3DVisitor(0, Grid3DSystem::MAXLEVEL), interactor(std::move(interactor))
 {
 
 }
diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetSolidBlocksBlockVisitor.h b/src/cpu/VirtualFluidsCore/Visitors/SetSolidBlocksBlockVisitor.h
index 22945638d412253f2421394a3b4d12746bf77751..fe5456be9d021b5676aca18e97eb47af92188929 100644
--- a/src/cpu/VirtualFluidsCore/Visitors/SetSolidBlocksBlockVisitor.h
+++ b/src/cpu/VirtualFluidsCore/Visitors/SetSolidBlocksBlockVisitor.h
@@ -47,9 +47,9 @@ class SetSolidBlocksBlockVisitor : public Block3DVisitor
 {
 public:
    SetSolidBlocksBlockVisitor(SPtr<Interactor3D> interactor);
-   virtual ~SetSolidBlocksBlockVisitor() {}
+   ~SetSolidBlocksBlockVisitor() override = default;
 
-   virtual void visit(SPtr<Grid3D> grid, SPtr<Block3D> block);
+   void visit(SPtr<Grid3D> grid, SPtr<Block3D> block) override;
 
 private:
    SPtr<Interactor3D> interactor;