diff --git a/binarycpython/utils/grid.py b/binarycpython/utils/grid.py
index 4fc3e4a0ac95be3784158d36fd573749ff3fa5e9..ea5445b27e3ada7deeb0e2b943b8cf15c8e555ce 100644
--- a/binarycpython/utils/grid.py
+++ b/binarycpython/utils/grid.py
@@ -2396,16 +2396,11 @@ class Population:
                     or grid_variable["gridtype"] == "right edge"
             ):
                 offset = -1
-                if (grid_variable["gridtype"] == "right"
-                    or grid_variable["gridtype"] == "right edge"):
-                    start = 0
-                else:
-                    start = 0
-
             elif grid_variable["gridtype"] == "discrete":
             # discrete variables sample all the points
                 offset = 0
-                start = 0
+
+            start = 0
 
             # for loop over the variable
             if vb:
@@ -2491,9 +2486,8 @@ class Population:
                 self._add_code("\n")
 
             # calculate phase volume
-            if(grid_variable["gridtype"] == "discrete" or grid_variable["dphasevol"] == -1):
-                # no phase volume required for discrete calculations
-                # so set it to 1.0
+            if(grid_variable["dphasevol"] == -1):
+                # no phase volume required so set it to 1.0
                 self._add_code("dphasevol_{name} = 1.0 # 666\n".format(name=grid_variable["name"]))
 
             elif(grid_variable["gridtype"] == "right" or
@@ -2503,8 +2497,15 @@ class Population:
                     "dphasevol_{name} = (sampled_values_{name}[{name}_this_index] - sampled_values_{name}[{name}_prev_index])".format(name=grid_variable["name"])
                     + "\n"
                 )
+            elif grid_variable["gridtype"] == "discrete":
+                # discrete might have next defined, use it if we can,
+                # otherwise use prev
+                self._add_code(
+                    "dphasevol_{name} = (sampled_values_{name}[{name}_next_index] - sampled_values_{name}[{name}_this_index]) if {name}_next_index else (sampled_values_{name}[{name}_this_index] - sampled_values_{name}[{name}_prev_index])".format(name=grid_variable["name"])
+                + "\n"
+                )
             else:
-                # left or centred always have this and next defined
+                # left and centred always have this and next defined
                 self._add_code(
                     "dphasevol_{name} = (sampled_values_{name}[{name}_next_index] - sampled_values_{name}[{name}_this_index])".format(name=grid_variable["name"])
                     + "\n"