diff --git a/src/VirtualFluids_GPU/DataStructureInitializer/GridProvider.cpp b/src/VirtualFluids_GPU/DataStructureInitializer/GridProvider.cpp
index 3d2eae79fa707cc9aa3fd413bdd13aa65557c798..6fdb4be62bd9b5c818e533c2f5998e289c6530a6 100644
--- a/src/VirtualFluids_GPU/DataStructureInitializer/GridProvider.cpp
+++ b/src/VirtualFluids_GPU/DataStructureInitializer/GridProvider.cpp
@@ -9,15 +9,6 @@
 #include <GPU/CudaMemoryManager.h>
 
 
-std::shared_ptr<GridProvider> GridProvider::makeGridGenerator(std::shared_ptr<GridBuilder> builder, std::shared_ptr<Parameter> para)
-{
-    return std::shared_ptr<GridProvider>(new GridGenerator(builder, para));
-}
-
-std::shared_ptr<GridProvider> GridProvider::makeGridReader(bool readBinaryFiles, std::shared_ptr<Parameter> para)
-{
-    return std::shared_ptr<GridProvider>(new GridReader(readBinaryFiles, para));
-}
 
 void GridProvider::setNumberOfNodes(const int numberOfNodes, const int level) const
 {
diff --git a/src/VirtualFluids_GPU/DataStructureInitializer/GridProvider.h b/src/VirtualFluids_GPU/DataStructureInitializer/GridProvider.h
index 579a434422d80e36bf0f9eb34625c9e0372cb259..ad942f97a5de3234dffbc8c98b807af95e2136db 100644
--- a/src/VirtualFluids_GPU/DataStructureInitializer/GridProvider.h
+++ b/src/VirtualFluids_GPU/DataStructureInitializer/GridProvider.h
@@ -14,9 +14,6 @@ class CudaMemoryManager;
 class VF_PUBLIC GridProvider
 {
 public:
-    static std::shared_ptr<GridProvider> makeGridGenerator(std::shared_ptr<GridBuilder> builder, std::shared_ptr<Parameter> para);
-    static std::shared_ptr<GridProvider> makeGridReader(bool readBinaryFiles, std::shared_ptr<Parameter> para);
-
 	virtual void allocArrays_CoordNeighborGeo() = 0;
 	virtual void allocArrays_BoundaryValues() = 0;
 	virtual void allocArrays_BoundaryQs() = 0;
diff --git a/src/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.cpp b/src/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.cpp
index fc5a10bd2138087fff9857fa0d16252308b0ea6c..3eb2f8ac2625487d4948b206a56a06fd98943982 100644
--- a/src/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.cpp
+++ b/src/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.cpp
@@ -11,6 +11,11 @@
 #include <GPU/CudaMemoryManager.h>
 #include "OffsetScale.h"
 
+std::shared_ptr<GridProvider> GridReader::make(FileFormat format, std::shared_ptr<Parameter> para)
+{
+    return std::make_shared<GridReader>(format, para);
+}
+
 GridReader::GridReader(bool binaer, std::shared_ptr<Parameter> para)
 {
     this->para = para;
@@ -29,16 +34,38 @@ GridReader::GridReader(bool binaer, std::shared_ptr<Parameter> para)
 	channelDirections[5] = "bottom";
 }
 
-GridReader::~GridReader()
+GridReader::GridReader(FileFormat format, std::shared_ptr<Parameter> para)
 {
+    this->para = para;
+    this->cudaMemoryManager = CudaMemoryManager::make(para);
 
+    this->format = format;
+    switch(format)
+    {
+    case FileFormat::ASCII:
+        binaer = false; break;
+    case FileFormat::BINARY:
+        binaer = true; break;
+    }
+
+    channelDirections.resize(6);
+    channelBoundaryConditions.resize(6);
+    BC_Values.resize(6);
+
+    channelDirections[0] = "inlet";
+    channelDirections[1] = "outlet";
+    channelDirections[2] = "front";
+    channelDirections[3] = "back";
+    channelDirections[4] = "top";
+    channelDirections[5] = "bottom";
 }
 
-bool GridReader::getBinaer()
+GridReader::~GridReader()
 {
-	return binaer;
+
 }
 
+
 void rearrangeGeometry(Parameter* para, int lev)
 {
     for (uint index = 0; index < para->getParH(lev)->size_Mat_SP; index++)
diff --git a/src/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h b/src/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h
index 1a446228d75facc0951addba2160830b03c3e422..5667a0ca59d2136650b3033b7b1e2deab6be2677 100644
--- a/src/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h
+++ b/src/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h
@@ -16,19 +16,28 @@ class BoundaryValues;
 class BoundaryQs;
 class CoordNeighborGeoV;
 
+enum class FileFormat
+{
+    BINARY, ASCII
+};
+
 
 class VF_PUBLIC GridReader
 	: public GridProvider
 {
 private:
 	bool binaer;
+    FileFormat format;
 	std::vector<std::string> channelDirections;
 	std::vector<std::string> channelBoundaryConditions;
 	std::shared_ptr<CoordNeighborGeoV> neighX, neighY, neighZ, neighWSB;
 	std::vector<std::shared_ptr<BoundaryValues> > BC_Values;
 
 public:
-	GridReader(bool binaer, std::shared_ptr<Parameter> para);
+    static std::shared_ptr<GridProvider> make(FileFormat format, std::shared_ptr<Parameter> para);
+
+    GridReader(bool binaer, std::shared_ptr<Parameter> para);
+    GridReader(FileFormat format, std::shared_ptr<Parameter> para);
     ~GridReader();
 	void allocArrays_CoordNeighborGeo()override;
 	void allocArrays_BoundaryValues()override;
@@ -39,7 +48,6 @@ public:
 	void setChannelBoundaryCondition();
 
 	void allocArrays_BoundaryQs()override;
-	bool getBinaer();
 	void setDimensions();
 	void setBoundingBox();
 	void initPeriodicNeigh(std::vector<std::vector<std::vector<unsigned int> > > periodV, std::vector<std::vector<unsigned int> > periodIndex, std::string way);
diff --git a/src/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp b/src/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp
index b666b99b0250d0a64847f6691d58cfe9b5847b50..3bebefabefe3b45d2ff908804e6306135b758550 100644
--- a/src/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp
+++ b/src/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp
@@ -8,6 +8,12 @@
 #include <iostream>
 #include "utilities/math/Math.h"
 
+
+std::shared_ptr<GridProvider> GridGenerator::make(std::shared_ptr<GridBuilder> builder, std::shared_ptr<Parameter> para)
+{
+    return std::shared_ptr<GridProvider>(new GridGenerator(builder, para));
+}
+
 GridGenerator::GridGenerator(std::shared_ptr<GridBuilder> builder, std::shared_ptr<Parameter> para)
 {
 	this->builder = builder;
diff --git a/src/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h b/src/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h
index 95efb7a097812dd619433089f172e46b99402e57..6a3df5fa441919264ec00f70ccbb5a780521f074 100644
--- a/src/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h
+++ b/src/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h
@@ -22,6 +22,9 @@ private:
 	std::shared_ptr<GridBuilder> builder;
 
 public:
+    VF_PUBLIC static std::shared_ptr<GridProvider> make(std::shared_ptr<GridBuilder> builder, std::shared_ptr<Parameter> para);
+
+
     VF_PUBLIC GridGenerator(std::shared_ptr<GridBuilder> builder, std::shared_ptr<Parameter> para);
 	VF_PUBLIC virtual ~GridGenerator();
 
diff --git a/targets/apps/HULC/main.cpp b/targets/apps/HULC/main.cpp
index fef2d0ff21f78fd1df21ff7cf76e7504cdb4968a..b1b18721500dc44067e501e3bf5ac296e45ea2a0 100644
--- a/targets/apps/HULC/main.cpp
+++ b/targets/apps/HULC/main.cpp
@@ -34,6 +34,8 @@
 #include "io/STLReaderWriter/STLWriter.h"
 #include "geometries/TriangularMesh/TriangularMeshStrategy.h"
 #include "Output/FileWriter.h"
+#include "DataStructureInitializer/GridReaderFiles/GridReader.h"
+#include "DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
 
 
 std::string getGridPath(std::shared_ptr<Parameter> para, std::string Gridpath)
@@ -267,9 +269,9 @@ void multipleLevel(const std::string& configPath)
     //TriangularMesh* triangularMesh = TriangularMesh::make("D:/GRIDGENERATION/STL/quadarBinaer.stl", DiscretizationMethod::POINT_IN_OBJECT);
 
 
-    gridBuilder->addCoarseGrid(-12, -10, -10, 55, 24, 25, 0.5);
+    gridBuilder->addCoarseGrid(-12, -10, -10, 55, 24, 25, 1.0);
+    gridBuilder->addGrid(new Cuboid(-10, -8, -8, 50, 22, 22));
     TriangularMesh* triangularMesh = TriangularMesh::make("D:/GRIDGENERATION/STL/input/local_input/bruecke.stl");
-    //gridBuilder->addGrid(triangularMesh, 2);
     gridBuilder->addGeometry(triangularMesh);
 
 
@@ -300,8 +302,8 @@ void multipleLevel(const std::string& configPath)
 
 
     SPtr<Parameter> para = Parameter::make();
-    SPtr<GridProvider> gridGenerator = GridProvider::makeGridGenerator(gridBuilder, para);
-    //SPtr<GridProvider> gridGenerator = GridProvider::makeGridReader(false, para);
+    SPtr<GridProvider> gridGenerator = GridGenerator::make(gridBuilder, para);
+    //SPtr<GridProvider> gridGenerator = GridReader::make(FileFormat::BINARY, para);
 
     std::ifstream stream;
     stream.open(configPath.c_str(), std::ios::in);