diff --git a/GUI/Model/Sample/CompoundItem.cpp b/GUI/Model/Sample/CompoundItem.cpp
index c96e40bdd9de532f307342111f19ea49fd63cbdb..d233e3b06d1cf234e8e0db967cc1b243c04dc57e 100644
--- a/GUI/Model/Sample/CompoundItem.cpp
+++ b/GUI/Model/Sample/CompoundItem.cpp
@@ -80,9 +80,9 @@ std::unique_ptr<Compound> CompoundItem::createCompound() const
         }
     }
 
-    P_composition->setParticlePosition(position());
     if (const auto r = createRotation(); r && !r->isIdentity())
-        P_composition->setRotation(*r);
+        P_composition->rotate(*r);
+    P_composition->setParticlePosition(position());
 
     return P_composition;
 }
diff --git a/GUI/Model/Sample/CoreAndShellItem.cpp b/GUI/Model/Sample/CoreAndShellItem.cpp
index 01eb27ff2848beec10bd12de9e7d70a238609c86..b2d6d9daf47f1cc55ead5025d9afa0f2f00d47f2 100644
--- a/GUI/Model/Sample/CoreAndShellItem.cpp
+++ b/GUI/Model/Sample/CoreAndShellItem.cpp
@@ -69,9 +69,9 @@ std::unique_ptr<CoreAndShell> CoreAndShellItem::createCoreAndShell() const
                     "core or shell particle is undefined.");
     auto P_coreshell = std::make_unique<CoreAndShell>(*P_shell, *P_core);
     P_coreshell->setAbundance(abundance());
-    P_coreshell->setParticlePosition(position());
     if (auto r = createRotation(); r && !r->isIdentity())
-        P_coreshell->setRotation(*r);
+        P_coreshell->rotate(*r);
+    P_coreshell->setParticlePosition(position());
 
     return P_coreshell;
 }
diff --git a/GUI/Model/Sample/MesocrystalItem.cpp b/GUI/Model/Sample/MesocrystalItem.cpp
index 133c0a11912c80b2315bfb044901ed493a966fb9..f7ad1e5b9d6654c1960252c959b79b0acb5f8440 100644
--- a/GUI/Model/Sample/MesocrystalItem.cpp
+++ b/GUI/Model/Sample/MesocrystalItem.cpp
@@ -95,9 +95,9 @@ std::unique_ptr<Mesocrystal> MesocrystalItem::createMesocrystal() const
                     "No outer shape defined");
 
     auto result = std::make_unique<Mesocrystal>(crystal, *ff);
-    result->setParticlePosition(position());
     if (auto r = createRotation(); r && !r->isIdentity())
-        result->setRotation(*r);
+        result->rotate(*r);
+    result->setParticlePosition(position());
 
     return result;
 }
diff --git a/Sample/Particle/IParticle.cpp b/Sample/Particle/IParticle.cpp
index d87d42f24252c3901214ae6efc1342051c38ff9a..3b03c39f2bbffe87a853a359a088a744967d79f6 100644
--- a/Sample/Particle/IParticle.cpp
+++ b/Sample/Particle/IParticle.cpp
@@ -34,11 +34,6 @@ const IRotation* IParticle::rotation() const
     return m_rotation.get();
 }
 
-void IParticle::setRotation(const IRotation& rotation)
-{
-    m_rotation.reset(rotation.clone());
-}
-
 IParticle* IParticle::rotate(const IRotation& rotation)
 {
     if (m_rotation)
diff --git a/Sample/Particle/IParticle.h b/Sample/Particle/IParticle.h
index ab9a8d8e23696d2684281e07fbbf19a657e18277..a3af8c53ea7ddfa6d145ed8de6e072067c42e841 100644
--- a/Sample/Particle/IParticle.h
+++ b/Sample/Particle/IParticle.h
@@ -63,9 +63,6 @@ public:
     //! Returns rotation object
     const IRotation* rotation() const;
 
-    //! Sets transformation.
-    void setRotation(const IRotation& rotation);
-
     //! Rotates the particle, and returns this.
     IParticle* rotate(const IRotation& rotation);
 
diff --git a/auto/Wrap/libBornAgainSample.py b/auto/Wrap/libBornAgainSample.py
index ae48a74ecfa7148a50cda5adff7decfb556051bd..590065d10779abdb415b056985c4766c4cf63974 100644
--- a/auto/Wrap/libBornAgainSample.py
+++ b/auto/Wrap/libBornAgainSample.py
@@ -3041,10 +3041,6 @@ class IParticle(ISampleNode):
         r"""rotation(IParticle self) -> IRotation"""
         return _libBornAgainSample.IParticle_rotation(self)
 
-    def setRotation(self, rotation):
-        r"""setRotation(IParticle self, IRotation rotation)"""
-        return _libBornAgainSample.IParticle_setRotation(self, rotation)
-
     def rotate(self, rotation):
         r"""rotate(IParticle self, IRotation rotation) -> IParticle"""
         return _libBornAgainSample.IParticle_rotate(self, rotation)
diff --git a/auto/Wrap/libBornAgainSample_wrap.cpp b/auto/Wrap/libBornAgainSample_wrap.cpp
index c267d66b3c4b30a68d4d35caf1ea16f48171aa68..33759c8a6e9bc4f0ff3c5861edb0b9422ee8ae79 100644
--- a/auto/Wrap/libBornAgainSample_wrap.cpp
+++ b/auto/Wrap/libBornAgainSample_wrap.cpp
@@ -36621,38 +36621,6 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_IParticle_setRotation(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  IParticle *arg1 = (IParticle *) 0 ;
-  IRotation *arg2 = 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  void *argp2 = 0 ;
-  int res2 = 0 ;
-  PyObject *swig_obj[2] ;
-  
-  if (!SWIG_Python_UnpackTuple(args, "IParticle_setRotation", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IParticle, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IParticle_setRotation" "', argument " "1"" of type '" "IParticle *""'"); 
-  }
-  arg1 = reinterpret_cast< IParticle * >(argp1);
-  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_IRotation,  0  | 0);
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IParticle_setRotation" "', argument " "2"" of type '" "IRotation const &""'"); 
-  }
-  if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IParticle_setRotation" "', argument " "2"" of type '" "IRotation const &""'"); 
-  }
-  arg2 = reinterpret_cast< IRotation * >(argp2);
-  (arg1)->setRotation((IRotation const &)*arg2);
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
 SWIGINTERN PyObject *_wrap_IParticle_rotate(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
   IParticle *arg1 = (IParticle *) 0 ;
@@ -61415,7 +61383,6 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "IParticle_translate", _wrap_IParticle_translate, METH_VARARGS, "IParticle_translate(IParticle self, R3 translation) -> IParticle"},
 	 { "IParticle_rotation", _wrap_IParticle_rotation, METH_O, "IParticle_rotation(IParticle self) -> IRotation"},
-	 { "IParticle_setRotation", _wrap_IParticle_setRotation, METH_VARARGS, "IParticle_setRotation(IParticle self, IRotation rotation)"},
 	 { "IParticle_rotate", _wrap_IParticle_rotate, METH_VARARGS, "IParticle_rotate(IParticle self, IRotation rotation) -> IParticle"},
 	 { "IParticle_avgeMaterial", _wrap_IParticle_avgeMaterial, METH_O, "IParticle_avgeMaterial(IParticle self) -> Material"},
 	 { "IParticle_volume", _wrap_IParticle_volume, METH_O, "IParticle_volume(IParticle self) -> double"},