diff --git a/mbtrack2/tracking/particles.py b/mbtrack2/tracking/particles.py
index 4c3934b75a81798c4a429d89e3b1ef5b6a8ab330..939f4764cf77d8b149bb0f8a982f7b7f7641922f 100644
--- a/mbtrack2/tracking/particles.py
+++ b/mbtrack2/tracking/particles.py
@@ -293,11 +293,13 @@ class Bunch:
         Return the average Courant-Snyder invariant of each plane.
 
         """
-        Jx = (self.ring.optics.local_gamma[0] * self['x']**2) + \
-              (2*self.ring.optics.local_alpha[0] * self['x'])*self['xp'] + \
+        xb = self['x'] - self['delta'] * self.ring.optics.local_dispersion[0]
+        yy = self['y'] - self['delta'] * self.ring.optics.local_dispersion[2]
+        Jx = (self.ring.optics.local_gamma[0] * xb**2) + \
+              (2*self.ring.optics.local_alpha[0] *xb)*self['xp'] + \
               (self.ring.optics.local_beta[0] * self['xp']**2)
-        Jy = (self.ring.optics.local_gamma[1] * self['y']**2) + \
-              (2*self.ring.optics.local_alpha[1] * self['y']*self['yp']) + \
+        Jy = (self.ring.optics.local_gamma[1] * yb**2) + \
+              (2*self.ring.optics.local_alpha[1] * yb*self['yp']) + \
               (self.ring.optics.local_beta[1] * self['yp']**2)
         Js = (self.ring.long_gamma * self['tau']**2) + \
               (2*self.ring.long_alpha * self['tau']*self['delta']) + \