diff --git a/server/map/__pycache__/get_relation.cpython-311.pyc b/server/map/__pycache__/get_relation.cpython-311.pyc
index 744144e33606421cf5d36ed1c24d8c6e2ddab9df..e35a7a0bbb24aae68e2c04bf6f3fd9fadf1b0f4e 100644
Binary files a/server/map/__pycache__/get_relation.cpython-311.pyc and b/server/map/__pycache__/get_relation.cpython-311.pyc differ
diff --git a/server/map/get_relation.py b/server/map/get_relation.py
index 52b037aad68814c42094d7fadeb18fccd9c43f2b..b80b3bf2044adac31f0b1dc72211147e7c8d01e6 100644
--- a/server/map/get_relation.py
+++ b/server/map/get_relation.py
@@ -11,21 +11,6 @@ polygon_min_x = None  # The left most point of the entire polygon
 
 # Read a json file with relation data and send to response object
 def get_relation(self, body_of_water: str):  # NB: implement body_of_water
-    # Load GeoJSON data using geopandas
-    geo_data = gpd.read_file("server/map/mjosa.geojson")
-
-    # Filter only polygons, exclude points and other feature types to reduce response size
-    polygon_data = geo_data[geo_data['geometry'].geom_type == 'Polygon']
-
-    if polygon_data.empty:
-        raise ValueError("Failed to extract polygon data from file")
-
-    # Extract coordinates from polygons and create polygon objects
-    polygons = [Polygon(polygon.exterior) for polygon in polygon_data['geometry']]
-
-    if not polygons:
-        raise ValueError("Failed to convert to polygons")
-
     divided_map = []  # List to store map shapes while splitting
 
     # NB: test polygon, remove after testing
@@ -53,7 +38,20 @@ def get_relation(self, body_of_water: str):  # NB: implement body_of_water
             if not horizontal_section or not divided_poly[0]:
                 continue
 
-            divided_map.append(horizontal_section)
+                # Cut each horizontal section into vertical sections, right to left
+            for vrt_line in vrt_lines:
+                if len(horizontal_section.exterior.coords) < 3:
+                    break  # Break from loop im remaining section has no coordinates
+
+                # Split the horizontal section into two vertical parts
+                vertical_parts = cut_polygon_by_points(horizontal_section, vrt_line, -0.1)
+
+                divided_map.append(vertical_parts[0])  # Append split vertical sections to final list of shapes
+
+                # Set horizontal_section to the remaining, un-split, horizontal section for next iteration
+                horizontal_section = vertical_parts[1]
+
+            polygon = divided_poly[1]  # Set polygon to the remaining, un-split shape for next iteration
 
         divided_map.append(polygon)
 
@@ -63,8 +61,8 @@ def get_relation(self, body_of_water: str):  # NB: implement body_of_water
 
     # NB test plot
     fig, ax = plt.subplots()
-    ax.set_aspect(1.5)
-    ax.xaxis.set_major_locator(ticker.MultipleLocator(0.2))
+    ax.set_aspect(1)
+    # ax.xaxis.set_major_locator(ticker.MultipleLocator(0.2))
 
     for i, polygon in enumerate(tiles['geometry']):
         random_color = "#{:06x}".format(random.randint(0, 0xFFFFFF))
@@ -106,10 +104,11 @@ def cut_polygon_by_points(polygon: Polygon, divisor: float, cell_size: float):
             else:
                 remaining_shape.append(point)
 
-        # Add points to the newly created edges of split_shape and remaining_shape
-        populate_new_edge(split_shape, remaining_shape, cell_size, divisor)
-        #split_shape = shape_w_edges[0]
-        #remaining_shape = shape_w_edges[1]
+        # Populate newly created edges with points to facilitate vertical cutting
+        populated_shapes = populate_new_edge(split_shape, remaining_shape, cell_size, divisor)
+        if populated_shapes is not None:
+            split_shape = populated_shapes[0]
+            remaining_shape = populated_shapes[1]
 
     else:  # Vertical split
         for point in exterior_coords:
@@ -137,39 +136,14 @@ def cut_polygon_by_points(polygon: Polygon, divisor: float, cell_size: float):
     return Polygon(split_shape), Polygon(remaining_shape)
 
 
-# Adds equally spaced points along an edge that is created after a polygon is cut.
-def populate_new_edge(split_shape, remaining_shape, cell_size: float, divisor: float):
-    # Prepend new points onto the newly created edge to facilitate vertical splitting
-    if len(split_shape) > 2 and polygon_min_x is not None:
-        # Define starting point with an x-value that will be common for all polygons
-        starting_point = polygon_min_x
-
-        # Get corners of the newly created shape which make up the new edge
-        right_corner = split_shape[-1]
-        left_corner = split_shape[0]
-
-        print("right_corner: ", right_corner, "    left_corner: ", left_corner, "   left == right?: ", left_corner == right_corner)
-
-        while starting_point < left_corner.x:  # Increment starting point until it is withing the polygons bounds
-            starting_point += cell_size
-        # if starting_point < left_corner.x: # NB: optimised substitute for previous while loop, requires testing
-        #    starting_point += cell_size * math.floor(starting_point - left_corner.x)
-
-        # Insert new points with cell_size spacing while starting_point is within bounds
-        while starting_point < right_corner.x:
-            split_shape.insert(0, (starting_point, divisor))  # NB may have to add/subtract small offset of 0.00001
-            remaining_shape.insert(0, (starting_point, divisor))  # Prepend new point to shape
-
-            starting_point += cell_size
-
-        return split_shape, remaining_shape
-
-
 # Generate grid of equally spaced x and y coordinates where the grid size is determined by cell_size
 def create_grid_coords(polygon: Polygon, cell_size: float):
     # Define boundaries of grid
     min_x, min_y, max_x, max_y = polygon.bounds
 
+    global polygon_min_x
+    polygon_min_x = min_x
+
     # Divide grid into sections of size *cell_size
     x_step = max((max_x - min_x) / 10, cell_size)
     y_step = max((max_y - min_y) / 10, cell_size)
@@ -183,7 +157,7 @@ def create_grid_coords(polygon: Polygon, cell_size: float):
 # NB: only for testing
 def circle_polygon():
     circle_points = []
-    num_points = 80
+    num_points = 200
     center_x, center_y = 0.0, 0.0
     radius = 6
 
@@ -194,4 +168,34 @@ def circle_polygon():
         circle_points.append((x, y))
     circle_points.append(circle_points[0])  # Close the circle
 
-    return Polygon(circle_points)
\ No newline at end of file
+    return Polygon(circle_points)
+
+
+# Adds equally spaced points along an edge that is created after a polygon is cut.
+def populate_new_edge(split_shape, remaining_shape, cell_size: float, divisor: float):
+    # Prepend new points onto the newly created edge to facilitate vertical splitting
+    if len(split_shape) > 2 and polygon_min_x is not None:
+        # Define starting point with an x-value that will be common for all polygons
+        starting_point = polygon_min_x
+
+        # Get corners of the newly created shape which make up the new edge
+        right_corner = split_shape[-1]
+        left_corner = split_shape[0]
+
+        print("right_corner: ", right_corner, "    left_corner: ", left_corner, "   cell_size: ", cell_size)
+
+        while starting_point < left_corner.x:  # Increment starting point until it is withing the polygons bounds
+            starting_point += cell_size
+
+        # if starting_point < left_corner.x: # NB: optimised substitute for previous while loop, requires testing
+        #    starting_point += cell_size * math.floor(starting_point - left_corner.x)
+
+        # Insert new points with cell_size spacing while starting_point is within bounds
+        while starting_point < right_corner.x:
+            split_shape.insert(0, (starting_point, divisor))  # NB may have to add/subtract small offset of 0.00001
+            remaining_shape.insert(0, (starting_point, divisor))  # Prepend new point to shape
+
+            starting_point += cell_size
+
+        return split_shape, remaining_shape
+