diff --git a/Core/Material/HomogeneousMagneticMaterial.cpp b/Core/Material/HomogeneousMagneticMaterial.cpp
index b2db68f9c31dfa94d96d194c24180aafd4c56e0b..95b9be305aa7b0fd88d7b798baf821f86d6f8af0 100644
--- a/Core/Material/HomogeneousMagneticMaterial.cpp
+++ b/Core/Material/HomogeneousMagneticMaterial.cpp
@@ -14,11 +14,9 @@
 // ************************************************************************** //
 
 #include "HomogeneousMagneticMaterial.h"
-#include "Rotations.h"
 #include "Transform3D.h"
 
-const double HomogeneousMagneticMaterial::m_magnetic_prefactor
-                 = -2.91042993836710484e-3;
+const double HomogeneousMagneticMaterial::m_magnetic_prefactor = -2.91042993836710484e-3;
 
 HomogeneousMagneticMaterial::HomogeneousMagneticMaterial(
         const std::string& name, const complex_t refractive_index,
@@ -32,16 +30,15 @@ HomogeneousMagneticMaterial::HomogeneousMagneticMaterial(
 HomogeneousMagneticMaterial::HomogeneousMagneticMaterial(
         const std::string& name, double refractive_index_delta,
         double refractive_index_beta, const kvector_t magnetic_field)
-: HomogeneousMaterial(name, refractive_index_delta, refractive_index_beta)
-, m_magnetic_field(magnetic_field)
+    : HomogeneousMaterial(name, refractive_index_delta, refractive_index_beta)
+    , m_magnetic_field(magnetic_field)
 {
     initializePrivateMemebers();
 }
 
 HomogeneousMagneticMaterial* HomogeneousMagneticMaterial::clone() const
 {
-    return new HomogeneousMagneticMaterial(getName(), getRefractiveIndex(),
-            getMagneticField());
+    return new HomogeneousMagneticMaterial(getName(), getRefractiveIndex(), getMagneticField());
 }
 
 Eigen::Matrix2cd HomogeneousMagneticMaterial::getScatteringMatrix(
@@ -58,9 +55,8 @@ Eigen::Matrix2cd HomogeneousMagneticMaterial::getScatteringMatrix(
 }
 
 const IMaterial* HomogeneousMagneticMaterial::createTransformedMaterial(
-        const IRotation& rotation) const
+        const Geometry::Transform3D& transform) const
 {
-    Geometry::Transform3D transform = rotation.getTransform3D();
     kvector_t mag_field_transformed = transform.transformed(m_magnetic_field);
     return new HomogeneousMagneticMaterial(getName(), getRefractiveIndex(),
             mag_field_transformed);
diff --git a/Core/Material/HomogeneousMagneticMaterial.h b/Core/Material/HomogeneousMagneticMaterial.h
index 046566211d0481202cf8dce0139bcdb79cdd5c91..aebc7c9dddb3c08e1013cf417b523c410cb27abd 100644
--- a/Core/Material/HomogeneousMagneticMaterial.h
+++ b/Core/Material/HomogeneousMagneticMaterial.h
@@ -18,9 +18,8 @@
 
 #include "HomogeneousMaterial.h"
 
-//! @class HomogeneousMagneticMaterial
+//! A homogeneous material with magnetization.
 //! @ingroup materials
-//! @brief An homogeneous material with magnetization.
 
 class BA_CORE_API_ HomogeneousMagneticMaterial : public HomogeneousMaterial
 {
@@ -58,7 +57,8 @@ public:
 #endif
 
     //! Create a new material that is transformed with respect to this one
-    virtual const IMaterial *createTransformedMaterial(const IRotation &rotation) const;
+    virtual const IMaterial* createTransformedMaterial(
+        const Geometry::Transform3D& transform) const;
 
 protected:
     virtual void print(std::ostream &ostr) const {
diff --git a/Core/Material/HomogeneousMaterial.h b/Core/Material/HomogeneousMaterial.h
index 34dde203270ad2ac19a7fae3a6fd643e666e2c5a..d0b04733d50c487dabad5974b6960986c29401ba 100644
--- a/Core/Material/HomogeneousMaterial.h
+++ b/Core/Material/HomogeneousMaterial.h
@@ -29,64 +29,40 @@ public:
     //! Constructs a material with _name_ and _refractive_index_.
     HomogeneousMaterial(const std::string &name, const complex_t refractive_index)
         : IMaterial(name), m_refractive_index(refractive_index)
-    {
-    }
+    {}
 
     //! Constructs a material with _name_ and refractive_index parameters
     //! delta and beta (n = 1 - delta + i*beta).
     HomogeneousMaterial(const std::string &name, double refractive_index_delta,
                         double refractive_index_beta)
-        : IMaterial(name),
-          m_refractive_index(complex_t(1.0 - refractive_index_delta, refractive_index_beta))
-    {
-    }
-
+        : IMaterial(name)
+        , m_refractive_index(complex_t(1.0 - refractive_index_delta, refractive_index_beta)) {}
     virtual ~HomogeneousMaterial() {}
 
-    virtual HomogeneousMaterial* clone() const;
+    virtual HomogeneousMaterial* clone() const {
+        return new HomogeneousMaterial(getName(), getRefractiveIndex()); }
 
-    //! Return refractive index.
     virtual complex_t getRefractiveIndex() const { return m_refractive_index; }
-
-    //! Set refractive index.
     void setRefractiveIndex(const complex_t refractive_index) {
         m_refractive_index = refractive_index; }
 
 #ifndef SWIG
     //! Get the scattering matrix (~potential V) from the material.
     //! This matrix appears in the full three-dimensional Schroedinger equation.
-    virtual Eigen::Matrix2cd getScatteringMatrix(double k_mag2) const;
+    virtual Eigen::Matrix2cd getScatteringMatrix(double) const {
+        return m_refractive_index * m_refractive_index * Eigen::Matrix2cd::Identity(); }
 #endif
 
     //! Create a new material that is transformed with respect to this one
-    virtual const IMaterial *createTransformedMaterial(const IRotation &rotation) const;
+    virtual const IMaterial* createTransformedMaterial(const Geometry::Transform3D&) const {
+        return new HomogeneousMaterial(getName(), getRefractiveIndex()); }
 
 protected:
-    virtual void print(std::ostream &ostr) const
-    {
+    virtual void print(std::ostream &ostr) const {
         ostr << "HomMat:" << getName() << "<" << this << ">{ "
-             << "R=" << m_refractive_index << "}";
-    }
+             << "R=" << m_refractive_index << "}"; }
 
     complex_t m_refractive_index; //!< complex index of refraction
 };
 
-inline HomogeneousMaterial *HomogeneousMaterial::clone() const
-{
-    return new HomogeneousMaterial(getName(), getRefractiveIndex());
-}
-
-#ifndef SWIG
-inline Eigen::Matrix2cd HomogeneousMaterial::getScatteringMatrix(double) const
-{
-    return m_refractive_index * m_refractive_index * Eigen::Matrix2cd::Identity();
-}
-
-inline const IMaterial* HomogeneousMaterial::createTransformedMaterial(const IRotation&) const
-{
-    return new HomogeneousMaterial(getName(), getRefractiveIndex());
-}
-
-#endif
-
 #endif // HOMOGENEOUSMATERIAL_H
diff --git a/Core/Material/IMaterial.cpp b/Core/Material/IMaterial.cpp
index 086783ab5ea2fbe3230c7fc9f5cfd7a692f28f29..f54958c6615f36ea520af11ca51e7c624efac7ab 100644
--- a/Core/Material/IMaterial.cpp
+++ b/Core/Material/IMaterial.cpp
@@ -23,11 +23,13 @@ IMaterial *IMaterial::clone() const
         "IMaterial is an interface and should not be cloned!");
 }
 
+/*
 const IMaterial *IMaterial::createTransformedMaterial(const IRotation&) const
 {
     throw Exceptions::NotImplementedException(
         "IMaterial is an interface and should not be created!");
 }
+*/
 
 Eigen::Matrix2cd IMaterial::getScatteringMatrix(double k_mag2) const
 {
diff --git a/Core/Material/IMaterial.h b/Core/Material/IMaterial.h
index ce5a5658d1b8b40ff5a40d1e48006fc33403df9e..2b035204daa871879d9ddc46d8f2f795d82f314f 100644
--- a/Core/Material/IMaterial.h
+++ b/Core/Material/IMaterial.h
@@ -21,18 +21,19 @@
 #include "Vectors3D.h"
 #include "EigenCore.h"
 
-class IRotation;
+namespace Geometry {
+class Transform3D;
+}
 
-//! @class IMaterial
+//! Interface to a named material.
 //! @ingroup materials_internal
-//! @brief Interface to a named material.
 
 class BA_CORE_API_ IMaterial : public INamed
 {
 public:
     explicit IMaterial(const std::string& name) : INamed(name) {}
     virtual ~IMaterial() {}
-    virtual IMaterial *clone() const;
+    virtual IMaterial* clone() const;
 
     //! Indicates whether the interaction with the material is scalar.
     //! This means that different polarization states will be diffracted equally
@@ -46,14 +47,12 @@ public:
         return ostr;
     }
 
-    //! Return refractive index.
     virtual complex_t getRefractiveIndex() const { return 1.0; }
 
 #ifndef SWIG
     //! Get the effective scattering matrix from the refractive index
     //! and a given wavevector used for the specular calculation.
-    //! This matrix appears in the one-dimensional Schroedinger equation
-    //! in the z-direction
+    //! This matrix appears in the one-dimensional Schroedinger equation in the z-direction
     Eigen::Matrix2cd getSpecularScatteringMatrix(const kvector_t k) const;
 
     //! Get the scattering matrix (~potential V) from the material.
@@ -62,15 +61,14 @@ public:
 #endif
 
     //! Create a new material that is transformed with respect to this one
-    virtual const IMaterial *createTransformedMaterial(const IRotation& rotation) const;
+    virtual const IMaterial* createTransformedMaterial(
+        const Geometry::Transform3D& transform) const =0;
 
     bool operator==(const IMaterial& other) const;
 
 protected:
-    virtual void print(std::ostream& ostr) const
-    {
-        ostr << "IMat:" << getName() << "<" << this << ">";
-    }
+    virtual void print(std::ostream& ostr) const {
+        ostr << "IMat:" << getName() << "<" << this << ">"; }
 };
 
 #endif // IMATERIAL_H
diff --git a/Core/Particle/Particle.cpp b/Core/Particle/Particle.cpp
index b40d0195db761297b587f7bea046b40340a155c0..9c6d142a633a405df930fdeb5000779c5fd58ae2 100644
--- a/Core/Particle/Particle.cpp
+++ b/Core/Particle/Particle.cpp
@@ -82,11 +82,6 @@ Particle* Particle::cloneInvertB() const
     return p_result;
 }
 
-void Particle::accept(ISampleVisitor* visitor) const
-{
-    visitor->visit(this);
-}
-
 std::string Particle::to_str(int indent) const
 {
     std::stringstream ss;
@@ -111,27 +106,23 @@ IFormFactor* Particle::createTransformedFormFactor(const IRotation* p_rotation,
     const std::unique_ptr<IRotation> P_total_rotation(createComposedRotation(p_rotation));
     kvector_t total_position = getComposedTranslation(p_rotation, translation);
     std::unique_ptr<IFormFactor> P_temp_ff1;
-    if (P_total_rotation) {
+    if (P_total_rotation)
         P_temp_ff1.reset(new FormFactorDecoratorRotation(*mP_form_factor, *P_total_rotation));
-    } else {
+    else
         P_temp_ff1.reset(mP_form_factor->clone());
-    }
     std::unique_ptr<IFormFactor> P_temp_ff2;
-    if (total_position != kvector_t()) {
+    if (total_position != kvector_t())
         P_temp_ff2.reset(new FormFactorDecoratorPositionFactor(*P_temp_ff1, total_position));
-    } else {
+    else
         P_temp_ff2.swap(P_temp_ff1);
-    }
-    FormFactorDecoratorMaterial* p_ff
-        = new FormFactorDecoratorMaterial(*P_temp_ff2);
+    FormFactorDecoratorMaterial* p_ff = new FormFactorDecoratorMaterial(*P_temp_ff2);
     if (mP_material) {
         if (mP_rotation) {
             const std::unique_ptr<const IMaterial> P_transformed_material(
-                        mP_material->createTransformedMaterial(*P_total_rotation));
+                mP_material->createTransformedMaterial(P_total_rotation->getTransform3D()));
             p_ff->setMaterial(*P_transformed_material);
-        } else {
+        } else
             p_ff->setMaterial(*mP_material);
-        }
     }
     if (mP_ambient_material)
         p_ff->setAmbientMaterial(*mP_ambient_material);
diff --git a/Core/Particle/Particle.h b/Core/Particle/Particle.h
index 98a21c02ff84cdd76d67730b4c802342f0e6149b..d6c271c6ebf186f76e7feb7b0e167d987c1d5a26 100644
--- a/Core/Particle/Particle.h
+++ b/Core/Particle/Particle.h
@@ -39,35 +39,23 @@ public:
     //! Returns a clone with inverted magnetic fields
     virtual Particle* cloneInvertB() const;
 
-    //! calls the ISampleVisitor's visit method
-    virtual void accept(ISampleVisitor* visitor) const;
+    virtual void accept(ISampleVisitor* visitor) const { visitor->visit(this); }
 
-    //! Returns textual representation of *this and its descendants.
     virtual std::string to_str(int indent=0) const;
 
-    //! Sets the refractive index of the ambient material (which influences its scattering power)
     void setAmbientMaterial(const IMaterial& material) final;
-
-    //! Returns the ambient material.
     const IMaterial* getAmbientMaterial() const final { return mP_ambient_material.get(); }
 
     //! Create a form factor for this particle with an extra scattering factor
     virtual IFormFactor* createTransformedFormFactor(
         const IRotation* p_rotation, kvector_t translation) const;
 
-    //! Sets _material_.
     void setMaterial(const IMaterial& material);
-
-    //! Returns particle's material.
     const IMaterial* getMaterial() const { return mP_material.get(); }
 
-    //! Returns refractive index of the particle
     complex_t getRefractiveIndex() const;
 
-    //! Sets the form factor
     void setFormFactor(const IFormFactor& form_factor);
-
-    //! Returns the form factor
     const IFormFactor* getFormFactor() const { return mP_form_factor.get(); }
 
 protected:
diff --git a/Tests/UnitTests/Core/4/HomogeneousMagneticMaterialTest.h b/Tests/UnitTests/Core/4/HomogeneousMagneticMaterialTest.h
index 4621acb97c8a53b62cbf6fa6e7ee2a7f649bdf12..d6a95fb1305c6091f9f1cfa2371d7f471c51cab3 100644
--- a/Tests/UnitTests/Core/4/HomogeneousMagneticMaterialTest.h
+++ b/Tests/UnitTests/Core/4/HomogeneousMagneticMaterialTest.h
@@ -72,7 +72,7 @@ TEST_F(HomogeneousMagneticMaterialTest, HomogeneousMagneticMaterialTransform)
     HomogeneousMagneticMaterial material("MagMaterial", refIndex, magnetism);
 
     RotationZ transform(45.*Units::degree);
-    const IMaterial * tMaterial = material.createTransformedMaterial(transform);
+    const IMaterial * tMaterial = material.createTransformedMaterial(transform.getTransform3D());
 
     EXPECT_EQ("MagMaterial", tMaterial->getName());
     EXPECT_EQ(refIndex, tMaterial->getRefractiveIndex());
@@ -113,7 +113,7 @@ TEST_F(HomogeneousMagneticMaterialTest, HomogeneousMagneticMaterialClone)
     EXPECT_EQ(magnetism2, clone->getMagneticField());
 
     RotationZ transform(45.*Units::degree);
-    const IMaterial * tMaterial = clone->createTransformedMaterial(transform);
+    const IMaterial * tMaterial = clone->createTransformedMaterial(transform.getTransform3D());
 
     EXPECT_EQ("MagMaterial", tMaterial->getName());
     EXPECT_EQ(refIndex2, tMaterial->getRefractiveIndex());
diff --git a/Tests/UnitTests/Core/4/HomogeneousMaterialTest.h b/Tests/UnitTests/Core/4/HomogeneousMaterialTest.h
index 50aa0b72f1385ce7ebbeb26fc5db66bc311301a7..6137d43c27992257b34ad8fc81130a2c179213f6 100644
--- a/Tests/UnitTests/Core/4/HomogeneousMaterialTest.h
+++ b/Tests/UnitTests/Core/4/HomogeneousMaterialTest.h
@@ -55,7 +55,7 @@ TEST_F(HomogeneousMaterialTest, HomogeneousMaterialTransform)
     HomogeneousMaterial material("Material1", refIndex);
 
     RotationZ transform(45.*Units::degree);
-    const IMaterial * tMaterial = material.createTransformedMaterial(transform);
+    const IMaterial * tMaterial = material.createTransformedMaterial(transform.getTransform3D());
 
     EXPECT_EQ("Material1", tMaterial->getName());
     EXPECT_EQ(refIndex, tMaterial->getRefractiveIndex());
@@ -96,7 +96,7 @@ TEST_F(HomogeneousMaterialTest, HomogeneousMaterialClone)
     EXPECT_EQ(complex_t(-5.0,12.0), matrix2(1,1));
 
     RotationZ transform(45.*Units::degree);
-    const IMaterial * tMaterial = clone->createTransformedMaterial(transform);
+    const IMaterial * tMaterial = clone->createTransformedMaterial(transform.getTransform3D());
 
     EXPECT_EQ("Material1", tMaterial->getName());
     EXPECT_EQ(refIndex2, tMaterial->getRefractiveIndex());
diff --git a/auto/Wrap/libBornAgainCore.py b/auto/Wrap/libBornAgainCore.py
index e9f93d0a5fe254476c44940e6edfa5e1857b1c85..47c45fe4fff620a73ba599869feee0131f8c9f2b 100644
--- a/auto/Wrap/libBornAgainCore.py
+++ b/auto/Wrap/libBornAgainCore.py
@@ -16324,20 +16324,10 @@ class IMaterial(INamed):
     for _s in [INamed]:
         __swig_getmethods__.update(getattr(_s, '__swig_getmethods__', {}))
     __getattr__ = lambda self, name: _swig_getattr(self, IMaterial, name)
-    __repr__ = _swig_repr
-
-    def __init__(self, name):
-        """
-        __init__(IMaterial self, std::string const & name) -> IMaterial
 
-        IMaterial::IMaterial(const std::string &name)
-
-        """
-        this = _libBornAgainCore.new_IMaterial(name)
-        try:
-            self.this.append(this)
-        except:
-            self.this = this
+    def __init__(self, *args, **kwargs):
+        raise AttributeError("No constructor defined - class is abstract")
+    __repr__ = _swig_repr
     __swig_destroy__ = _libBornAgainCore.delete_IMaterial
     __del__ = lambda self: None
 
@@ -16385,16 +16375,16 @@ class IMaterial(INamed):
         return _libBornAgainCore.IMaterial_getRefractiveIndex(self)
 
 
-    def createTransformedMaterial(self, rotation):
+    def createTransformedMaterial(self, transform):
         """
-        createTransformedMaterial(IMaterial self, IRotation rotation) -> IMaterial
+        createTransformedMaterial(IMaterial self, Geometry::Transform3D const & transform) -> IMaterial
 
         const IMaterial * IMaterial::createTransformedMaterial(const IRotation &rotation) const
 
         Create a new material that is transformed with respect to this one. 
 
         """
-        return _libBornAgainCore.IMaterial_createTransformedMaterial(self, rotation)
+        return _libBornAgainCore.IMaterial_createTransformedMaterial(self, transform)
 
 
     def __eq__(self, other):
@@ -16475,16 +16465,16 @@ class HomogeneousMaterial(IMaterial):
         return _libBornAgainCore.HomogeneousMaterial_setRefractiveIndex(self, refractive_index)
 
 
-    def createTransformedMaterial(self, rotation):
+    def createTransformedMaterial(self, arg2):
         """
-        createTransformedMaterial(HomogeneousMaterial self, IRotation rotation) -> IMaterial
+        createTransformedMaterial(HomogeneousMaterial self, Geometry::Transform3D const & arg2) -> IMaterial
 
         const IMaterial * HomogeneousMaterial::createTransformedMaterial(const IRotation &rotation) const
 
         Create a new material that is transformed with respect to this one. 
 
         """
-        return _libBornAgainCore.HomogeneousMaterial_createTransformedMaterial(self, rotation)
+        return _libBornAgainCore.HomogeneousMaterial_createTransformedMaterial(self, arg2)
 
 HomogeneousMaterial_swigregister = _libBornAgainCore.HomogeneousMaterial_swigregister
 HomogeneousMaterial_swigregister(HomogeneousMaterial)
@@ -16572,16 +16562,16 @@ class HomogeneousMagneticMaterial(HomogeneousMaterial):
         return _libBornAgainCore.HomogeneousMagneticMaterial_isScalarMaterial(self)
 
 
-    def createTransformedMaterial(self, rotation):
+    def createTransformedMaterial(self, transform):
         """
-        createTransformedMaterial(HomogeneousMagneticMaterial self, IRotation rotation) -> IMaterial
+        createTransformedMaterial(HomogeneousMagneticMaterial self, Geometry::Transform3D const & transform) -> IMaterial
 
         const IMaterial * HomogeneousMagneticMaterial::createTransformedMaterial(const IRotation &rotation) const
 
         Create a new material that is transformed with respect to this one. 
 
         """
-        return _libBornAgainCore.HomogeneousMagneticMaterial_createTransformedMaterial(self, rotation)
+        return _libBornAgainCore.HomogeneousMagneticMaterial_createTransformedMaterial(self, transform)
 
     __swig_destroy__ = _libBornAgainCore.delete_HomogeneousMagneticMaterial
     __del__ = lambda self: None
diff --git a/auto/Wrap/libBornAgainCore_wrap.cpp b/auto/Wrap/libBornAgainCore_wrap.cpp
index 66f272d5dd204f2129716a159d3f71ad8f4c36e2..d2f9301cdb0e041255f85e7de8d38d9dcc37931c 100644
--- a/auto/Wrap/libBornAgainCore_wrap.cpp
+++ b/auto/Wrap/libBornAgainCore_wrap.cpp
@@ -74105,35 +74105,6 @@ SWIGINTERN PyObject *Histogram2D_swigregister(PyObject *SWIGUNUSEDPARM(self), Py
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *_wrap_new_IMaterial(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  std::string *arg1 = 0 ;
-  int res1 = SWIG_OLDOBJ ;
-  PyObject * obj0 = 0 ;
-  IMaterial *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:new_IMaterial",&obj0)) SWIG_fail;
-  {
-    std::string *ptr = (std::string *)0;
-    res1 = SWIG_AsPtr_std_string(obj0, &ptr);
-    if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_IMaterial" "', argument " "1"" of type '" "std::string const &""'"); 
-    }
-    if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_IMaterial" "', argument " "1"" of type '" "std::string const &""'"); 
-    }
-    arg1 = ptr;
-  }
-  result = (IMaterial *)new IMaterial((std::string const &)*arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IMaterial, SWIG_POINTER_NEW |  0 );
-  if (SWIG_IsNewObj(res1)) delete arg1;
-  return resultobj;
-fail:
-  if (SWIG_IsNewObj(res1)) delete arg1;
-  return NULL;
-}
-
-
 SWIGINTERN PyObject *_wrap_delete_IMaterial(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IMaterial *arg1 = (IMaterial *) 0 ;
@@ -74246,7 +74217,7 @@ fail:
 SWIGINTERN PyObject *_wrap_IMaterial_createTransformedMaterial(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IMaterial *arg1 = (IMaterial *) 0 ;
-  IRotation *arg2 = 0 ;
+  Geometry::Transform3D *arg2 = 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   void *argp2 = 0 ;
@@ -74261,15 +74232,15 @@ SWIGINTERN PyObject *_wrap_IMaterial_createTransformedMaterial(PyObject *SWIGUNU
     SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IMaterial_createTransformedMaterial" "', argument " "1"" of type '" "IMaterial const *""'"); 
   }
   arg1 = reinterpret_cast< IMaterial * >(argp1);
-  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_IRotation,  0  | 0);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_Geometry__Transform3D,  0  | 0);
   if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IMaterial_createTransformedMaterial" "', argument " "2"" of type '" "IRotation const &""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IMaterial_createTransformedMaterial" "', argument " "2"" of type '" "Geometry::Transform3D const &""'"); 
   }
   if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IMaterial_createTransformedMaterial" "', argument " "2"" of type '" "IRotation const &""'"); 
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IMaterial_createTransformedMaterial" "', argument " "2"" of type '" "Geometry::Transform3D const &""'"); 
   }
-  arg2 = reinterpret_cast< IRotation * >(argp2);
-  result = (IMaterial *)((IMaterial const *)arg1)->createTransformedMaterial((IRotation const &)*arg2);
+  arg2 = reinterpret_cast< Geometry::Transform3D * >(argp2);
+  result = (IMaterial *)((IMaterial const *)arg1)->createTransformedMaterial((Geometry::Transform3D const &)*arg2);
   resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IMaterial, 0 |  0 );
   return resultobj;
 fail:
@@ -74557,7 +74528,7 @@ fail:
 SWIGINTERN PyObject *_wrap_HomogeneousMaterial_createTransformedMaterial(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   HomogeneousMaterial *arg1 = (HomogeneousMaterial *) 0 ;
-  IRotation *arg2 = 0 ;
+  Geometry::Transform3D *arg2 = 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   void *argp2 = 0 ;
@@ -74572,15 +74543,15 @@ SWIGINTERN PyObject *_wrap_HomogeneousMaterial_createTransformedMaterial(PyObjec
     SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HomogeneousMaterial_createTransformedMaterial" "', argument " "1"" of type '" "HomogeneousMaterial const *""'"); 
   }
   arg1 = reinterpret_cast< HomogeneousMaterial * >(argp1);
-  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_IRotation,  0  | 0);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_Geometry__Transform3D,  0  | 0);
   if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "HomogeneousMaterial_createTransformedMaterial" "', argument " "2"" of type '" "IRotation const &""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "HomogeneousMaterial_createTransformedMaterial" "', argument " "2"" of type '" "Geometry::Transform3D const &""'"); 
   }
   if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "HomogeneousMaterial_createTransformedMaterial" "', argument " "2"" of type '" "IRotation const &""'"); 
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "HomogeneousMaterial_createTransformedMaterial" "', argument " "2"" of type '" "Geometry::Transform3D const &""'"); 
   }
-  arg2 = reinterpret_cast< IRotation * >(argp2);
-  result = (IMaterial *)((HomogeneousMaterial const *)arg1)->createTransformedMaterial((IRotation const &)*arg2);
+  arg2 = reinterpret_cast< Geometry::Transform3D * >(argp2);
+  result = (IMaterial *)((HomogeneousMaterial const *)arg1)->createTransformedMaterial((Geometry::Transform3D const &)*arg2);
   resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IMaterial, 0 |  0 );
   return resultobj;
 fail:
@@ -74885,7 +74856,7 @@ fail:
 SWIGINTERN PyObject *_wrap_HomogeneousMagneticMaterial_createTransformedMaterial(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   HomogeneousMagneticMaterial *arg1 = (HomogeneousMagneticMaterial *) 0 ;
-  IRotation *arg2 = 0 ;
+  Geometry::Transform3D *arg2 = 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   void *argp2 = 0 ;
@@ -74900,15 +74871,15 @@ SWIGINTERN PyObject *_wrap_HomogeneousMagneticMaterial_createTransformedMaterial
     SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HomogeneousMagneticMaterial_createTransformedMaterial" "', argument " "1"" of type '" "HomogeneousMagneticMaterial const *""'"); 
   }
   arg1 = reinterpret_cast< HomogeneousMagneticMaterial * >(argp1);
-  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_IRotation,  0  | 0);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_Geometry__Transform3D,  0  | 0);
   if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "HomogeneousMagneticMaterial_createTransformedMaterial" "', argument " "2"" of type '" "IRotation const &""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "HomogeneousMagneticMaterial_createTransformedMaterial" "', argument " "2"" of type '" "Geometry::Transform3D const &""'"); 
   }
   if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "HomogeneousMagneticMaterial_createTransformedMaterial" "', argument " "2"" of type '" "IRotation const &""'"); 
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "HomogeneousMagneticMaterial_createTransformedMaterial" "', argument " "2"" of type '" "Geometry::Transform3D const &""'"); 
   }
-  arg2 = reinterpret_cast< IRotation * >(argp2);
-  result = (IMaterial *)((HomogeneousMagneticMaterial const *)arg1)->createTransformedMaterial((IRotation const &)*arg2);
+  arg2 = reinterpret_cast< Geometry::Transform3D * >(argp2);
+  result = (IMaterial *)((HomogeneousMagneticMaterial const *)arg1)->createTransformedMaterial((Geometry::Transform3D const &)*arg2);
   resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IMaterial, 0 |  0 );
   return resultobj;
 fail:
@@ -108697,12 +108668,6 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Histogram2D_dynamicCast", _wrap_Histogram2D_dynamicCast, METH_VARARGS, (char *)"Histogram2D_dynamicCast(IHistogram pHistogram) -> Histogram2D"},
 	 { (char *)"delete_Histogram2D", _wrap_delete_Histogram2D, METH_VARARGS, (char *)"delete_Histogram2D(Histogram2D self)"},
 	 { (char *)"Histogram2D_swigregister", Histogram2D_swigregister, METH_VARARGS, NULL},
-	 { (char *)"new_IMaterial", _wrap_new_IMaterial, METH_VARARGS, (char *)"\n"
-		"new_IMaterial(std::string const & name) -> IMaterial\n"
-		"\n"
-		"IMaterial::IMaterial(const std::string &name)\n"
-		"\n"
-		""},
 	 { (char *)"delete_IMaterial", _wrap_delete_IMaterial, METH_VARARGS, (char *)"\n"
 		"delete_IMaterial(IMaterial self)\n"
 		"\n"
@@ -108738,7 +108703,7 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		""},
 	 { (char *)"IMaterial_createTransformedMaterial", _wrap_IMaterial_createTransformedMaterial, METH_VARARGS, (char *)"\n"
-		"IMaterial_createTransformedMaterial(IMaterial self, IRotation rotation) -> IMaterial\n"
+		"IMaterial_createTransformedMaterial(IMaterial self, Geometry::Transform3D const & transform) -> IMaterial\n"
 		"\n"
 		"const IMaterial * IMaterial::createTransformedMaterial(const IRotation &rotation) const\n"
 		"\n"
@@ -108785,7 +108750,7 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		""},
 	 { (char *)"HomogeneousMaterial_createTransformedMaterial", _wrap_HomogeneousMaterial_createTransformedMaterial, METH_VARARGS, (char *)"\n"
-		"HomogeneousMaterial_createTransformedMaterial(HomogeneousMaterial self, IRotation rotation) -> IMaterial\n"
+		"HomogeneousMaterial_createTransformedMaterial(HomogeneousMaterial self, Geometry::Transform3D const & arg3) -> IMaterial\n"
 		"\n"
 		"const IMaterial * HomogeneousMaterial::createTransformedMaterial(const IRotation &rotation) const\n"
 		"\n"
@@ -108835,7 +108800,7 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		""},
 	 { (char *)"HomogeneousMagneticMaterial_createTransformedMaterial", _wrap_HomogeneousMagneticMaterial_createTransformedMaterial, METH_VARARGS, (char *)"\n"
-		"HomogeneousMagneticMaterial_createTransformedMaterial(HomogeneousMagneticMaterial self, IRotation rotation) -> IMaterial\n"
+		"HomogeneousMagneticMaterial_createTransformedMaterial(HomogeneousMagneticMaterial self, Geometry::Transform3D const & transform) -> IMaterial\n"
 		"\n"
 		"const IMaterial * HomogeneousMagneticMaterial::createTransformedMaterial(const IRotation &rotation) const\n"
 		"\n"