diff --git a/src/gpu/GridGenerator/grid/Grid.h b/src/gpu/GridGenerator/grid/Grid.h
index db8b883eefc7d896bdb7fcfe0ac654fccb12a544..b77d3de8c657be404bf0e64f5f0ce7c19ddc129d 100644
--- a/src/gpu/GridGenerator/grid/Grid.h
+++ b/src/gpu/GridGenerator/grid/Grid.h
@@ -101,7 +101,7 @@ public:
     virtual uint *getFC_offset() const = 0;
 
     virtual real *getDistribution() const = 0;
-    virtual int* getDirection() const = 0;
+    virtual const std::vector<int> &getDirection() const = 0;
     virtual int getStartDirection() const = 0;
     virtual int getEndDirection() const = 0;
 
diff --git a/src/gpu/GridGenerator/grid/GridImp.cpp b/src/gpu/GridGenerator/grid/GridImp.cpp
index 3ca1427508d6bb8aad817eb2089b2516406e904e..cec996774447e55978be66a6b6bdfe763a4d9981 100644
--- a/src/gpu/GridGenerator/grid/GridImp.cpp
+++ b/src/gpu/GridGenerator/grid/GridImp.cpp
@@ -36,6 +36,7 @@
 #include <sstream>
 # include <algorithm>
 #include <cmath>
+#include <vector>
 
 #include "global.h"
 
@@ -1762,7 +1763,7 @@ real* GridImp::getDistribution() const
     return this->distribution.f;
 }
 
-int* GridImp::getDirection() const
+const std::vector<int>& GridImp::getDirection() const
 {
     return this->distribution.dirs;
 }
diff --git a/src/gpu/GridGenerator/grid/GridImp.h b/src/gpu/GridGenerator/grid/GridImp.h
index b88e994488e8a56c05d6cf47854867fcd00839d0..54ea74850dde6c6fddd3d7cf60f2a911f79423af 100644
--- a/src/gpu/GridGenerator/grid/GridImp.h
+++ b/src/gpu/GridGenerator/grid/GridImp.h
@@ -243,7 +243,7 @@ public:
     uint getSparseSize() const override;
     int getSparseIndex(uint matrixIndex) const override;
     real* getDistribution() const override;
-    int* getDirection() const override;
+    const std::vector<int>& getDirection() const override;
     int getStartDirection() const override;
     int getEndDirection() const override;
 
diff --git a/src/gpu/GridGenerator/grid/distributions/Distribution.cpp b/src/gpu/GridGenerator/grid/distributions/Distribution.cpp
index a6e11ac909186618d765596f15263035b3b6401a..31d2e2f8a927e7141d80a55f4164dfcb0f52a8e0 100644
--- a/src/gpu/GridGenerator/grid/distributions/Distribution.cpp
+++ b/src/gpu/GridGenerator/grid/distributions/Distribution.cpp
@@ -46,9 +46,9 @@ Distribution DistributionHelper::getDistribution27()
     d27.dir_start = STARTDIR;
     d27.dir_end = ENDDIR;
 
-    d27.dirs = new int[(ENDDIR + 1) * DIMENSION];
+    d27.dirs.resize((ENDDIR + 1) * DIMENSION);
 
-    d27.directions = new Direction[ENDDIR + 1];
+    d27.directions.resize(ENDDIR + 1);
     d27.directions[DIR_P00] = Direction(DIR_27_E_X, DIR_27_E_Y, DIR_27_E_Z);
     d27.directions[DIR_M00] = Direction(DIR_27_W_X, DIR_27_W_Y, DIR_27_W_Z);
     d27.directions[DIR_0P0] = Direction(DIR_27_N_X, DIR_27_N_Y, DIR_27_N_Z);
diff --git a/src/gpu/GridGenerator/grid/distributions/Distribution.h b/src/gpu/GridGenerator/grid/distributions/Distribution.h
index 7982abc235b020003526b10c885f4936bf661936..39cea3747e71a5c26bfd9172267366284dbc94ff 100644
--- a/src/gpu/GridGenerator/grid/distributions/Distribution.h
+++ b/src/gpu/GridGenerator/grid/distributions/Distribution.h
@@ -73,8 +73,8 @@ struct Distribution
     typedef const Direction* const_iterator;
 
     real* f;
-    int *dirs;
-    Direction* directions;
+    std::vector<int> dirs;
+    std::vector<Direction> directions;
     int dir_start;
     int dir_end;
     const char* name;