diff --git a/modules/gfx/src/exporter.cc b/modules/gfx/src/exporter.cc
new file mode 100644
index 0000000000000000000000000000000000000000..28dbd9b692365f4cfd1590d584a92a0ebbac7477
--- /dev/null
+++ b/modules/gfx/src/exporter.cc
@@ -0,0 +1,62 @@
+//------------------------------------------------------------------------------
+// This file is part of the OpenStructure project <www.openstructure.org>
+//
+// Copyright (C) 2008-2011 by the OpenStructure authors
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License as published by the Free
+// Software Foundation; either version 3.0 of the License, or (at your option)
+// any later version.
+// This library is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+// FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
+// details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this library; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+//------------------------------------------------------------------------------
+
+#include <ost/gfx/scene.hh>
+#include "exporter.hh"
+
+namespace ost { namespace gfx {
+
+  void Exporter::SetupTransform(const Scene* scene)
+  {
+    vertex_tf_=geom::Mat4();
+    normal_tf_=geom::Mat3();
+    geom::Mat4 Tmat,Rmat,Smat,Cmat;
+    if(to_origin_) {
+      geom::Vec3 trans=scene->GetTransform().GetTrans();
+      geom::Vec3 cen=scene->GetTransform().GetCenter();
+      vertex_tf_=geom::Mat4(scene->GetTransform().GetRot()) *
+                 geom::Mat4(scale_, 0.0, 0.0, 0.0,
+                            0.0, scale_, 0.0, 0.0,
+                            0.0, 0.0, scale_, 0.0,
+                            0.0, 0.0, 0.0, 1.0)*
+                 geom::Mat4(1.0,0.0,0.0,-cen[0],
+                           0.0,1.0,0.0,-cen[1],
+                           0.0,0.0,1.0,-cen[2],
+                           0.0,0.0,0.0,1.0);
+      normal_tf_=scene->GetTransform().GetRot();
+    } else {
+      vertex_tf_=geom::Mat4(scale_, 0.0, 0.0, 0.0,
+                            0.0, scale_, 0.0, 0.0,
+                            0.0, 0.0, scale_, 0.0,
+                            0.0, 0.0, 0.0, 1.0);
+    }
+  }
+
+  void Exporter::TransformPosition(float* v) const
+  {
+    geom::Vec3 result(vertex_tf_*geom::Vec4(v[0],v[1],v[2],1.0));
+    v[0]=result[0]; v[1]=result[1]; v[2]=result[2];
+  }
+
+  void Exporter::TransformNormal(float* n) const
+  {
+    geom::Vec3 result=normal_tf_*geom::Vec3(n[0],n[1],n[2]);
+    n[0]=result[0]; n[1]=result[1]; n[2]=result[2];
+  }
+}} // ns