Index: /OpenSceneGraph/trunk/include/osg/CopyOp
===================================================================
--- /OpenSceneGraph/trunk/include/osg/CopyOp (revision 9407)
+++ /OpenSceneGraph/trunk/include/osg/CopyOp (revision 10362)
@@ -31,4 +31,5 @@
 class PrimitiveSet;
 class Shape;
+class NodeCallback;
 
 /** Copy Op(erator) used to control whether shallow or deep copy is used
@@ -53,4 +54,5 @@
             DEEP_COPY_SHAPES            = 1<<9,
             DEEP_COPY_UNIFORMS          = 1<<10,
+            DEEP_COPY_NODECALLBACKS     = 1<<11,
             DEEP_COPY_ALL               = 0x7FFFFFFF
         };
@@ -73,4 +75,5 @@
         virtual Shape*          operator() (const Shape* shape) const;
         virtual Uniform*        operator() (const Uniform* shape) const;
+        virtual NodeCallback*   operator() (const NodeCallback* nodecallback) const;
 
     protected:
Index: /OpenSceneGraph/trunk/src/osg/CopyOp.cpp
===================================================================
--- /OpenSceneGraph/trunk/src/osg/CopyOp.cpp (revision 6459)
+++ /OpenSceneGraph/trunk/src/osg/CopyOp.cpp (revision 10362)
@@ -66,2 +66,22 @@
 
 
+NodeCallback* CopyOp::operator() (const NodeCallback* nc) const
+{
+    if (nc && _flags&DEEP_COPY_NODECALLBACKS)
+    {
+        // deep copy the full chain of callback
+        osg::NodeCallback* first = dynamic_cast<osg::NodeCallback*>(nc->clone(*this));
+        first->setNestedCallback(0);
+        nc = nc->getNestedCallback();
+        while (nc) 
+        {
+            osg::NodeCallback* ucb = dynamic_cast<osg::NodeCallback*>(nc->clone(*this));
+            ucb->setNestedCallback(0);
+            first->addNestedCallback(ucb);
+            nc = nc->getNestedCallback();
+        }
+        return first;
+    }
+    else
+        return const_cast<NodeCallback*>(nc);
+}
Index: /OpenSceneGraph/trunk/src/osg/Node.cpp
===================================================================
--- /OpenSceneGraph/trunk/src/osg/Node.cpp (revision 9897)
+++ /OpenSceneGraph/trunk/src/osg/Node.cpp (revision 10362)
@@ -75,8 +75,8 @@
         _boundingSphereComputed(node._boundingSphereComputed),
         _parents(), // leave empty as parentList is managed by Group.
-        _updateCallback(node._updateCallback),
+        _updateCallback(copyop(node._updateCallback.get())),
         _numChildrenRequiringUpdateTraversal(0), // assume no children yet.
         _numChildrenRequiringEventTraversal(0), // assume no children yet.
-        _cullCallback(node._cullCallback),
+        _cullCallback(copyop(node._cullCallback.get())),
         _cullingActive(node._cullingActive),
         _numChildrenWithCullingDisabled(0), // assume no children yet.
