diff --git a/server/map/__pycache__/get_relation.cpython-311.pyc b/server/map/__pycache__/get_relation.cpython-311.pyc
index c02d4b335fff30f0ab474427196c1571b4382e6a..140394c18ade684876d995f2db2b1352085f9609 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 7f59fd80fe47a840f87f872b413afeb082482cac..2f290be90c510e7f4280f3e0798b25291cabf88f 100644
--- a/server/map/get_relation.py
+++ b/server/map/get_relation.py
@@ -5,6 +5,8 @@ import matplotlib.ticker as ticker
 import random
 import numpy as np
 
+polygon_min_x = None  # The left most point of the entire polygon
+
 
 def get_relation(self, body_of_water: str):
     # Load GeoJSON data using geopandas
@@ -38,7 +40,7 @@ def get_relation(self, body_of_water: str):
         for hrz_line in hrz_lines:
 
             # Split shape into upper and lower section as hrz_line as divider
-            divided_poly = cut_polygon_in_two(polygon, hrz_line, cell_size)
+            divided_poly = cut_polygon_by_points(polygon, hrz_line, cell_size)
             horizontal_section = divided_poly[0]  # Save upper horizontal section
 
             polygon = divided_poly[1]  # Set polygon to the remaining, un-split shape for next iteration
@@ -49,10 +51,10 @@ def get_relation(self, body_of_water: str):
             # 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
+                    break  # Break from loop im remaining section has no coordinates
 
                 # Split the horizontal section into two vertical parts
-                vertical_parts = cut_polygon_in_two(horizontal_section, vrt_line, -0.1)
+                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
 
@@ -92,8 +94,8 @@ def get_relation(self, body_of_water: str):
 
 
 # Takes a polygon and divides its coordinates into two shapes, where divisor is a
-# coordinate that defines the point of division
-def cut_polygon_in_two(polygon: Polygon, divisor: float, cell_size: float):
+# coordinate that defines the point of division.
+def cut_polygon_by_points(polygon: Polygon, divisor: float, cell_size: float):
     # Extract polygon exterior coordinates
     exterior_coords = list(polygon.exterior.coords)
 
@@ -110,21 +112,29 @@ def cut_polygon_in_two(polygon: Polygon, divisor: float, cell_size: float):
             else:
                 remaining_shape.append(point)
 
-        if len(split_shape) > 2:
-            # Get last point added to
-            last_point = split_shape[-1]
-            # Get length of the newly created edge
-            new_edge_len = abs(last_point.x - split_shape[0].x)
-            print("new_edge_len: ", new_edge_len, "    cell_size: ", cell_size, "   last_point.x: ", last_point.x,  "   split_shape[0].x: ", split_shape[0].x)
+    #################################################################
+        # 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)
 
-            # Add points along the new edge to allow horizontal sections to be split into vertical ones
-            while new_edge_len > cell_size:
-                x_val = new_edge_len - cell_size
+            while starting_point < left_corner.x:  # Increment starting point until it is withing the polygons bounds
+                starting_point += cell_size
 
-                split_shape.insert(0, (x_val, last_point.y))  # NB may have to add/subtract small offset of 0.00001
-                remaining_shape.insert(0, (x_val, last_point.y))  # Prepend
+            # Insert new points with cell_size spacing while starting_point is within bounds
+            while starting_point < right_corner.x:
 
-                new_edge_len -= cell_size
+                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
+    #################################################################
 
     else:  # Vertical split
         for point in exterior_coords:
@@ -157,6 +167,9 @@ 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  # Set value of global variable
+    polygon_min_x = min_x
+
     # Divide grid into sections of size *cell_size
     x_coords = np.arange(min_x, max_x, cell_size)
     y_coords = np.arange(min_y, max_y, cell_size)