diff --git a/lib/hoptoad_notifier.rb b/lib/hoptoad_notifier.rb
index cb01593..4722a4e 100644
--- a/lib/hoptoad_notifier.rb
+++ b/lib/hoptoad_notifier.rb
@@ -14,6 +14,8 @@ module HoptoadNotifier
   # Some of these don't exist for Rails 1.2.*, so we have to consider that.
   IGNORE_DEFAULT.map!{|e| eval(e) rescue nil }.compact!
   IGNORE_DEFAULT.freeze
+
+  IGNORE_USER_AGENT_DEFAULT = []
   
   class << self
     attr_accessor :host, :port, :secure, :api_key, :http_open_timeout, :http_read_timeout,
@@ -61,6 +63,19 @@ module HoptoadNotifier
       @ignore = [names].flatten
     end
 
+    # Returns the list of user agents that are being ignored. The array can be appended to.
+    def ignore_user_agent
+      @ignore_user_agent ||= (HoptoadNotifier::IGNORE_USER_AGENT_DEFAULT.dup)
+      @ignore_user_agent.flatten!
+      @ignore_user_agent
+    end
+    
+    # Sets the list of ignored user agents to only what is passed in here. This method
+    # can be passed a single user agent or a list of user agents.
+    def ignore_user_agent_only=(names)
+      @ignore_user_agent = [names].flatten
+    end
+
     # Returns a list of parameters that should be filtered out of what is sent to Hoptoad.
     # By default, all "password" attributes will have their contents replaced.
     def params_filters
@@ -146,7 +161,7 @@ module HoptoadNotifier
     # Overrides the rescue_action method in ActionController::Base, but does not inhibit
     # any custom processing that is defined with Rails 2's exception helpers.
     def rescue_action_in_public_with_hoptoad exception
-      notify_hoptoad(exception) unless ignore?(exception)
+      notify_hoptoad(exception) unless ignore?(exception) || ignore_user_agent?
       rescue_action_in_public_without_hoptoad(exception)
     end 
         
@@ -181,6 +196,18 @@ module HoptoadNotifier
       ignore_these.include?(exception.class) || ignore_these.include?(exception.class.name)
     end
 
+    def ignore_user_agent? #:nodoc:
+      HoptoadNotifier.ignore_user_agent.flatten.each do |ua|
+        if ua.is_a?(Regexp)
+          return true if request.user_agent =~ ua
+        else
+          return true if request.user_agent == ua
+        end
+      end
+      
+      return false
+    end
+
     def exception_to_data exception #:nodoc:
       data = {
         :api_key       => HoptoadNotifier.api_key,
diff --git a/test/hoptoad_notifier_test.rb b/test/hoptoad_notifier_test.rb
index fb3478a..a59fd64 100644
--- a/test/hoptoad_notifier_test.rb
+++ b/test/hoptoad_notifier_test.rb
@@ -43,12 +43,13 @@ class HoptoadController < ActionController::Base
 end
 
 class HoptoadNotifierTest < Test::Unit::TestCase
-  def request(action = nil, method = :get)
+  def request(action = nil, method = :get, user_agent = nil)
     @request = ActionController::TestRequest.new({
       "controller" => "hoptoad",
       "action"     => action ? action.to_s : "",
       "_method"    => method.to_s
     })
+    @request.user_agent = user_agent unless user_agent.nil?
     @response = ActionController::TestResponse.new
     @controller.process(@request, @response)
   end
@@ -84,6 +85,8 @@ class HoptoadNotifierTest < Test::Unit::TestCase
         config.secure = true
         config.api_key = "1234567890abcdef"
         config.ignore << [ RuntimeError ]
+        config.ignore_user_agent << 'UserAgentString'
+        config.ignore_user_agent << /UserAgentRegexp/
         config.proxy_host = 'proxyhost1'
         config.proxy_port = '80'
         config.proxy_user = 'user'
@@ -102,6 +105,7 @@ class HoptoadNotifierTest < Test::Unit::TestCase
       assert_equal 'secret',            HoptoadNotifier.proxy_pass
       assert_equal 2,                   HoptoadNotifier.http_open_timeout
       assert_equal 5,                   HoptoadNotifier.http_read_timeout
+      assert_equal (HoptoadNotifier::IGNORE_USER_AGENT_DEFAULT + ['UserAgentString', /UserAgentRegexp/]), HoptoadNotifier.ignore_user_agent
       assert_equal (HoptoadNotifier::IGNORE_DEFAULT + [RuntimeError]), HoptoadNotifier.ignore
     end
 
@@ -345,6 +349,48 @@ class HoptoadNotifierTest < Test::Unit::TestCase
           end
         end
       end
+      
+      context "and configured to ignore certain user agents" do
+        setup do
+          HoptoadNotifier.ignore_user_agent << /Ignored/
+          HoptoadNotifier.ignore_user_agent << 'IgnoredUserAgent'
+        end
+        
+        should "ignore exceptions when user agent is being ignored" do
+          @controller.expects(:notify_hoptoad).never
+          @controller.expects(:rescue_action_in_public_without_hoptoad)
+          assert_nothing_raised do
+            request("do_raise", :get, 'IgnoredUserAgent')
+          end
+        end
+        
+        should "ignore exceptions when user agent is being ignored (regexp)" do
+          HoptoadNotifier.ignore_user_agent_only = [/Ignored/]
+          @controller.expects(:notify_hoptoad).never
+          @controller.expects(:rescue_action_in_public_without_hoptoad)
+          assert_nothing_raised do
+            request("do_raise", :get, 'IgnoredUserAgent')
+          end
+        end
+        
+        should "ignore exceptions when user agent is being ignored (string)" do
+          HoptoadNotifier.ignore_user_agent_only = ['IgnoredUserAgent']
+          @controller.expects(:notify_hoptoad).never
+          @controller.expects(:rescue_action_in_public_without_hoptoad)
+          assert_nothing_raised do
+            request("do_raise", :get, 'IgnoredUserAgent')
+          end
+        end
+        
+        should "not ignore exceptions when user agent is not being ignored" do
+          @controller.expects(:notify_hoptoad)
+          @controller.expects(:rescue_action_in_public_without_hoptoad)
+          assert_nothing_raised do
+            request("do_raise")
+          end
+        end
+        
+      end
     end
   end
   
