diff --git a/modules/gfx/src/impl/simple_renderer.cc b/modules/gfx/src/impl/simple_renderer.cc
index cbd012f3540812738ece08c16560bbd792fd1ff7..4e228f0dc06f9e7fee003411bbf02f241de77e26 100644
--- a/modules/gfx/src/impl/simple_renderer.cc
+++ b/modules/gfx/src/impl/simple_renderer.cc
@@ -24,7 +24,7 @@
 #include <ost/gfx/gl_helper.hh>
 #include <ost/gfx/scene.hh>
 #include <ost/gfx/entity.hh>
-
+#include <ost/gfx/povray.hh>
 #include "simple_renderer.hh"
 
 namespace ost { namespace gfx { namespace impl {
@@ -316,4 +316,28 @@ SimpleRenderer::~SimpleRenderer()
 
 }
 
+void SimpleRenderer::RenderPov(PovState& pov, const std::string& name)
+{
+  pov.write_merge_or_union(name);
+  
+  for (AtomEntryMap::const_iterator it=view_.atom_map.begin();
+       it!=view_.atom_map.end();++it) {
+    pov.write_sphere(it->second.atom.GetPos(),
+                     options_->GetLineWidth()*0.05,
+                     it->second.color,
+                     name);
+  }
+
+  for(BondEntryList::const_iterator it=view_.bond_list.begin();it!=view_.bond_list.end();++it) {
+    const geom::Vec3& p0=it->bond.GetFirst().GetPos();
+    const geom::Vec3& p2=it->bond.GetSecond().GetPos();
+    geom::Vec3 p1=(p0+p2)*0.5;
+    pov.write_cyl(p0,p1,options_->GetLineWidth()*0.05,
+                  it->atom1->color,name,true);
+    pov.write_cyl(p1,p2,options_->GetLineWidth()*0.05,
+                  it->atom2->color,name,true);
+  }
+  pov.inc() << " }\n";
+}
+
 }}}
diff --git a/modules/gfx/src/impl/simple_renderer.hh b/modules/gfx/src/impl/simple_renderer.hh
index 87162e168b0df064b069f8236f6b8136e1b086ac..78038ffe543780b5d92389866d142c105cbcd8ba 100644
--- a/modules/gfx/src/impl/simple_renderer.hh
+++ b/modules/gfx/src/impl/simple_renderer.hh
@@ -45,7 +45,7 @@ public:
   
   virtual void Render(RenderPass pass);
   virtual ~SimpleRenderer();
-  
+  virtual void RenderPov(PovState& pov, const std::string& name);
   void BlurSnapshot();
 private:
   void RenderBlur();