diff --git a/bin/facter b/bin/facter
index a6cb717..df72376 100755
--- a/bin/facter
+++ b/bin/facter
@@ -6,7 +6,7 @@
 #
 # = Usage
 #
-#   facter [-d|--debug] [-h|--help] [-p|--puppet] [-v|--version] [-y|--yaml] [fact] [fact] [...]
+#   facter [-d|--debug] [-h|--help] [-p|--puppet] [-v|--version] [-y|--yaml] [-t|--timing] [fact] [fact] [...]
 #
 # = Description
 #
@@ -21,6 +21,9 @@
 # debug::
 #   Enable debugging.
 #
+# timing::
+#   Enable timing.
+#
 # help::
 #   Print this help message
 #
@@ -71,7 +74,8 @@ def load_puppet
     end
 end
 
-$debug = 0
+$debug  = 0
+$timing = 0
 
 config = nil
 
@@ -79,6 +83,7 @@ result = GetoptLong.new(
     [ "--version", "-v", GetoptLong::NO_ARGUMENT       ],
     [ "--help",    "-h", GetoptLong::NO_ARGUMENT       ],
     [ "--debug",   "-d", GetoptLong::NO_ARGUMENT       ],
+    [ "--timing",  "-t", GetoptLong::NO_ARGUMENT       ],
     [ "--yaml",    "-y", GetoptLong::NO_ARGUMENT       ],
     [ "--config",  "-c", GetoptLong::REQUIRED_ARGUMENT ],
     [ "--puppet",  "-p", GetoptLong::NO_ARGUMENT       ]
@@ -104,6 +109,8 @@ begin
             options[:yaml] = true
         when "--debug"
             Facter.debugging(1)
+        when "--timing"
+            Facter.timing(1)
         when "--help"
             if $haveusage
                 RDoc::usage && exit
diff --git a/lib/facter.rb b/lib/facter.rb
index 46e2e99..835d755 100644
--- a/lib/facter.rb
+++ b/lib/facter.rb
@@ -48,6 +48,7 @@ module Facter
     GREEN = "[0;32m"
     RESET = "[0m"
     @@debug = 0
+    @@timing = 0
 
     # module methods
 
@@ -77,6 +78,20 @@ module Facter
         @@debug != 0
     end
 
+    # show the timing information
+    def self.show_time(string)
+        if string.nil?
+            return
+        end
+        if self.timing?
+            puts GREEN + string + RESET
+        end
+    end
+
+    def self.timing?
+        @@timing != 0
+    end
+
     # Return a fact object by name.  If you use this, you still have to call
     # 'value' on it to retrieve the actual value.
     def self.[](name)
@@ -177,6 +192,22 @@ module Facter
         end
     end
 
+    # Set timing on or off.
+    def self.timing(bit)
+        if bit
+            case bit
+            when TrueClass; @@timing = 1
+            when Fixnum
+                if bit > 0
+                    @@timing = 1
+                else
+                    @@timing = 0
+                end
+            end
+        else
+            @@timing = 0
+        end
+    end
 
     def self.warn(msg)
         if Facter.debugging? and msg and not msg.empty?
diff --git a/lib/facter/util/resolution.rb b/lib/facter/util/resolution.rb
index f837f64..875b654 100644
--- a/lib/facter/util/resolution.rb
+++ b/lib/facter/util/resolution.rb
@@ -135,6 +135,9 @@ class Facter::Util::Resolution
     def value
         result = nil
         return result if @code == nil and @interpreter == nil
+
+        starttime = Time.now.to_i
+
         begin
             Timeout.timeout(limit) do
                 if @code.is_a?(Proc)
@@ -156,6 +159,12 @@ class Facter::Util::Resolution
             return nil
         end
 
+        finishtime = Time.now.to_i
+
+        if Facter.timing?
+            Facter.show_time "Executing #{self.name} took #{finishtime - starttime} seconds"
+        end
+
         return nil if result == ""
         return result
     end
diff --git a/spec/unit/facter.rb b/spec/unit/facter.rb
index 9f7b4cf..20f9ed1 100755
--- a/spec/unit/facter.rb
+++ b/spec/unit/facter.rb
@@ -135,6 +135,14 @@ describe Facter do
         Facter.should respond_to(:debugging?)
     end
 
+    it "should have a method to query timing mode" do
+        Facter.should respond_to(:timing?)
+    end
+
+    it "should have a method to show timing information" do
+        Facter.should respond_to(:show_time)
+    end
+
     it "should have a method to warn" do
         Facter.should respond_to(:warn)
     end
@@ -204,6 +212,25 @@ describe Facter do
         end
     end
 
+    describe "when setting timing mode" do
+        it "should have timing enabled using 1" do
+            Facter.timing(1)
+            Facter.should be_timing
+        end
+        it "should have timing enabled using true" do
+            Facter.timing(true)
+            Facter.should be_timing
+        end
+        it "should have timing disabled using 0" do
+            Facter.timing(0)
+            Facter.should_not be_timing
+        end
+        it "should have timing disabled using false" do
+            Facter.timing(false)
+            Facter.should_not be_timing
+        end
+    end
+
     describe "when registering directories to search" do
         after { Facter.instance_variable_set("@search_path", []) }
 
