diff --git a/lib/watir-webdriver/wait.rb b/lib/watir-webdriver/wait.rb
index <HASH>..<HASH> 100644
--- a/lib/watir-webdriver/wait.rb
+++ b/lib/watir-webdriver/wait.rb
@@ -9,6 +9,7 @@ module Watir
     INTERVAL = 0.1
 
     class << self
+
       #
       # Waits until the block evaluates to true or times out.
       #
@@ -21,9 +22,7 @@ module Watir
       #
 
       def until(timeout = 30, message = nil, &block)
-        end_time = ::Time.now + timeout
-
-        until ::Time.now > end_time
+        wait(timeout) do
           result = yield(self)
           return result if result
           sleep INTERVAL
@@ -44,9 +43,7 @@ module Watir
       #
 
       def while(timeout = 30, message = nil, &block)
-        end_time = ::Time.now + timeout
-
-        until ::Time.now > end_time
+        wait(timeout) do
           return unless yield(self)
           sleep INTERVAL
         end
@@ -63,6 +60,10 @@ module Watir
         err
       end
 
+      def wait(timeout, &block)
+        (timeout / INTERVAL).to_i.times &block
+      end
+
     end # self
   end # Wait
Wait should not depend on Time (#<I>)