diff --git a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp
index 14cf5d294994d57939d2c7be80ca5512e72efdd7..8904a3b05625adc0a8abfa93d07705eeb9383f81 100644
--- a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp
+++ b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp
@@ -76,12 +76,46 @@ uint MultipleGridBuilder<Grid>::getNumberOfLevels() const
 template <typename Grid>
 real MultipleGridBuilder<Grid>::getDelta(int level) const
 {
+    if (grids.empty())
+        throw InvalidLevelException();
     return grids[level]->getDelta();
 }
 
+template <typename Grid>
+real MultipleGridBuilder<Grid>::getStartX(uint level) const
+{
+    return 0.0;
+}
 
+template <typename Grid>
+real MultipleGridBuilder<Grid>::getStartY(uint level) const
+{
+    return 0.0;
+}
 
+template <typename Grid>
+real MultipleGridBuilder<Grid>::getStartZ(uint level) const
+{
+    return 0.0;
+}
 
+template <typename Grid>
+real MultipleGridBuilder<Grid>::getEndX(uint level) const
+{
+    return 0.0;
+}
+
+template <typename Grid>
+real MultipleGridBuilder<Grid>::getEndY(uint level) const
+{
+    return 0.0;
+}
+
+template <typename Grid>
+real MultipleGridBuilder<Grid>::getEndZ(uint level) const
+{
+    return 0.0;
+}
 
 
 template class MultipleGridBuilder<GridDummy>;
diff --git a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h
index 4f734836011775cfd29fbbfdd58dde27aca5147b..bfe44c0d12fb3f66de903d5a139ceb8f38356c95 100644
--- a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h
+++ b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h
@@ -37,6 +37,17 @@ public:
     }
 };
 
+class InvalidLevelException : public MultipleGridBuilderException
+{
+public:
+    const char* what() const noexcept override
+    {
+        std::ostringstream getNr;
+        getNr << "level is invalid.";
+        return getNr.str().c_str();
+    }
+};
+
 template<typename Grid>
 class MultipleGridBuilder
 {
@@ -51,6 +62,14 @@ public:
     VF_PUBLIC uint getNumberOfLevels() const;
     VF_PUBLIC real getDelta(int level) const;
 
+    VF_PUBLIC real getStartX(uint level) const;
+    VF_PUBLIC real getStartY(uint level) const;
+    VF_PUBLIC real getStartZ(uint level) const;
+
+    VF_PUBLIC real getEndX(uint level) const;
+    VF_PUBLIC real getEndY(uint level) const;
+    VF_PUBLIC real getEndZ(uint level) const;
+
 private:
     bool isInsideOfGrids(SPtr<Grid> grid) const;
     real calculateDelta();
diff --git a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilderTest.cpp b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilderTest.cpp
index d686f4ad92a0b27c21d80052c7136ff1a4557847..0c4c1ca094ad84e4c3d045cccd7d7dad2b93f692 100644
--- a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilderTest.cpp
+++ b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilderTest.cpp
@@ -39,17 +39,84 @@ TEST(MultipleGridBuilderTest, firstGridMustBeCoarse)
     ASSERT_THROW(gridBuilder->addGrid(0.0, 0.0, 0.0, 20.0, 20.0, 20.0), FirstGridMustBeCoarseException);
 }
 
+TEST(MultipleGridBuilderTest, addMultipleGrids_deltaShouldBeTheHalfOfTheLastAdded)
+{
+    auto gridBuilder = MultipleGridBuilder<GridDummy>::makeShared();
+    const real delta = 2.0;
+    gridBuilder->addCoarseGrid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0, delta);
+
+    gridBuilder->addGrid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0);
+    gridBuilder->addGrid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0);
+    gridBuilder->addGrid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0);
+    gridBuilder->addGrid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0);
+
+    EXPECT_THAT(gridBuilder->getDelta(1), RealEq(delta / 2.0));
+    EXPECT_THAT(gridBuilder->getDelta(2), RealEq(delta / 4.0));
+    EXPECT_THAT(gridBuilder->getDelta(3), RealEq(delta / 8.0));
+    EXPECT_THAT(gridBuilder->getDelta(4), RealEq(delta / 16.0));
+}
+
+TEST(MultipleGridBuilderTest, getInvalidLevel_shouldThrowException)
+{
+    auto gridBuilder = MultipleGridBuilder<GridDummy>::makeShared();
+
+    ASSERT_THROW(gridBuilder->getDelta(0), InvalidLevelException);
+}
+
+TEST(MultipleGridBuilderTest, addedsecondGrid_shouldBeStaggered)
+{
+    auto gridBuilder = MultipleGridBuilder<GridDummy>::makeShared();
+    gridBuilder->addCoarseGrid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0, 1.0);
+
+    const real givenStartX = 0.0;
+    const real givenStartY = 0.0;
+    const real givenStartZ = 0.0;
+
+    const real givenEndX = 10.0;
+    const real givenEndY = 10.0;
+    const real givenEndZ = 10.0;
+    gridBuilder->addGrid(givenStartX, givenStartY, givenStartZ, givenEndX, givenEndY, givenEndZ);
+
+    const uint level = 1;
+    const real staggeredOffset = 0.5 * gridBuilder->getDelta(level);
+
+    const real expectedStartX = givenStartX + staggeredOffset;
+    const real expectedStartY = givenStartY + staggeredOffset;
+    const real expectedStartZ = givenStartZ + staggeredOffset;
+
+    const real actualStartX = gridBuilder->getStartX(level);
+    const real actualStartY = gridBuilder->getStartY(level);
+    const real actualStartZ = gridBuilder->getStartZ(level);
+
+    EXPECT_THAT(actualStartX, RealEq(expectedStartX));
+    EXPECT_THAT(actualStartY, RealEq(expectedStartY));
+    EXPECT_THAT(actualStartZ, RealEq(expectedStartZ));
+
+
+    const real expectedEndX = givenEndX - staggeredOffset;
+    const real expectedEndY = givenEndY - staggeredOffset;
+    const real expectedEndZ = givenEndZ - staggeredOffset;
+
+
+    const real actualEndX = gridBuilder->getEndX(level);
+    const real actualEndY = gridBuilder->getEndY(level);
+    const real actualEndZ = gridBuilder->getEndZ(level);
+
+    EXPECT_THAT(actualEndX, RealEq(expectedEndX));
+    EXPECT_THAT(actualEndY, RealEq(expectedEndY));
+    EXPECT_THAT(actualEndZ, RealEq(expectedEndZ));
+}
 
-//TEST(MultipleGridBuilderTest, fall2)
+//TEST(MultipleGridBuilderTest, addsFineGridWithLevel_shouldCreateGridsBetween)
 //{
 //    auto gridBuilder = MultipleGridBuilder<GridDummy>::makeShared();
 //
 //    real delta = 2.0;
-//    gridBuilder->addCoarseGrid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0, delta, true, true, true);
-//    gridBuilder->addGrid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0, true, true, true);
+//    gridBuilder->addCoarseGrid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0, delta);
+//    gridBuilder->addGrid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0);
 //
 //    uint level = 5;
-//    gridBuilder->addFineGrid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0, level, true, true, true);
+//    gridBuilder->addFineGrid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0, level);
 //
-//    ASSERT_THROW(gridBuilder->addGrid(0.0, 0.0, 0.0, 20.0, 20.0, 20.0, true, true, true), FinerGridBiggerThanCoarsestGridException);
+//    ASSERT_THROW(gridBuilder->addGrid(0.0, 0.0, 0.0, 20.0, 20.0, 20.0), FinerGridBiggerThanCoarsestGridException);
 //}