diff --git a/src/java/org/web3d/vrml/nodes/VRMLWorldRootChildNodeType.java b/src/java/org/web3d/vrml/nodes/VRMLWorldRootChildNodeType.java
index 9a5e5ec24bebdbf1d6da5c193f3253ab45eac6c2..1e84f9e97d4178c8766ae717b33f918394184425 100644
--- a/src/java/org/web3d/vrml/nodes/VRMLWorldRootChildNodeType.java
+++ b/src/java/org/web3d/vrml/nodes/VRMLWorldRootChildNodeType.java
@@ -18,8 +18,8 @@ package org.web3d.vrml.nodes;
 // None
 
 /**
- * An abstract representation of the a node that can be used directly at the
- * root of the scene graph.
+ * An abstract representation of a node that can be used directly at the root of
+ * the scene graph.
  * <p>
  *
  * Only X3DChildNode and LayerSet nodes can appear at the root level of a
diff --git a/src/java/org/web3d/vrml/renderer/DefaultNodeFactory.java b/src/java/org/web3d/vrml/renderer/DefaultNodeFactory.java
index c55149ae5f8ebd2a4c2dacc08725254375f34c0b..80f19068bbc8fed06c7878e29ad74924feffef47 100644
--- a/src/java/org/web3d/vrml/renderer/DefaultNodeFactory.java
+++ b/src/java/org/web3d/vrml/renderer/DefaultNodeFactory.java
@@ -107,7 +107,7 @@ public class DefaultNodeFactory
     private static final int INC_SIZE = 4;
 
     /** The class listing for the constructor for clone copying */
-    private static final Class<?>[] NODE_CLASS = { VRMLNodeType.class };
+    private static final Class<?> NODE_CLASS = VRMLNodeType.class;
 
     /** Message if the spec version number for VRML is not 2.0 */
     private static final String INVALID_VRML_SPEC_VERSION =
@@ -338,7 +338,7 @@ public class DefaultNodeFactory
      * Set specification version
      * @param major 2 (VRML97), 3, or 4
      * @param minor 0, 1, 2, 3
-     * @throws UnsupportedSpecVersionException 
+     * @throws UnsupportedSpecVersionException
      */
     @Override
     public void setSpecVersion(int major, int minor) throws UnsupportedSpecVersionException
diff --git a/src/java/org/web3d/vrml/renderer/ProtoCopier.java b/src/java/org/web3d/vrml/renderer/ProtoCopier.java
index 932b1944cfc154192141aee4ea828ed2550eacc8..0969ab5ecabad86005edd3da398b464a04dcf5cc 100644
--- a/src/java/org/web3d/vrml/renderer/ProtoCopier.java
+++ b/src/java/org/web3d/vrml/renderer/ProtoCopier.java
@@ -146,10 +146,10 @@ public class ProtoCopier implements SceneGraphTraversalSimpleObserver {
         if(scn == null)
             throw new NullPointerException("No scene supplied");
 
-        scene = scn;
-        protoInstance = src;
-        majorVersion = major;
-        minorVersion = minor;
+        this.scene = scn;
+        this.protoInstance = src;
+        this.majorVersion = major;
+        this.minorVersion = minor;
         this.nodeMap = nodeMap;
         this.staticNodes = staticNodes;
     }
@@ -210,17 +210,19 @@ public class ProtoCopier implements SceneGraphTraversalSimpleObserver {
             protoInstance.addBodyChild(out_kid);
         } else {
             VRMLNodeType out_parent = (VRMLNodeType)nodeMap.get(parent);
-            VRMLFieldDeclaration decl = parent.getFieldDeclaration(field);
+            if (out_parent != null) {
+                VRMLFieldDeclaration decl = parent.getFieldDeclaration(field);
 
-            int idx = out_parent.getFieldIndex(decl.getName());
+                int idx = out_parent.getFieldIndex(decl.getName());
 
-            try {
-                out_parent.setValue(idx, out_kid);
-            } catch(FieldException ife) {
-                errorReporter.warningReport(
-                    "ProtoCopier error setting copied node! Parent:" +
-                    parent.getClass() + " child: " + child.getClass() +
-                   " field " + field, ife);
+                try {
+                    out_parent.setValue(idx, out_kid);
+                } catch (FieldException ife) {
+                    errorReporter.warningReport(
+                            "ProtoCopier error setting copied node! Parent:"
+                            + parent.getClass() + " child: " + child.getClass()
+                            + " field " + field, ife);
+                }
             }
         }
     }
@@ -322,7 +324,11 @@ public class ProtoCopier implements SceneGraphTraversalSimpleObserver {
                 break;
 
             case TypeConstants.ScriptNodeType:
-System.out.println("ProtoCopier can't handle script fields containing protos. Must fix");
+                System.err.println("ProtoCopier can't handle script fields containing protos. Must fix");
+                break;
+
+            default:
+                break;
         }
     }
 }
diff --git a/src/java/org/web3d/vrml/renderer/common/nodes/shape/BaseShape.java b/src/java/org/web3d/vrml/renderer/common/nodes/shape/BaseShape.java
index 2745c34c339a6bd237b3fc61bf1bebf7903df943..4155c083bf9aa912718dc2d25c2c0c16bcc6bdad 100644
--- a/src/java/org/web3d/vrml/renderer/common/nodes/shape/BaseShape.java
+++ b/src/java/org/web3d/vrml/renderer/common/nodes/shape/BaseShape.java
@@ -49,13 +49,13 @@ public abstract class BaseShape extends AbstractNode
 
     /** Index for the bboxCenter field */
     private static final int FIELD_BBOX_CENTER = LAST_NODE_INDEX + 4;
-    
+
     /** Index for the bboxDisplay field */
     private static final int FIELD_BBOX_DISPLAY = LAST_NODE_INDEX + 5;
-    
+
     /** Index for the visible field */
     private static final int FIELD_VISIBLE = LAST_NODE_INDEX + 6;
-    
+
     /** Index for the castShadow field */
     private static final int FIELD_CASTSHADOW = LAST_NODE_INDEX + 7;
 
@@ -119,13 +119,13 @@ public abstract class BaseShape extends AbstractNode
 
     /** SFVec3f bboxSize NULL */
     protected float[] vfBboxSize;
-    
+
     /** SFBool bboxDisplay false */
     protected boolean vfBboxDisplay;
-    
+
     /** SFBool visible true */
     protected boolean vfVisible;
-    
+
     /** SFBool castShadow true */
     protected boolean vfCastShadow;
 
@@ -196,7 +196,7 @@ public abstract class BaseShape extends AbstractNode
         fieldMap.put("bboxDisplay", FIELD_BBOX_DISPLAY);
         fieldMap.put("visible", FIELD_VISIBLE);
         fieldMap.put("castShadow", FIELD_CASTSHADOW);
-        
+
         forceLighting = PropertyTools.fetchSystemProperty(FORCE_LIGHTING_PROP,
                 DEFAULT_FORCE_LIGHTING);
     }
@@ -224,7 +224,7 @@ public abstract class BaseShape extends AbstractNode
      * @param node The node to copy
      * @throws IllegalArgumentException Incorrect node type
      */
-    protected BaseShape(BaseShape node) {
+    protected BaseShape(VRMLNodeType node) {
         this(); // invoke default constructor
 
         checkNodeType(node);
@@ -240,12 +240,12 @@ public abstract class BaseShape extends AbstractNode
         vfBboxSize[0] = field[0];
         vfBboxSize[1] = field[1];
         vfBboxSize[2] = field[2];
-        
+
         boolean b = ((VRMLBoundedNodeType)node).getBboxDisplay();
         vfBboxDisplay = b;
          b = ((VRMLBoundedNodeType)node).getVisible();
         vfVisible = b;
-         b = node.getCastShadow();
+         b = ((BaseShape)node).getCastShadow();
         vfCastShadow = b;
     }
 
@@ -417,17 +417,17 @@ public abstract class BaseShape extends AbstractNode
     public float[] getBboxSize() {
         return vfBboxSize;
     }
-    
+
     @Override
     public boolean getBboxDisplay() {
         return vfBboxDisplay;
     }
-    
+
     @Override
     public boolean getVisible() {
         return vfVisible;
     }
-    
+
     public boolean getCastShadow() {
         return vfCastShadow;
     }
@@ -488,7 +488,7 @@ public abstract class BaseShape extends AbstractNode
     //----------------------------------------------------------
     // Methods defined by LocalColorsListener
     //----------------------------------------------------------
-    
+
     /**
      * The localColors state has change.
      *
@@ -628,21 +628,21 @@ public abstract class BaseShape extends AbstractNode
                 fieldData.dataType = VRMLFieldData.FLOAT_ARRAY_DATA;
                 fieldData.numElements = 1;
                 break;
-                
+
             case FIELD_BBOX_DISPLAY:
                 fieldData.clear();
                 fieldData.booleanValue = vfBboxDisplay;
                 fieldData.dataType = VRMLFieldData.BOOLEAN_DATA;
                 fieldData.numElements = 1;
                 break;
-                
+
             case FIELD_VISIBLE:
                 fieldData.clear();
                 fieldData.booleanValue = vfVisible;
                 fieldData.dataType = VRMLFieldData.BOOLEAN_DATA;
                 fieldData.numElements = 1;
                 break;
-                
+
             case FIELD_CASTSHADOW:
                 fieldData.clear();
                 fieldData.booleanValue = vfCastShadow;
@@ -703,7 +703,7 @@ public abstract class BaseShape extends AbstractNode
                 ifve.getMessage());
         }
     }
-    
+
     @Override
     public void setValue(int index, boolean value) {
         switch(index)
@@ -711,15 +711,15 @@ public abstract class BaseShape extends AbstractNode
             case FIELD_BBOX_DISPLAY:
                 setBboxDisplay(value);
                 break;
-                
+
             case FIELD_VISIBLE:
                 setVisible(value);
                 break;
-                
+
             case FIELD_CASTSHADOW:
                 setCastShadow(value);
                 break;
-            
+
             default:
                 super.setValue(index, value);
         }
@@ -828,30 +828,30 @@ public abstract class BaseShape extends AbstractNode
         vfBboxSize[1] = newBboxSize[1];
         vfBboxSize[2] = newBboxSize[2];
     }
-    
-    /** Set the bounding box display for this node. Only used by the field 
+
+    /** Set the bounding box display for this node. Only used by the field
      * parser
-     * 
+     *
      * @param val the display value to set
      */
     @Override
     public void setBboxDisplay(boolean val) {
         vfBboxDisplay = val;
     }
-    
-    /** Set visible field for this node. Only used by the field 
+
+    /** Set visible field for this node. Only used by the field
      * parser
-     * 
+     *
      * @param val the display value to set
      */
     @Override
     public void setVisible(boolean val) {
         vfVisible = val;
     }
-    
-    /** Set castShadow field for this node. Only used by the field 
+
+    /** Set castShadow field for this node. Only used by the field
      * parser
-     * 
+     *
      * @param val the display value to set
      */
     public void setCastShadow(boolean val) {
diff --git a/src/java/org/web3d/vrml/renderer/ogl/nodes/shape/OGLShape.java b/src/java/org/web3d/vrml/renderer/ogl/nodes/shape/OGLShape.java
index e04de74cc212159bd406bf2d66909c159f684ab8..68d6ce39258ff0d8057135affff82739830395ae 100644
--- a/src/java/org/web3d/vrml/renderer/ogl/nodes/shape/OGLShape.java
+++ b/src/java/org/web3d/vrml/renderer/ogl/nodes/shape/OGLShape.java
@@ -76,6 +76,7 @@ public class OGLShape extends BaseShape
      * Construct a new default shape node implementation.
      */
     public OGLShape() {
+        super();
         checkMaterialListener = false;
         shareCount = 0;
     }
@@ -88,7 +89,7 @@ public class OGLShape extends BaseShape
      * @param node The node to copy
      * @throws IllegalArgumentException Incorrect node type
      */
-    public OGLShape(BaseShape node) {
+    public OGLShape(VRMLNodeType node) {
         super(node);
         checkMaterialListener = false;
     }