diff --git a/CMakeLists.txt b/CMakeLists.txt
index 01f46ac17ebe0a821ee6ba80489985591e604495..fbea2c2bdaca6f61428cffd6440d5eb3cddc0eaa 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -16,6 +16,9 @@ project(VirtualFluids CXX)
 set(CMAKE_CXX_STANDARD 14)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
+set(CMAKE_CUDA_STANDARD 14)
+set(CMAKE_CUDA_STANDARD_REQUIRED TRUE)
+
 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
 set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER ".cmake")
 set(libraryFolder "libs")
@@ -45,6 +48,7 @@ option(BUILD_SHARED_LIBS "" ON)
 if(POLICY CMP0104)
     cmake_policy(SET CMP0104 NEW)
     set(CMAKE_CUDA_ARCHITECTURES 30)
+    # with cuda 11 the minimum architecture is 52
 endif()
 
 #################################################################################
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 54a3e307b64c14de7f540ca1e04209e7624465b8..4bf538b84b0211ada593913a556f10be0d6ed608 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,5 +1,5 @@
-Contributing
-============
+# Contributing
+
 If you want to contribute to VirtualFluids, your help is very welcome.
 To contribute use a pull request as follows:
 
@@ -23,3 +23,19 @@ To contribute use a pull request as follows:
 your extra branch(es).
 
 And last but not least: Always write your commit messages in the present tense. Your commit message should describe what the commit, when applied, does to the code – not what you did to the code.
+
+## Documentation
+
+To build sustainable research software, it is mandatory to document code. 
+Even if it turns out that some developments are not continued, documentation is important to help future scientists to learn from the own experiences.  
+
+The documentation of the source code takes place…
+
+- in commit messages  
+  - As it is possible to put all the information into the commit messages, we want to keep the messages short and on a higher level of abstraction.
+  - The commit message should briefly summarize what the commit does to the code. 
+
+- in source code
+  - VirtualFluids is using Doxygen to generate Documentation from within the source code
+   - In most of the cases comment should describe ***why*** something was implemented and not ***how***.
+   - if available add formulars, references to scripts, paper, and all information you got linked to the implemented code
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAlgorithm.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAlgorithm.cpp
index 342f2114309d0ed272aeda2fb17b77d763d9c58e..595907b5982ff6c1c1f53257b0850fd72450d798 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAlgorithm.cpp
+++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAlgorithm.cpp
@@ -74,7 +74,7 @@ void VelocityBCAlgorithm::applyBC()
          const int invDir = D3Q27System::INVDIR[fdir];
          LBMReal q = bcPtr->getQ(invDir);
          LBMReal velocity = bcPtr->getBoundaryVelocity(invDir);
-         LBMReal fReturn = f[invDir] - velocity;
+         LBMReal fReturn = f[invDir] - velocity; // TODO: compare with development
          distributions->setDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);
       }
    }
diff --git a/src/cpu/VirtualFluidsCore/Interactors/D3Q27Interactor.h b/src/cpu/VirtualFluidsCore/Interactors/D3Q27Interactor.h
index fd232ff9a6e37694e04a1b81118bd90f3e7b47e6..6ecb10f02c86af013d6102e5a698486084bb8e67 100644
--- a/src/cpu/VirtualFluidsCore/Interactors/D3Q27Interactor.h
+++ b/src/cpu/VirtualFluidsCore/Interactors/D3Q27Interactor.h
@@ -87,7 +87,6 @@ public:
 
    ObObject* clone() { throw UbException(UB_EXARGS,"not implemented");	}
 
-
    void writeValidationAVSFile(std::string filename);  
    virtual std::vector< std::pair<GbPoint3D,GbPoint3D> >  getQsLineSet();
 
diff --git a/src/cpu/VirtualFluidsCore/LBM/D3Q27System.h b/src/cpu/VirtualFluidsCore/LBM/D3Q27System.h
index a3acab7d876889a658e08446b1556297dfb23842..f1c6c1c79a22124f5d3af7f088a0dfe155f7fd8e 100644
--- a/src/cpu/VirtualFluidsCore/LBM/D3Q27System.h
+++ b/src/cpu/VirtualFluidsCore/LBM/D3Q27System.h
@@ -282,7 +282,6 @@ namespace D3Q27System
    static LBMReal getCompFeqForDirection(const int& direction, const LBMReal& drho,const LBMReal& vx1,const LBMReal& vx2,const LBMReal& vx3)
    {
       using namespace UbMath;
-
       LBMReal cu_sq=1.5*(vx1*vx1+vx2*vx2+vx3*vx3);
 
       ////-----
diff --git a/src/cpu/VirtualFluidsCore/Parallel/NullCommunicator.h b/src/cpu/VirtualFluidsCore/Parallel/NullCommunicator.h
index 6fa79a241c3df613ebb4a5b07f05071f93c7647c..c4cc092cc97fc3f5a287269958752ead2fb80a17 100644
--- a/src/cpu/VirtualFluidsCore/Parallel/NullCommunicator.h
+++ b/src/cpu/VirtualFluidsCore/Parallel/NullCommunicator.h
@@ -42,7 +42,7 @@
 //! \details NullCommunicator is only a place-holder. It is only one process in shared memory.
 class NullCommunicator : public Communicator
 {
-   private:
+private:
    NullCommunicator();
    NullCommunicator( const NullCommunicator& ){}
 public:
diff --git a/src/cpu/VirtualFluidsCore/Utilities/MemoryUtil.h b/src/cpu/VirtualFluidsCore/Utilities/MemoryUtil.h
index 7f6f997520c56655fb105930e0fcafb07a053951..1102acac0d6c0fc761204ebb5e2463d00299e145 100644
--- a/src/cpu/VirtualFluidsCore/Utilities/MemoryUtil.h
+++ b/src/cpu/VirtualFluidsCore/Utilities/MemoryUtil.h
@@ -46,7 +46,7 @@
    #include "stdlib.h"
    #include "stdio.h"
    #include "string.h"
-#elif (defined(__amd64) || defined(__amd64__) || defined(__unix__)) && !defined(__AIX__)
+#elif (defined(__amd64) || defined(__amd64__) || defined(__unix__) || defined(__CYGWIN__)) && !defined(__AIX__)
    #define MEMORYUTIL_LINUX
    #include "sys/types.h"
    #include "sys/sysinfo.h"
@@ -80,7 +80,12 @@ namespace Utilities
          //Multiply in next statement to avoid int overflow on right hand side...
          totalPhysMem *= memInfo.mem_unit;
       #elif defined(MEMORYUTIL_APPLE)
-         long long totalPhysMem = 0;
+        int mib [] = { CTL_HW, HW_MEMSIZE };
+        int64_t totalPhysMem;
+        size_t length = sizeof(totalPhysMem);
+
+        if(sysctl(mib, 2, &totalPhysMem, &length, nullptr, 0) == -1)
+            return 0;
       #else
          #error "MemoryUtil::getTotalPhysMem - UnknownMachine"
       #endif
@@ -142,12 +147,8 @@ namespace Utilities
          PROCESS_MEMORY_COUNTERS pmc;
          GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc));
          SIZE_T physMemUsedByMe = pmc.WorkingSetSize;          
-      #elif defined(MEMORYUTIL_LINUX)
+      #elif defined(MEMORYUTIL_LINUX) || defined(MEMORYUTIL_APPLE) || defined(MEMORYUTIL_CYGWIN)
          long long physMemUsedByMe = (long long)getValue() * (long long)1024;
-      #elif defined(MEMORYUTIL_APPLE)
-      long long physMemUsedByMe = 0;
-      #elif defined(MEMORYUTIL_CYGWIN)
-        long long physMemUsedByMe = (long long)getValue() * (long long)1024;
       #else
          #error "MemoryUtil::getPhysMemUsedByMe - UnknownMachine"
       #endif