diff --git a/2022/14/solution.py b/2022/14/solution.py
index 9047090..1e5ca4a 100755
--- a/2022/14/solution.py
+++ b/2022/14/solution.py
@@ -49,6 +49,9 @@ def part1(data):
 
 def drop_sand(sX, sY):
     global overflowing, stationary_sand
+    if (500, 0) in rock:
+        log.debug(f'Top of pyramid has been reached')
+        overflowing = True
     if sY > rock_y_max:
         overflowing = True
         # log.debug(f'Overflow!')
@@ -115,7 +118,7 @@ def process_plot(plots, plot_index, plot):
 
 def draw_rock():
     log.handlers[0].flush()
-    global rock, y_min
+    global rock
     x_min = min([i[0] for i in rock])
     x_max = max([x for x, y in rock])
     y_min = min([y for x, y in rock])
@@ -130,7 +133,38 @@ def draw_rock():
         print()
 
 def part2(data):
-    return 0
+    global stationary_sand
+    stationary_sand = 0
+
+    global overflowing
+    overflowing = False
+
+    global rock_y_max
+    rock_y_max = map_rock(data)
+    x_min = min([x for x, y in rock])
+    x_max = max([x for x, y in rock])
+    y_max = max([y for x, y in rock])
+    log.debug(f'x_min: {x_min}, x_max: {x_max}, y_max: {y_max}')
+
+
+    # Create a new base under everything, based on a pyramid shape
+    x_min = x_min - y_max + 2
+    x_max = x_max + y_max + 2
+    rock_y_max = y_max + 2
+    extra_line = f'{x_min},{rock_y_max} -> {x_max},{rock_y_max}'
+    log.debug(f'extra_line: {extra_line}')
+    plot_one_line(extra_line)
+    # Before
+    draw_rock()
+
+    x, y = 500, 0
+    while not overflowing:
+        x, y = drop_sand(x, y)
+
+    # After
+    draw_rock()
+
+    return stationary_sand - 1
 
 
 if __name__ == "__main__":