diff --git a/lib/fog/aws/requests/compute/describe_instances.rb b/lib/fog/aws/requests/compute/describe_instances.rb
index c5cbefe72..a2d2d2d27 100644
--- a/lib/fog/aws/requests/compute/describe_instances.rb
+++ b/lib/fog/aws/requests/compute/describe_instances.rb
@@ -154,16 +154,25 @@ module Fog
             end
           end
 
+          brand_new_instances = instance_set.find_all do |instance|
+            instance['instanceState']['name'] == 'pending' &&
+              Time.now - instance['launchTime'] < Fog::Mock.delay * 2
+          end
+
+          # Error if filtering for a brand new instance directly
+          if (filters['instance-id'] || filters['instanceId']) && !brand_new_instances.empty?
+            raise Fog::Compute::AWS::NotFound.new("The instance ID '#{brand_new_instances.first['instanceId']}' does not exist")
+          end
+
+          # Otherwise don't include it in the list
+          instance_set = instance_set.reject {|instance| brand_new_instances.include?(instance) }
+
           response.status = 200
           reservation_set = {}
 
           instance_set.each do |instance|
             case instance['instanceState']['name']
             when 'pending'
-              if Time.now - instance['launchTime'] < Fog::Mock.delay * 2
-                raise Fog::Compute::AWS::NotFound.new("The instance ID '#{instance['instanceId']}' does not exist")
-              end
-
               if Time.now - instance['launchTime'] >= Fog::Mock.delay * 2
                 instance['ipAddress']         = Fog::AWS::Mock.ip_address
                 instance['originalIpAddress'] = instance['ipAddress']
diff --git a/tests/aws/requests/compute/instance_tests.rb b/tests/aws/requests/compute/instance_tests.rb
index cdfdd32e6..2b2b5acb3 100644
--- a/tests/aws/requests/compute/instance_tests.rb
+++ b/tests/aws/requests/compute/instance_tests.rb
@@ -138,6 +138,21 @@ Shindo.tests('Fog::Compute[:aws] | instance requests', ['aws']) do
       data
     end
 
+    if Fog.mocking?
+      # Ensure the new instance doesn't show up in mock describe_instances right away
+      tests("#describe_instances").formats(@describe_instances_format) do
+        body = Fog::Compute[:aws].describe_instances.body
+        instance_ids = body['reservationSet'].map {|reservation| reservation['instancesSet'].map {|instance| instance['instanceId'] } }.flatten
+        test("doesn't include the new instance") { !instance_ids.include?(@instance_id) }
+        body
+      end
+
+      # But querying for the new instance directly should raise an error
+      tests("#describe_instances('instance-id' => '#{@instance_id}')").raises(Fog::Compute::AWS::NotFound) do
+        Fog::Compute[:aws].describe_instances('instance-id' => @instance_id)
+      end
+    end
+
     server = Fog::Compute[:aws].servers.get(@instance_id)
     while server.nil? do
       # It may take a moment to get the server after launching it