diff --git a/SimDynamics/DynamicsEngine/BulletEngine/BulletCoinQtViewer.cpp b/SimDynamics/DynamicsEngine/BulletEngine/BulletCoinQtViewer.cpp
index 1a92a4d2fb73badbeae2c6e884499f0334669596..a83c0a639182823060855531212053abed483415 100644
--- a/SimDynamics/DynamicsEngine/BulletEngine/BulletCoinQtViewer.cpp
+++ b/SimDynamics/DynamicsEngine/BulletEngine/BulletCoinQtViewer.cpp
@@ -17,6 +17,7 @@ namespace SimDynamics
 
 
 BulletCoinQtViewer::BulletCoinQtViewer(DynamicsWorldPtr world)
+: warned_norealtime(false)
 {
 	bulletTimeStepMsec = 16; // 60FPS
 	bulletMaxSubSteps = 1;
@@ -164,7 +165,15 @@ void BulletCoinQtViewer::stepPhysics()
 		} */
 
 		if ((ms / 1000.0f) > bulletMaxSubSteps * bulletTimeStepMsec) {
-			VR_INFO << "Elapsed time (" << (ms / 1000.0f) << "ms) too long: Simulation is not running in realtime." << endl;
+			if (!warned_norealtime)
+			{
+				VR_INFO << "Elapsed time (" << (ms / 1000.0f) << "ms) too long: Simulation is not running in realtime." << endl;
+				warned_norealtime = true;
+			}
+		}
+		else
+		{
+			warned_norealtime = false;
 		}
 
 		btScalar dt1 = btScalar(ms / 1000000.0f);
diff --git a/SimDynamics/DynamicsEngine/BulletEngine/BulletCoinQtViewer.h b/SimDynamics/DynamicsEngine/BulletEngine/BulletCoinQtViewer.h
index f1dbf4c4765fde55e250b9600c85fc3a1886938c..26c239726f76fd83da4ebfe8819b0c8920ae3fe3 100644
--- a/SimDynamics/DynamicsEngine/BulletEngine/BulletCoinQtViewer.h
+++ b/SimDynamics/DynamicsEngine/BulletEngine/BulletCoinQtViewer.h
@@ -169,6 +169,8 @@ protected:
 	int bulletTimeStepMsec;
 	int bulletMaxSubSteps;
 
+	bool warned_norealtime;
+
 	bool enablePhysicsUpdates;
 
 	boost::recursive_mutex engineMutex;