diff --git a/python_payload/apps/sensors/__init__.py b/python_payload/apps/sensors/__init__.py
index 72e991d24948132e4bb80d340c8345d23c47ddb6..f5da9456548948f4bc9a66beb3234f861d5c4e6a 100644
--- a/python_payload/apps/sensors/__init__.py
+++ b/python_payload/apps/sensors/__init__.py
@@ -37,6 +37,8 @@ def azimuth(vec):
 
 def relative_altitude(pascal, celsius):
     # https://en.wikipedia.org/wiki/Hypsometric_equation
+    if pascal <= 0:
+        return 0
     return (celsius + 273.15) * (287 / 9.81) * math.log(101325 / pascal, math.e)
 
 
diff --git a/python_payload/st3m/power.py b/python_payload/st3m/power.py
index f1e2956376ed34272cc8cf00468e4cce560cb1f6..ea9bd54ec085868fa33590813f4108c8def69720 100644
--- a/python_payload/st3m/power.py
+++ b/python_payload/st3m/power.py
@@ -143,7 +143,7 @@ class Power:
         self._ts = time.ticks_ms()
 
     def _battery_voltage_sample(self) -> float:
-        return self._adc.read_uv() * 2 / 1e6
+        return self._adc.read_uv() * 2.1428 / 1e6
 
     def _update(self) -> None:
         ts = time.ticks_ms()
@@ -185,12 +185,13 @@ class Power:
 
         percentage = 0
         voltage_readings = []
-        for i in range(5):
-            voltage_readings.append(self._adc.read_uv() * 2 / 1e6)
+        for i in range(8):
+            voltage_readings.append(self._battery_voltage_sample())
 
         voltage_readings.sort()
-        # take median
-        voltage = voltage_readings[2]
+        voltage_readings = voltage_readings[2:-2]
+        # take average
+        voltage = sum(voltage_readings) / len(voltage_readings)
 
         # print(voltage)
 
@@ -199,25 +200,4 @@ class Power:
                 percentage = self._batLUT[i][0]
                 break
 
-        self._prev_battery_percentages.pop(0)
-        self._prev_battery_percentages.append(percentage)
-        # log.debug("percentage: " + str(percentage) + " %")
-        # log.debug("prev: " + str(self._prev_battery_percentages) + " %")
-        percent_list = self._prev_battery_percentages
-
-        if -1 in percent_list:
-            return percentage
-
-        # avoid division by zero in weird edge cases
-        listsum = sum(percent_list)
-        if (listsum == 0) or (percent_list[0] == 0):
-            return 0
-
-        for i in range(3):
-            if listsum / percent_list[0] == 3:
-                # all values are the same, we settled on a value (might be the same as before but that's ok)
-                # print("check if new valid value/the end: "+str(time.ticks_diff(time.ticks_us(), ts)))
-                return percentage
-            else:
-                # we're still settling on a value, return previously settled value
-                return self._battery_percentage
+        return percentage