Index: render.cpp
===================================================================
--- render.cpp	(revision 4432)
+++ render.cpp	(working copy)
@@ -8392,7 +8392,7 @@
 {
     bool visibleAsPoint = rle.appMag < faintestPlanetMag && body.isVisibleAsPoint();
 
-    if ((rle.discSizeInPixels > 1 || visibleAsPoint || isLabeled) && body.isVisible())
+    if (rle.discSizeInPixels > 1 || visibleAsPoint || isLabeled)
     {
         rle.renderableType = RenderListEntry::RenderableBody;
         rle.body = &body;
@@ -8563,10 +8563,23 @@
             }
 
             bool visibleAsPoint = appMag < faintestPlanetMag && body->isVisibleAsPoint();
-            bool isLabeled = (body->getClassification() & labelClassMask) != 0;
-
-            if ((discSize > 1 || visibleAsPoint || isLabeled) && body->isVisible())
+            bool isLabeled = (body->getOrbitClassification() & labelClassMask) != 0;
+            bool visible = body->isVisible();
+            
+            // Special case for barycenters of planetary systems. Ordinarily, labels of invisible
+            // objects should not be shown, but we do want them to be shown for planetary system
+            // barycenters (e.g. Pluto-Charon)
+            if (!visible && isLabeled)
             {
+                if (body->getClassification() == Body::Invisible &&
+                    (body->getOrbitClassification() & (Body::Planet | Body::DwarfPlanet | Body::Moon)))
+                {
+                    visible = true;
+                }
+            }
+                        
+            if ((discSize > 1 || visibleAsPoint || isLabeled) && visible)
+            {
                 RenderListEntry rle;
 
                 rle.position = Point3f((float) pos_v.x, (float) pos_v.y, (float) pos_v.z);
@@ -10811,6 +10824,11 @@
     {
         body->getRings()->texture.find(textureResolution);
     }
+    
+    if (body->getGeometry() != InvalidResource)
+    {
+        GetGeometryManager()->find(body->getGeometry());
+    }
 }
 
 

