diff --git a/lib/fog/google/compute.rb b/lib/fog/google/compute.rb
index 64c053396..a2b60acc1 100644
--- a/lib/fog/google/compute.rb
+++ b/lib/fog/google/compute.rb
@@ -137,6 +137,22 @@ module Fog
           response
         end
 
+        def backoff_if_unfound(&block)
+          retries_remaining = 5
+          begin
+            result = block.call
+          rescue Exception => msg
+            if msg.to_s.include? 'was not found' and retries_remaining > 0
+              retries_remaining -= 1
+              sleep 0.1
+              retry
+            else
+              raise msg
+            end
+          end
+          result
+        end
+
       end
 
       RUNNING = 'RUNNING'
diff --git a/lib/fog/google/models/compute/disk.rb b/lib/fog/google/models/compute/disk.rb
index a4d2594b5..ed406ed38 100644
--- a/lib/fog/google/models/compute/disk.rb
+++ b/lib/fog/google/models/compute/disk.rb
@@ -20,7 +20,7 @@ module Fog
 
         def save
           data = service.insert_disk(name, size_gb, zone_name, image_name).body
-          data = service.get_disk(self.name, zone_name).body
+          data = service.backoff_if_unfound {service.get_disk(name, zone_name).body}
           service.disks.merge_attributes(data)
         end
 
diff --git a/lib/fog/google/models/compute/server.rb b/lib/fog/google/models/compute/server.rb
index 6b8615f74..5a4500c8c 100644
--- a/lib/fog/google/models/compute/server.rb
+++ b/lib/fog/google/models/compute/server.rb
@@ -83,14 +83,7 @@ module Fog
           }
           options.delete_if {|key, value| value.nil?}
           service.insert_server(name, zone_name, options)
-          begin
-          data = service.get_server(self.name, self.zone_name).body
-          rescue Exception
-            puts "waiting for server to be callable..."
-            sleep 0.1
-            retry
-          end
-
+          data = service.backoff_if_unfound {service.get_server(self.name, self.zone_name).body}
           service.servers.merge_attributes(data)
         end
 
diff --git a/lib/fog/google/requests/compute/insert_disk.rb b/lib/fog/google/requests/compute/insert_disk.rb
index 561fbcdb5..a1a19c2ed 100644
--- a/lib/fog/google/requests/compute/insert_disk.rb
+++ b/lib/fog/google/requests/compute/insert_disk.rb
@@ -12,19 +12,17 @@ module Fog
 
       class Real
 
-        def insert_disk(disk_name, disk_size, zone_name=@default_zone, image=nil)
+        def insert_disk(disk_name, disk_size, zone_name=@default_zone, image_name=nil)
           api_method = @compute.disks.insert
           parameters = {
             'project' => @project,
             'zone' => zone_name
           }
-          if image
-            # We need to check if the image is owned by the user or a global image.
-            if get_image(image, @project).data[:status] == 200
-              parameters['sourceImage'] = @api_url + @project + "/global/images/#{image}"
-            else
-              parameters['sourceImage'] = @api_url + "google/global/images/#{image}"
-            end
+          if image_name
+            # We don't know the owner of the image.
+            image = images.create({:name => image_name})
+            @image_url = @api_url + image.resource_url
+            parameters['sourceImage'] = @image_url
           end
           body_object = {
             'name' => disk_name,
@@ -33,8 +31,7 @@ module Fog
 
           result = self.build_result(api_method, parameters,
                                      body_object)
-          disk_name = MultiJson.load(result.body)["targetLink"].split('/')[-1]
-          return get_disk(disk_name, zone_name)
+          response = self.build_response(result)
         end
 
       end
diff --git a/lib/fog/google/requests/compute/insert_server.rb b/lib/fog/google/requests/compute/insert_server.rb
index 487036812..6cb5657c3 100644
--- a/lib/fog/google/requests/compute/insert_server.rb
+++ b/lib/fog/google/requests/compute/insert_server.rb
@@ -17,8 +17,9 @@ module Fog
         end
 
         def insert_server(server_name, zone_name, options={}, *deprecated_args)
-          if (deprecated_args.length > 0)
-            raise "Too many parameters specified. This may be the cause of code written for an outdated version of fog. Usage: "#TODO
+          if deprecated_args.length > 0 or not options.is_a? Hash
+            raise ArgumentError.new 'Too many parameters specified. This may be the cause of code written for an outdated'\
+                ' version of fog. Usage: server_name, zone_name, [options]'
           end
           api_method = @compute.instances.insert
           parameters = {
@@ -29,13 +30,10 @@ module Fog
 
           if options.has_key? 'image'
             image_name = options.delete 'image'
-            # We need to check if the image is owned by the user or a global image.
-            if get_image(image_name, @project).data[:status] == 200
-              image_url = @api_url + @project + "/global/images/#{image_name}"
-            else
-              image_url = @api_url + "google/global/images/#{image_name}"
-            end
-            body_object['image'] = image_url
+            # We don't know the owner of the image.
+            image = images.create({:name => image_name})
+            @image_url = @api_url + image.resource_url
+            body_object['image'] = @image_url
           end
           body_object['machineType'] = @api_url + @project + "/zones/#{zone_name}/machineTypes/#{options.delete 'machineType'}"
           networkInterfaces = []
@@ -47,7 +45,7 @@ module Fog
                 ]
             }
           end
-          #TODO add other networks
+          # TODO: add other networks
           body_object['networkInterfaces'] = networkInterfaces
 
           if options['disks']
@@ -65,7 +63,7 @@ module Fog
           if options['kernel']
             body_object['kernel'] = @api_url + "google/global/kernels/#{options.delete 'kernel'}"
           end
-          body_object.merge! options #adds in all remaining options that weren't explicitly handled
+          body_object.merge! options # Adds in all remaining options that weren't explicitly handled.
 
           result = self.build_result(api_method, parameters,
                                      body_object=body_object)