Index: OpenSceneGraph/trunk/src/osgPlugins/Inventor/PendulumCallback.cpp
===================================================================
--- OpenSceneGraph/trunk/src/osgPlugins/Inventor/PendulumCallback.cpp (revision 6051)
+++ OpenSceneGraph/trunk/src/osgPlugins/Inventor/PendulumCallback.cpp (revision 11032)
@@ -3,5 +3,5 @@
 #include "PendulumCallback.h"
 
-PendulumCallback::PendulumCallback(const osg::Vec3& axis, 
+PendulumCallback::PendulumCallback(const osg::Vec3& axis,
                                          float startAngle, float endAngle,
                                          float frequency)
@@ -11,5 +11,5 @@
     _endAngle = endAngle;
     _frequency = frequency;
-    
+
     _previousTraversalNumber = -1;
     _previousTime = -1.0;
@@ -27,7 +27,7 @@
 
     const osg::FrameStamp* fs = nv->getFrameStamp();
-    if (!fs) 
-        return; 
-    
+    if (!fs)
+        return;
+
     // ensure that we do not operate on this node more than
     // once during this traversal.  This is an issue since node
@@ -36,13 +36,15 @@
     {
         double currentTime = fs->getSimulationTime();
+        if (_previousTime == -1.)
+            _previousTime = currentTime;
         _angle += (currentTime - _previousTime) * 2 * osg::PI * _frequency;
-        
-        double frac = 0.5 + 0.5 * sin(_angle);
-        double rotAngle = _endAngle  - _startAngle - osg::PI 
+
+        double frac = 0.5 - 0.5 * cos(_angle);
+        double rotAngle = //_endAngle  - _startAngle - osg::PI
                 + (1.0 - frac) * _startAngle + frac * _endAngle;
 
         // update the specified transform
         transform->setMatrix(osg::Matrix::rotate(rotAngle, _axis));
-            
+
         _previousTraversalNumber = nv->getTraversalNumber();
         _previousTime = currentTime;
@@ -53,2 +55,3 @@
 
 }
+
