diff --git a/src/planet.cpp b/src/planet.cpp
index 932f85d..bdf2164 100644
--- a/src/planet.cpp
+++ b/src/planet.cpp
@@ -12,6 +12,7 @@ Planet::Planet(StarSystem::SBody* sbody) : Body() {
   this->sbody = *sbody;
   this->sbody.children.clear();
   this->sbody.parent = 0;
+  crudDList = 0;
 }
 
 Planet::~Planet(void) {
@@ -566,6 +567,10 @@ void Planet::Render(const Frame* a_camFrame) {
   glColor3f(1, 1, 1);
 
   if(apparent_size < 0.001) {
+    if(crudDList) {
+      glDeleteLists(crudDList, 1);
+      crudDList = 0;
+    }
     glDisable(GL_LIGHTING);
     glPointSize(1.0);
     glBegin(GL_POINTS);
@@ -573,13 +578,19 @@ void Planet::Render(const Frame* a_camFrame) {
     glEnd();
     glEnable(GL_LIGHTING);
   } else {
-    glScalef(rad, rad, rad);
-    /* This is a rather brittle test.. */
-    if(sbody.type < StarSystem::TYPE_PLANET_DWARF) {
-      DrawGasGiant();
-    } else {
-      DrawRockyPlanet();
+    if(!crudDList) {
+      crudDList = glGenLists(1);
+      glNewList(crudDList, GL_COMPILE);
+      /* This is a rather brittle test.. */
+      if(sbody.type < StarSystem::TYPE_PLANET_DWARF) {
+        DrawGasGiant();
+      } else {
+        DrawRockyPlanet();
+      }
+      glEndList();
     }
+    glScalef(rad, rad, rad);
+    glCallList(crudDList);
     glClear(GL_DEPTH_BUFFER_BIT);
   }
   glPopMatrix();
diff --git a/src/planet.h b/src/planet.h
index cff2fa1..05778cb 100644
--- a/src/planet.h
+++ b/src/planet.h
@@ -22,5 +22,6 @@ private:
   double radius;
   dGeomID geom;
   StarSystem::SBody sbody;
+  GLuint crudDList;
 };