diff --git a/Data/Time/Lens.hs b/Data/Time/Lens.hs
--- a/Data/Time/Lens.hs
+++ b/Data/Time/Lens.hs
@@ -13,6 +13,7 @@
     , day
     , gregorian
       -- * Time zone
+      -- $zone
     , HasTimeZone(..)
       -- * Re-exports from "Data.Time"
     , T.Day
@@ -167,8 +168,10 @@
 instance HasTimeZone T.ZonedTime where
     timeZone = lens T.zonedTimeZone setTimeZone
         where
-        setTimeZone z t = t { T.zonedTimeZone = z, T.zonedTimeToLocalTime = newTime }
-            where newTime = modL minutes (+ T.timeZoneMinutes z) $ T.zonedTimeToLocalTime t
+        setTimeZone newz (T.ZonedTime oldt oldz) = T.ZonedTime newt newz
+            where
+                newt = modL minutes (+ tdiff) oldt
+                tdiff = T.timeZoneMinutes newz - T.timeZoneMinutes oldz
 
 --
 -- Auxiliary functions
diff --git a/time-lens.cabal b/time-lens.cabal
--- a/time-lens.cabal
+++ b/time-lens.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                time-lens
-version:             0.2
+version:             0.3
 synopsis:            Lens-based interface to Data.Time data structures
 -- description:         
 license:             BSD3
