diff --git a/pystencils/datahandling/parallel_datahandling.py b/pystencils/datahandling/parallel_datahandling.py
index 54f26806be318f6ef91a5ca11a9888a59524fb0c..535933300f73977d3ede92e714f2a381be92fa50 100644
--- a/pystencils/datahandling/parallel_datahandling.py
+++ b/pystencils/datahandling/parallel_datahandling.py
@@ -109,11 +109,14 @@ class ParallelDataHandling(DataHandling):
         if hasattr(values_per_cell, '__len__'):
             raise NotImplementedError("Parallel data handling does not support multiple index dimensions")
 
-        self._fieldInformation[name] = {'ghost_layers': ghost_layers,
-                                        'values_per_cell': values_per_cell,
-                                        'layout': layout,
-                                        'dtype': dtype,
-                                        'alignment': alignment}
+        self._fieldInformation[name] = {
+            'ghost_layers': ghost_layers,
+            'values_per_cell': values_per_cell,
+            'layout': layout,
+            'dtype': dtype,
+            'alignment': alignment,
+            'field_type': field_type,
+        }
 
         layout_map = {'fzyx': wlb.field.Layout.fzyx, 'zyxf': wlb.field.Layout.zyxf,
                       'f': wlb.field.Layout.fzyx,
diff --git a/pystencils/datahandling/serial_datahandling.py b/pystencils/datahandling/serial_datahandling.py
index f8b0a4a1d8b56e8533eb99c6c7f915c00f307419..697b6b6674a83b6786c8a6a3f687df3e49cd8a01 100644
--- a/pystencils/datahandling/serial_datahandling.py
+++ b/pystencils/datahandling/serial_datahandling.py
@@ -100,6 +100,7 @@ class SerialDataHandling(DataHandling):
             'layout': layout,
             'dtype': dtype,
             'alignment': alignment,
+            'field_type': field_type,
         }
 
         index_dimensions = len(values_per_cell)
diff --git a/pystencils/field.py b/pystencils/field.py
index 0c196f4ba61858f4aa03e8cde0260601d1e68c0d..76bd2be4076058e9fd7b53a0cbdfc1e87b54ddd6 100644
--- a/pystencils/field.py
+++ b/pystencils/field.py
@@ -466,6 +466,7 @@ class Field(AbstractField):
         """
         assert FieldType.is_staggered(self)
 
+        offset_orig = offset
         if type(offset) is np.ndarray:
             offset = tuple(offset)
         if type(offset) is str:
@@ -484,7 +485,11 @@ class Field(AbstractField):
                 offset[i] += sp.Rational(1, 2)
                 neighbor[i] = 1
         neighbor = offset_to_direction_string(neighbor)
-        idx = self.staggered_stencil.index(neighbor)
+        try:
+            idx = self.staggered_stencil.index(neighbor)
+        except ValueError:
+            raise ValueError("{} is not a valid neighbor for the {} stencil".format(offset_orig,
+                             self.staggered_stencil_name))
         offset = tuple(offset)
 
         if self.index_dimensions == 1:  # this field stores a scalar value at each staggered position
@@ -524,6 +529,11 @@ class Field(AbstractField):
             raise ValueError("No known stencil has {} staggered points".format(self.index_shape[0]))
         return stencils[self.spatial_dimensions][self.index_shape[0]]
 
+    @property
+    def staggered_stencil_name(self):
+        assert FieldType.is_staggered(self)
+        return "D%dQ%d" % (self.spatial_dimensions, self.index_shape[0] * 2 + 1)
+
     def __call__(self, *args, **kwargs):
         center = tuple([0] * self.spatial_dimensions)
         return Field.Access(self, center)(*args, **kwargs)
@@ -774,7 +784,7 @@ class Field(AbstractField):
             assert FieldType.is_staggered(self._field)
             neighbor = self._field.staggered_stencil[index]
             neighbor = direction_string_to_offset(neighbor, self._field.spatial_dimensions)
-            return [(o - sp.Rational(neighbor[i], 2)) for i, o in enumerate(offsets)]
+            return [(o - sp.Rational(int(neighbor[i]), 2)) for i, o in enumerate(offsets)]
 
         def _latex(self, _):
             n = self._field.latex_name if self._field.latex_name else self._field.name