diff --git a/Source/cmCTest.cxx b/Source/cmCTest.cxx
index 37f1c3f9d06d869b6db32892c84daa85aea3c898..30511d338f9b9b92f044877414ac684a12edfaa5 100644
--- a/Source/cmCTest.cxx
+++ b/Source/cmCTest.cxx
@@ -2666,15 +2666,33 @@ int cmCTest::RunConfigurationScript()
   if (cvsCmd)
     {
     command = cvsCmd;
-    output.empty();
-    retVal = 0;
-    res = cmSystemTools::RunSingleCommand(command.c_str(), &output, 
-                                          &retVal, binDir,
-                                          m_Verbose, 0 /*m_TimeOut*/);
-    if (!res || retVal != 0)
+    char updateVar[40];
+    int i;
+    for (i = 1; i < 10; ++i)
       {
-      cmSystemTools::Error("Unable to perform cvs update");    
-      return -5;
+      sprintf(updateVar,"CTEST_EXTRA_UPDATES_%i",i);
+      const char *updateVal = mf->GetDefinition(updateVar);
+      if (updateVal)
+        {
+        std::vector<std::string> cvsArgs;
+        cmSystemTools::ExpandListArgument(updateVal,cvsArgs);
+        if (cvsArgs.size() == 2)
+          {
+          std::string fullCommand = command;
+          fullCommand += " update ";
+          fullCommand += cvsArgs[1];
+          output.empty();
+          retVal = 0;
+          res = cmSystemTools::RunSingleCommand(fullCommand.c_str(), &output, 
+                                                &retVal, cvsArgs[0].c_str(),
+                                                m_Verbose, 0 /*m_TimeOut*/);
+          if (!res || retVal != 0)
+            {
+            cmSystemTools::Error("Unable to perform extra cvs updates");    
+            return -5;
+            }
+          }
+        }
       }
     }