diff --git a/modules/img/alg/src/discrete_shrink.cc b/modules/img/alg/src/discrete_shrink.cc
index 3398c820b8f05e528f6bcdfd5aa26ab47d328121..d3413f0f3a7dc9ad96983825adf21417089654fb 100644
--- a/modules/img/alg/src/discrete_shrink.cc
+++ b/modules/img/alg/src/discrete_shrink.cc
@@ -74,6 +74,8 @@ ImageStateBasePtr DiscreteShrinkFnc::VisitState(const ImageStateImpl<T,D>& isi)
 
   LOG_VERBOSE("ds: " << isi.GetExtent() << " " << new_ext << std::endl);
 
+
+  geom::Vec3 ao = isi.GetAbsoluteOrigin();
   PixelSampling new_ps = isi.GetSampling();
   new_ps.SetExtent(new_ext);
 
@@ -97,6 +99,7 @@ ImageStateBasePtr DiscreteShrinkFnc::VisitState(const ImageStateImpl<T,D>& isi)
 
   LOG_VERBOSE("ds: newstart: " << newstart << std::endl);
 
+  ni->SetAbsoluteOrigin(ao);
   ni->SetSpatialOrigin(newstart);
   ni->GetSampling().SetPixelSampling(CompMultiply(ni->GetSampling().GetPixelSampling(),Vec3(bs_[0],bs_[1],bs_[2])));
 
diff --git a/modules/img/base/src/image_handle.cc b/modules/img/base/src/image_handle.cc
index 712868a3181ed0fa47d7989748b759abb18a5dc1..de4e5c5dfd3391a34f83c58e1866f336ed7b59fc 100644
--- a/modules/img/base/src/image_handle.cc
+++ b/modules/img/base/src/image_handle.cc
@@ -90,6 +90,9 @@ ImageHandle ImageHandle::Copy(bool cc) const
     copy constructor,with the cloned ImageStateBasePtr as a parameter.
     This new ptr on the heap is then in turn used to initialize the StatePtrPtr.
   */
+
+  ImageHandle copy_img = ImageHandle(StatePtrPtr(new ImageStateBasePtr(ImageStatePtr()->Clone(cc))));
+  copy_img.SetAbsoluteOrigin(ImageStatePtr()->GetAbsoluteOrigin());
   return ImageHandle(StatePtrPtr(new ImageStateBasePtr(ImageStatePtr()->Clone(cc))));
 }