Index: /OpenSceneGraph/trunk/include/osgShadow/ShadowSettings
===================================================================
--- /OpenSceneGraph/trunk/include/osgShadow/ShadowSettings (revision 13108)
+++ /OpenSceneGraph/trunk/include/osgShadow/ShadowSettings (revision 13110)
@@ -66,4 +66,8 @@
         double getMinimumShadowMapNearFarRatio() const { return _minimumShadowMapNearFarRatio; }
 
+        void setMaximumShadowMapDistance(double distance) { _maximumShadowMapDistance = distance; }
+        double getMaximumShadowMapDistance() const { return _maximumShadowMapDistance; }
+        
+
         enum ShadowMapProjectionHint
         {
@@ -127,4 +131,5 @@
 
         double                  _minimumShadowMapNearFarRatio;
+        double                  _maximumShadowMapDistance;
         ShadowMapProjectionHint _shadowMapProjectionHint;
         double                  _perspectiveShadowMapCutOffAngle;
Index: /OpenSceneGraph/trunk/src/osgShadow/ViewDependentShadowMap.cpp
===================================================================
--- /OpenSceneGraph/trunk/src/osgShadow/ViewDependentShadowMap.cpp (revision 13109)
+++ /OpenSceneGraph/trunk/src/osgShadow/ViewDependentShadowMap.cpp (revision 13110)
@@ -800,7 +800,10 @@
     }
 
-    //minZNear = osg::maximum(10.0,minZNear);
-    //maxZFar = osg::minimum(60.0,maxZFar);
-
+    // clamp the minZNear and maxZFar to those provided by ShadowSettings
+    maxZFar = osg::minimum(settings->getMaximumShadowMapDistance(),maxZFar);
+    if (minZNear>maxZFar) minZNear = maxZFar*settings->getMinimumShadowMapNearFarRatio();
+
+    //OSG_NOTICE<<"maxZFar "<<maxZFar<<std::endl;
+    
     Frustum frustum(&cv, minZNear, maxZFar);
 
Index: /OpenSceneGraph/trunk/src/osgShadow/ShadowSettings.cpp
===================================================================
--- /OpenSceneGraph/trunk/src/osgShadow/ShadowSettings.cpp (revision 13108)
+++ /OpenSceneGraph/trunk/src/osgShadow/ShadowSettings.cpp (revision 13110)
@@ -13,4 +13,5 @@
 
 #include <osgShadow/ShadowSettings>
+#include <float.h>
 
 using namespace osgShadow;
@@ -25,4 +26,5 @@
     _textureSize(2048,2048),
     _minimumShadowMapNearFarRatio(0.05),
+    _maximumShadowMapDistance(DBL_MAX),
     _shadowMapProjectionHint(PERSPECTIVE_SHADOW_MAP),
     _perspectiveShadowMapCutOffAngle(2.0),
@@ -47,4 +49,5 @@
     _textureSize(ss._textureSize),
     _minimumShadowMapNearFarRatio(ss._minimumShadowMapNearFarRatio),
+    _maximumShadowMapDistance(ss._maximumShadowMapDistance),
     _shadowMapProjectionHint(ss._shadowMapProjectionHint),
     _perspectiveShadowMapCutOffAngle(ss._perspectiveShadowMapCutOffAngle),
Index: /OpenSceneGraph/trunk/examples/osgshadow/osgshadow.cpp
===================================================================
--- /OpenSceneGraph/trunk/examples/osgshadow/osgshadow.cpp (revision 13108)
+++ /OpenSceneGraph/trunk/examples/osgshadow/osgshadow.cpp (revision 13110)
@@ -743,4 +743,5 @@
     arguments.getApplicationUsage()->addCommandLineOption("--two-pass", "Use two-pass stencil for shadow volumes.");
     arguments.getApplicationUsage()->addCommandLineOption("--near-far-mode","COMPUTE_NEAR_USING_PRIMITIVES, COMPUTE_NEAR_FAR_USING_PRIMITIVES, COMPUTE_NEAR_FAR_USING_BOUNDING_VOLUMES, DO_NOT_COMPUTE_NEAR_FAR");
+    arguments.getApplicationUsage()->addCommandLineOption("--max-shadow-distance","<float> Maximum distance that the shadow map should extend from the eye point.");
 
     // construct the viewer.
@@ -860,4 +861,12 @@
         OSG_NOTICE<<std::endl;
     }
+
+    double distance;
+    if (arguments.read("--max-shadow-distance",distance))
+    {
+        settings->setMaximumShadowMapDistance(distance);
+        OSG_NOTICE<<"MaximumShadowMapDistance set to "<<settings->getMaximumShadowMapDistance()<<std::endl;
+    }
+
     
     osg::ref_ptr<osgShadow::MinimalShadowMap> msm = NULL;
