diff --git a/lib/fog/aws.rb b/lib/fog/aws.rb
index 9a52bd0e6..59aafe68f 100644
--- a/lib/fog/aws.rb
+++ b/lib/fog/aws.rb
@@ -4,10 +4,12 @@ module Fog
     extend Fog::Provider
 
     service_path 'fog/aws'
+    service 'compute'
     service 'ec2'
     service 'elb'
     service 's3'
     service 'simpledb'
+    service 'storage'
 
     def self.indexed_param(key, values, offset = 0)
       params = {}
diff --git a/lib/fog/aws/bin.rb b/lib/fog/aws/bin.rb
index fccd4be88..2a2ba944f 100644
--- a/lib/fog/aws/bin.rb
+++ b/lib/fog/aws/bin.rb
@@ -10,35 +10,47 @@ module AWS
       def [](service)
         @@connections ||= Hash.new do |hash, key|
           hash[key] = case key
+          when :compute
+            Fog::AWS::Compute.new
           when :ec2
-            Fog::AWS::EC2.new
+            location = caller.first
+            warning = "[yellow][WARN] AWS[:ec2] is deprecated, use AWS[:compute] instead[/]"
+            warning << " [light_black](" << location << ")[/] "
+            Formatador.display_line(warning)
+            Fog::AWS::Compute.new
           when :elb
             Fog::AWS::ELB.new
           when :simpledb
             Fog::AWS::SimpleDB.new
           when :s3
-            Fog::AWS::S3.new
+            location = caller.first
+            warning = "[yellow][WARN] AWS[:s3] is deprecated, use AWS[:storage] instead[/]"
+            warning << " [light_black](" << location << ")[/] "
+            Formatador.display_line(warning)
+            Fog::AWS::Storage.new
+          when :storage
+            Fog::AWS::Storage.new
           end
         end
         @@connections[service]
       end
 
       def services
-        [:ec2, :elb, :simpledb, :s3]
+        [:compute, :elb, :simpledb, :storage]
       end
 
-      for collection in Fog::AWS::EC2.collections
+      for collection in Fog::AWS::Compute.collections
         module_eval <<-EOS, __FILE__, __LINE__
           def #{collection}
-            self[:ec2].#{collection}
+            self[:compute].#{collection}
           end
         EOS
       end
 
-      for collection in Fog::AWS::S3.collections
+      for collection in Fog::AWS::Storage.collections
         module_eval <<-EOS, __FILE__, __LINE__
           def #{collection}
-            self[:s3].#{collection}
+            self[:storage].#{collection}
           end
         EOS
       end
diff --git a/lib/fog/aws/compute.rb b/lib/fog/aws/compute.rb
new file mode 100644
index 000000000..efde63d56
--- /dev/null
+++ b/lib/fog/aws/compute.rb
@@ -0,0 +1,221 @@
+module Fog
+  module AWS
+    class Compute < Fog::Service
+
+      requires :aws_access_key_id, :aws_secret_access_key
+
+      model_path 'fog/aws/models/compute'
+      model       :address
+      collection  :addresses
+      model       :flavor
+      collection  :flavors
+      model       :image
+      collection  :images
+      model       :key_pair
+      collection  :key_pairs
+      model       :security_group
+      collection  :security_groups
+      model       :server
+      collection  :servers
+      model       :snapshot
+      collection  :snapshots
+      model       :volume
+      collection  :volumes
+
+      require 'fog/aws/parsers/ec2/basic'
+
+      request_path 'fog/aws/requests/compute'
+      request :allocate_address
+      request :associate_address
+      request :attach_volume
+      request :authorize_security_group_ingress
+      request :create_key_pair
+      request :create_security_group
+      request :create_snapshot
+      request :create_image
+      request :create_volume
+      request :delete_key_pair
+      request :delete_security_group
+      request :delete_snapshot
+      request :delete_volume
+      request :deregister_image
+      request :describe_addresses
+      request :describe_availability_zones
+      request :describe_images
+      request :describe_instances
+      request :describe_reserved_instances
+      request :describe_key_pairs
+      request :describe_regions
+      request :describe_security_groups
+      request :describe_snapshots
+      request :describe_volumes
+      request :detach_volume
+      request :disassociate_address
+      request :get_console_output
+      request :modify_image_attributes
+      request :modify_snapshot_attribute
+      request :reboot_instances
+      request :release_address
+      request :register_image
+      request :revoke_security_group_ingress
+      request :run_instances
+      request :terminate_instances
+      request :start_instances
+      request :stop_instances
+
+      class Mock
+        include Collections
+
+        def self.data
+          @data ||= Hash.new do |hash, key|
+            owner_id = Fog::AWS::Mock.owner_id
+            hash[key] = {
+              :deleted_at => {},
+              :addresses  => {},
+              :instances  => {},
+              :key_pairs  => {},
+              :limits     => { :addresses => 5 },
+              :owner_id   => owner_id,
+              :security_groups => {
+                'default' => {
+                  'groupDescription'  => 'default group',
+                  'groupName'         => 'default',
+                  'ipPermissions'     => [
+                    {
+                      'groups'      => [{'groupName' => 'default', 'userId' => owner_id}],
+                      'fromPort'    => -1,
+                      'toPort'      => -1,
+                      'ipProtocol'  => 'icmp',
+                      'ipRanges'    => []
+                    },
+                    {
+                      'groups'      => [{'groupName' => 'default', 'userId' => owner_id}],
+                      'fromPort'    => 0,
+                      'toPort'      => 65535,
+                      'ipProtocol'  => 'tcp',
+                      'ipRanges'    => []
+                    },
+                    {
+                      'groups'      => [{'groupName' => 'default', 'userId' => owner_id}],
+                      'fromPort'    => 0,
+                      'toPort'      => 65535,
+                      'ipProtocol'  => 'udp',
+                      'ipRanges'    => []
+                    }
+                  ],
+                  'ownerId'           => owner_id
+                }
+              },
+              :snapshots => {},
+              :volumes => {}
+            }
+          end
+        end
+
+        def self.reset_data(keys=data.keys)
+          for key in [*keys]
+            data.delete(key)
+          end
+        end
+
+        def initialize(options={})
+          @aws_access_key_id = options[:aws_access_key_id]
+          @data = self.class.data[@aws_access_key_id]
+          @owner_id = @data[:owner_id]
+        end
+
+      end
+
+      class Real
+        include Collections
+
+        # Initialize connection to EC2
+        #
+        # ==== Notes
+        # options parameter must include values for :aws_access_key_id and 
+        # :aws_secret_access_key in order to create a connection
+        #
+        # ==== Examples
+        #   sdb = SimpleDB.new(
+        #    :aws_access_key_id => your_aws_access_key_id,
+        #    :aws_secret_access_key => your_aws_secret_access_key
+        #   )
+        #
+        # ==== Parameters
+        # * options<~Hash> - config arguments for connection.  Defaults to {}.
+        #   * region<~String> - optional region to use, in ['eu-west-1', 'us-east-1', 'us-west-1']
+        #
+        # ==== Returns
+        # * EC2 object with connection to aws.
+        def initialize(options={})
+          @aws_access_key_id      = options[:aws_access_key_id]
+          @aws_secret_access_key  = options[:aws_secret_access_key]
+          @hmac = Fog::HMAC.new('sha256', @aws_secret_access_key)
+          options[:region] ||= 'us-east-1'
+          @host = options[:host] || case options[:region]
+            when 'ap-southeast-1'
+              'ec2.ap-southeast-1.amazonaws.com'
+            when 'eu-west-1'
+              'ec2.eu-west-1.amazonaws.com'
+            when 'us-east-1'
+              'ec2.us-east-1.amazonaws.com'
+            when 'us-west-1'
+              'ec2.us-west-1.amazonaws.com'
+            else
+              raise ArgumentError, "Unknown region: #{options[:region].inspect}"
+            end
+          @port   = options[:port]      || 443
+          @scheme = options[:scheme]    || 'https'
+          @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}", options[:persistent])
+        end
+
+        def reload
+          @connection.reset
+        end
+
+        private
+
+        def request(params)
+          idempotent  = params.delete(:idempotent)
+          parser      = params.delete(:parser)
+
+          body = AWS.signed_params(
+            params,
+            {
+              :aws_access_key_id  => @aws_access_key_id,
+              :hmac               => @hmac,
+              :host               => @host,
+              :version            => '2009-11-30'
+            }
+          )
+
+          begin
+            response = @connection.request({
+              :body       => body,
+              :expects    => 200,
+              :headers    => { 'Content-Type' => 'application/x-www-form-urlencoded' },
+              :idempotent => idempotent,
+              :host       => @host,
+              :method     => 'POST',
+              :parser     => parser
+            })
+          rescue Excon::Errors::Error => error
+            if match = error.message.match(/<Code>(.*)<\/Code><Message>(.*)<\/Message>/)
+              raise case match[1].split('.').last
+              when 'NotFound'
+                Fog::AWS::EC2::NotFound.slurp(error, match[2])
+              else
+                Fog::AWS::EC2::Error.slurp(error, "#{match[1]} => #{match[2]}")
+              end
+            else
+              raise error
+            end
+          end
+
+          response
+        end
+
+      end
+    end
+  end
+end
diff --git a/lib/fog/aws/ec2.rb b/lib/fog/aws/ec2.rb
index 03fe4bdde..ba0f91391 100644
--- a/lib/fog/aws/ec2.rb
+++ b/lib/fog/aws/ec2.rb
@@ -1,221 +1,15 @@
 module Fog
   module AWS
-    class EC2 < Fog::Service
-
-      requires :aws_access_key_id, :aws_secret_access_key
-
-      model_path 'fog/aws/models/ec2'
-      model       :address
-      collection  :addresses
-      model       :flavor
-      collection  :flavors
-      model       :image
-      collection  :images
-      model       :key_pair
-      collection  :key_pairs
-      model       :security_group
-      collection  :security_groups
-      model       :server
-      collection  :servers
-      model       :snapshot
-      collection  :snapshots
-      model       :volume
-      collection  :volumes
-
-      require 'fog/aws/parsers/ec2/basic'
-
-      request_path 'fog/aws/requests/ec2'
-      request :allocate_address
-      request :associate_address
-      request :attach_volume
-      request :authorize_security_group_ingress
-      request :create_key_pair
-      request :create_security_group
-      request :create_snapshot
-      request :create_image
-      request :create_volume
-      request :delete_key_pair
-      request :delete_security_group
-      request :delete_snapshot
-      request :delete_volume
-      request :deregister_image
-      request :describe_addresses
-      request :describe_availability_zones
-      request :describe_images
-      request :describe_instances
-      request :describe_reserved_instances
-      request :describe_key_pairs
-      request :describe_regions
-      request :describe_security_groups
-      request :describe_snapshots
-      request :describe_volumes
-      request :detach_volume
-      request :disassociate_address
-      request :get_console_output
-      request :modify_image_attributes
-      request :modify_snapshot_attribute
-      request :reboot_instances
-      request :release_address
-      request :register_image
-      request :revoke_security_group_ingress
-      request :run_instances
-      request :terminate_instances
-      request :start_instances
-      request :stop_instances
-
-      class Mock
-        include Collections
-
-        def self.data
-          @data ||= Hash.new do |hash, key|
-            owner_id = Fog::AWS::Mock.owner_id
-            hash[key] = {
-              :deleted_at => {},
-              :addresses  => {},
-              :instances  => {},
-              :key_pairs  => {},
-              :limits     => { :addresses => 5 },
-              :owner_id   => owner_id,
-              :security_groups => {
-                'default' => {
-                  'groupDescription'  => 'default group',
-                  'groupName'         => 'default',
-                  'ipPermissions'     => [
-                    {
-                      'groups'      => [{'groupName' => 'default', 'userId' => owner_id}],
-                      'fromPort'    => -1,
-                      'toPort'      => -1,
-                      'ipProtocol'  => 'icmp',
-                      'ipRanges'    => []
-                    },
-                    {
-                      'groups'      => [{'groupName' => 'default', 'userId' => owner_id}],
-                      'fromPort'    => 0,
-                      'toPort'      => 65535,
-                      'ipProtocol'  => 'tcp',
-                      'ipRanges'    => []
-                    },
-                    {
-                      'groups'      => [{'groupName' => 'default', 'userId' => owner_id}],
-                      'fromPort'    => 0,
-                      'toPort'      => 65535,
-                      'ipProtocol'  => 'udp',
-                      'ipRanges'    => []
-                    }
-                  ],
-                  'ownerId'           => owner_id
-                }
-              },
-              :snapshots => {},
-              :volumes => {}
-            }
-          end
-        end
-
-        def self.reset_data(keys=data.keys)
-          for key in [*keys]
-            data.delete(key)
-          end
-        end
-
-        def initialize(options={})
-          @aws_access_key_id = options[:aws_access_key_id]
-          @data = self.class.data[@aws_access_key_id]
-          @owner_id = @data[:owner_id]
-        end
+    class EC2
 
+      def self.new(attributes = {})
+        location = caller.first
+        warning = "[yellow][WARN] Fog::AWS::EC2#new is deprecated, use Fog::AWS::Compute#new instead[/]"
+        warning << " [light_black](" << location << ")[/] "
+        Formatador.display_line(warning)
+        Fog::AWS::Compute.new(attributes)
       end
 
-      class Real
-        include Collections
-
-        # Initialize connection to EC2
-        #
-        # ==== Notes
-        # options parameter must include values for :aws_access_key_id and 
-        # :aws_secret_access_key in order to create a connection
-        #
-        # ==== Examples
-        #   sdb = SimpleDB.new(
-        #    :aws_access_key_id => your_aws_access_key_id,
-        #    :aws_secret_access_key => your_aws_secret_access_key
-        #   )
-        #
-        # ==== Parameters
-        # * options<~Hash> - config arguments for connection.  Defaults to {}.
-        #   * region<~String> - optional region to use, in ['eu-west-1', 'us-east-1', 'us-west-1']
-        #
-        # ==== Returns
-        # * EC2 object with connection to aws.
-        def initialize(options={})
-          @aws_access_key_id      = options[:aws_access_key_id]
-          @aws_secret_access_key  = options[:aws_secret_access_key]
-          @hmac = Fog::HMAC.new('sha256', @aws_secret_access_key)
-          options[:region] ||= 'us-east-1'
-          @host = options[:host] || case options[:region]
-            when 'ap-southeast-1'
-              'ec2.ap-southeast-1.amazonaws.com'
-            when 'eu-west-1'
-              'ec2.eu-west-1.amazonaws.com'
-            when 'us-east-1'
-              'ec2.us-east-1.amazonaws.com'
-            when 'us-west-1'
-              'ec2.us-west-1.amazonaws.com'
-            else
-              raise ArgumentError, "Unknown region: #{options[:region].inspect}"
-            end
-          @port   = options[:port]      || 443
-          @scheme = options[:scheme]    || 'https'
-          @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}", options[:persistent])
-        end
-
-        def reload
-          @connection.reset
-        end
-
-        private
-
-        def request(params)
-          idempotent  = params.delete(:idempotent)
-          parser      = params.delete(:parser)
-
-          body = AWS.signed_params(
-            params,
-            {
-              :aws_access_key_id  => @aws_access_key_id,
-              :hmac               => @hmac,
-              :host               => @host,
-              :version            => '2009-11-30'
-            }
-          )
-
-          begin
-            response = @connection.request({
-              :body       => body,
-              :expects    => 200,
-              :headers    => { 'Content-Type' => 'application/x-www-form-urlencoded' },
-              :idempotent => idempotent,
-              :host       => @host,
-              :method     => 'POST',
-              :parser     => parser
-            })
-          rescue Excon::Errors::Error => error
-            if match = error.message.match(/<Code>(.*)<\/Code><Message>(.*)<\/Message>/)
-              raise case match[1].split('.').last
-              when 'NotFound'
-                Fog::AWS::EC2::NotFound.slurp(error, match[2])
-              else
-                Fog::AWS::EC2::Error.slurp(error, "#{match[1]} => #{match[2]}")
-              end
-            else
-              raise error
-            end
-          end
-
-          response
-        end
-
-      end
     end
   end
 end
diff --git a/lib/fog/aws/models/ec2/address.rb b/lib/fog/aws/models/compute/address.rb
similarity index 98%
rename from lib/fog/aws/models/ec2/address.rb
rename to lib/fog/aws/models/compute/address.rb
index 930be42d6..341663b46 100644
--- a/lib/fog/aws/models/ec2/address.rb
+++ b/lib/fog/aws/models/compute/address.rb
@@ -2,7 +2,7 @@ require 'fog/model'
 
 module Fog
   module AWS
-    class EC2
+    class Compute
 
       class Address < Fog::Model
 
diff --git a/lib/fog/aws/models/ec2/addresses.rb b/lib/fog/aws/models/compute/addresses.rb
similarity index 91%
rename from lib/fog/aws/models/ec2/addresses.rb
rename to lib/fog/aws/models/compute/addresses.rb
index 5a442b361..366fe3b6a 100644
--- a/lib/fog/aws/models/ec2/addresses.rb
+++ b/lib/fog/aws/models/compute/addresses.rb
@@ -1,16 +1,16 @@
 require 'fog/collection'
-require 'fog/aws/models/ec2/address'
+require 'fog/aws/models/compute/address'
 
 module Fog
   module AWS
-    class EC2
+    class Compute
 
       class Addresses < Fog::Collection
 
         attribute :public_ip
         attribute :server
 
-        model Fog::AWS::EC2::Address
+        model Fog::AWS::Compute::Address
 
         def initialize(attributes)
           @public_ip ||= []
diff --git a/lib/fog/aws/models/ec2/flavor.rb b/lib/fog/aws/models/compute/flavor.rb
similarity index 93%
rename from lib/fog/aws/models/ec2/flavor.rb
rename to lib/fog/aws/models/compute/flavor.rb
index 7a9212f6b..ef40b6d1f 100644
--- a/lib/fog/aws/models/ec2/flavor.rb
+++ b/lib/fog/aws/models/compute/flavor.rb
@@ -2,7 +2,7 @@ require 'fog/model'
 
 module Fog
   module AWS
-    class EC2
+    class Compute
 
       class Flavor < Fog::Model
 
diff --git a/lib/fog/aws/models/ec2/flavors.rb b/lib/fog/aws/models/compute/flavors.rb
similarity index 93%
rename from lib/fog/aws/models/ec2/flavors.rb
rename to lib/fog/aws/models/compute/flavors.rb
index 655f0e740..baa2da1c4 100644
--- a/lib/fog/aws/models/ec2/flavors.rb
+++ b/lib/fog/aws/models/compute/flavors.rb
@@ -1,13 +1,13 @@
 require 'fog/collection'
-require 'fog/aws/models/ec2/flavor'
+require 'fog/aws/models/compute/flavor'
 
 module Fog
   module AWS
-    class EC2
+    class Compute
 
       class Flavors < Fog::Collection
 
-        model Fog::AWS::EC2::Flavor
+        model Fog::AWS::Compute::Flavor
 
         def all
           data = [
diff --git a/lib/fog/aws/models/ec2/image.rb b/lib/fog/aws/models/compute/image.rb
similarity index 98%
rename from lib/fog/aws/models/ec2/image.rb
rename to lib/fog/aws/models/compute/image.rb
index 2bd11880d..a141745e7 100644
--- a/lib/fog/aws/models/ec2/image.rb
+++ b/lib/fog/aws/models/compute/image.rb
@@ -2,7 +2,7 @@ require 'fog/model'
 
 module Fog
   module AWS
-    class EC2
+    class Compute
 
       class Image < Fog::Model
 
diff --git a/lib/fog/aws/models/ec2/images.rb b/lib/fog/aws/models/compute/images.rb
similarity index 85%
rename from lib/fog/aws/models/ec2/images.rb
rename to lib/fog/aws/models/compute/images.rb
index 2f7e2bb3e..6bb0838ed 100644
--- a/lib/fog/aws/models/ec2/images.rb
+++ b/lib/fog/aws/models/compute/images.rb
@@ -1,15 +1,15 @@
 require 'fog/collection'
-require 'fog/aws/models/ec2/image'
+require 'fog/aws/models/compute/image'
 
 module Fog
   module AWS
-    class EC2
+    class Compute
 
       class Images < Fog::Collection
 
         attribute :image_id
 
-        model Fog::AWS::EC2::Image
+        model Fog::AWS::Compute::Image
 
         def initialize(attributes)
           @image_id ||= []
diff --git a/lib/fog/aws/models/ec2/key_pair.rb b/lib/fog/aws/models/compute/key_pair.rb
similarity index 97%
rename from lib/fog/aws/models/ec2/key_pair.rb
rename to lib/fog/aws/models/compute/key_pair.rb
index 5274904f5..11198f805 100644
--- a/lib/fog/aws/models/ec2/key_pair.rb
+++ b/lib/fog/aws/models/compute/key_pair.rb
@@ -2,7 +2,7 @@ require 'fog/model'
 
 module Fog
   module AWS
-    class EC2
+    class Compute
 
       class KeyPair < Fog::Model
 
diff --git a/lib/fog/aws/models/ec2/key_pairs.rb b/lib/fog/aws/models/compute/key_pairs.rb
similarity index 85%
rename from lib/fog/aws/models/ec2/key_pairs.rb
rename to lib/fog/aws/models/compute/key_pairs.rb
index f0ab40b5f..dc9b7c4d4 100644
--- a/lib/fog/aws/models/ec2/key_pairs.rb
+++ b/lib/fog/aws/models/compute/key_pairs.rb
@@ -1,15 +1,15 @@
 require 'fog/collection'
-require 'fog/aws/models/ec2/key_pair'
+require 'fog/aws/models/compute/key_pair'
 
 module Fog
   module AWS
-    class EC2
+    class Compute
 
       class KeyPairs < Fog::Collection
 
         attribute :key_name
 
-        model Fog::AWS::EC2::KeyPair
+        model Fog::AWS::Compute::KeyPair
 
         def initialize(attributes)
           @key_name ||= []
diff --git a/lib/fog/aws/models/ec2/security_group.rb b/lib/fog/aws/models/compute/security_group.rb
similarity index 98%
rename from lib/fog/aws/models/ec2/security_group.rb
rename to lib/fog/aws/models/compute/security_group.rb
index 91a9e83f6..9050ccbd2 100644
--- a/lib/fog/aws/models/ec2/security_group.rb
+++ b/lib/fog/aws/models/compute/security_group.rb
@@ -2,7 +2,7 @@ require 'fog/model'
 
 module Fog
   module AWS
-    class EC2
+    class Compute
 
       class SecurityGroup < Fog::Model
 
diff --git a/lib/fog/aws/models/ec2/security_groups.rb b/lib/fog/aws/models/compute/security_groups.rb
similarity index 84%
rename from lib/fog/aws/models/ec2/security_groups.rb
rename to lib/fog/aws/models/compute/security_groups.rb
index 398bf5717..073e8c902 100644
--- a/lib/fog/aws/models/ec2/security_groups.rb
+++ b/lib/fog/aws/models/compute/security_groups.rb
@@ -1,15 +1,15 @@
 require 'fog/collection'
-require 'fog/aws/models/ec2/security_group'
+require 'fog/aws/models/compute/security_group'
 
 module Fog
   module AWS
-    class EC2
+    class Compute
 
       class SecurityGroups < Fog::Collection
 
         attribute :group_name
 
-        model Fog::AWS::EC2::SecurityGroup
+        model Fog::AWS::Compute::SecurityGroup
 
         def initialize(attributes)
           @group_name ||= []
diff --git a/lib/fog/aws/models/ec2/server.rb b/lib/fog/aws/models/compute/server.rb
similarity index 99%
rename from lib/fog/aws/models/ec2/server.rb
rename to lib/fog/aws/models/compute/server.rb
index 2179c034d..d49b18b11 100644
--- a/lib/fog/aws/models/ec2/server.rb
+++ b/lib/fog/aws/models/compute/server.rb
@@ -2,7 +2,7 @@ require 'fog/model'
 
 module Fog
   module AWS
-    class EC2
+    class Compute
 
       class Server < Fog::Model
 
diff --git a/lib/fog/aws/models/ec2/servers.rb b/lib/fog/aws/models/compute/servers.rb
similarity index 89%
rename from lib/fog/aws/models/ec2/servers.rb
rename to lib/fog/aws/models/compute/servers.rb
index 398029044..98b9b41c9 100644
--- a/lib/fog/aws/models/ec2/servers.rb
+++ b/lib/fog/aws/models/compute/servers.rb
@@ -1,15 +1,15 @@
 require 'fog/collection'
-require 'fog/aws/models/ec2/server'
+require 'fog/aws/models/compute/server'
 
 module Fog
   module AWS
-    class EC2
+    class Compute
 
       class Servers < Fog::Collection
 
         attribute :server_id
 
-        model Fog::AWS::EC2::Server
+        model Fog::AWS::Compute::Server
 
         def initialize(attributes)
           @server_id ||= []
diff --git a/lib/fog/aws/models/ec2/snapshot.rb b/lib/fog/aws/models/compute/snapshot.rb
similarity index 98%
rename from lib/fog/aws/models/ec2/snapshot.rb
rename to lib/fog/aws/models/compute/snapshot.rb
index 5b77a07b2..819431245 100644
--- a/lib/fog/aws/models/ec2/snapshot.rb
+++ b/lib/fog/aws/models/compute/snapshot.rb
@@ -2,7 +2,7 @@ require 'fog/model'
 
 module Fog
   module AWS
-    class EC2
+    class Compute
 
       class Snapshot < Fog::Model
         extend Fog::Deprecation
diff --git a/lib/fog/aws/models/ec2/snapshots.rb b/lib/fog/aws/models/compute/snapshots.rb
similarity index 92%
rename from lib/fog/aws/models/ec2/snapshots.rb
rename to lib/fog/aws/models/compute/snapshots.rb
index 1bc2ffa07..ba7591c57 100644
--- a/lib/fog/aws/models/ec2/snapshots.rb
+++ b/lib/fog/aws/models/compute/snapshots.rb
@@ -1,9 +1,9 @@
 require 'fog/collection'
-require 'fog/aws/models/ec2/snapshot'
+require 'fog/aws/models/compute/snapshot'
 
 module Fog
   module AWS
-    class EC2
+    class Compute
 
       class Snapshots < Fog::Collection
 
@@ -12,7 +12,7 @@ module Fog
         attribute :snapshot_id
         attribute :volume
 
-        model Fog::AWS::EC2::Snapshot
+        model Fog::AWS::Compute::Snapshot
 
         def initialize(attributes)
           @snapshot_id ||= []
diff --git a/lib/fog/aws/models/ec2/volume.rb b/lib/fog/aws/models/compute/volume.rb
similarity index 99%
rename from lib/fog/aws/models/ec2/volume.rb
rename to lib/fog/aws/models/compute/volume.rb
index cb3cc3778..4189f361f 100644
--- a/lib/fog/aws/models/ec2/volume.rb
+++ b/lib/fog/aws/models/compute/volume.rb
@@ -2,7 +2,7 @@ require 'fog/model'
 
 module Fog
   module AWS
-    class EC2
+    class Compute
 
       class Volume < Fog::Model
         extend Fog::Deprecation
diff --git a/lib/fog/aws/models/ec2/volumes.rb b/lib/fog/aws/models/compute/volumes.rb
similarity index 90%
rename from lib/fog/aws/models/ec2/volumes.rb
rename to lib/fog/aws/models/compute/volumes.rb
index b8853288a..2c01f2870 100644
--- a/lib/fog/aws/models/ec2/volumes.rb
+++ b/lib/fog/aws/models/compute/volumes.rb
@@ -1,16 +1,16 @@
 require 'fog/collection'
-require 'fog/aws/models/ec2/volume'
+require 'fog/aws/models/compute/volume'
 
 module Fog
   module AWS
-    class EC2
+    class Compute
 
       class Volumes < Fog::Collection
 
         attribute :volume_id
         attribute :server
 
-        model Fog::AWS::EC2::Volume
+        model Fog::AWS::Compute::Volume
 
         def initialize(attributes)
           @volume_id ||= []
diff --git a/lib/fog/aws/models/s3/directories.rb b/lib/fog/aws/models/storage/directories.rb
similarity index 90%
rename from lib/fog/aws/models/s3/directories.rb
rename to lib/fog/aws/models/storage/directories.rb
index c28b56149..316c8538e 100644
--- a/lib/fog/aws/models/s3/directories.rb
+++ b/lib/fog/aws/models/storage/directories.rb
@@ -1,13 +1,13 @@
 require 'fog/collection'
-require 'fog/aws/models/s3/directory'
+require 'fog/aws/models/storage/directory'
 
 module Fog
   module AWS
-    class S3
+    class Storage
 
       class Directories < Fog::Collection
 
-        model Fog::AWS::S3::Directory
+        model Fog::AWS::Storage::Directory
 
         def all
           data = connection.get_service.body['Buckets']
diff --git a/lib/fog/aws/models/s3/directory.rb b/lib/fog/aws/models/storage/directory.rb
similarity index 93%
rename from lib/fog/aws/models/s3/directory.rb
rename to lib/fog/aws/models/storage/directory.rb
index 67fc3aa91..644b7e23e 100644
--- a/lib/fog/aws/models/s3/directory.rb
+++ b/lib/fog/aws/models/storage/directory.rb
@@ -1,9 +1,9 @@
 require 'fog/model'
-require 'fog/aws/models/s3/files'
+require 'fog/aws/models/storage/files'
 
 module Fog
   module AWS
-    class S3
+    class Storage
 
       class Directory < Fog::Model
         extend Fog::Deprecation
@@ -34,7 +34,7 @@ module Fog
 
         def files
           @files ||= begin
-            Fog::AWS::S3::Files.new(
+            Fog::AWS::Storage::Files.new(
               :directory    => self,
               :connection   => connection
             )
diff --git a/lib/fog/aws/models/s3/file.rb b/lib/fog/aws/models/storage/file.rb
similarity index 99%
rename from lib/fog/aws/models/s3/file.rb
rename to lib/fog/aws/models/storage/file.rb
index a198bb6d3..22bf50b75 100644
--- a/lib/fog/aws/models/s3/file.rb
+++ b/lib/fog/aws/models/storage/file.rb
@@ -2,7 +2,7 @@ require 'fog/model'
 
 module Fog
   module AWS
-    class S3
+    class Storage
 
       class File < Fog::Model
 
diff --git a/lib/fog/aws/models/s3/files.rb b/lib/fog/aws/models/storage/files.rb
similarity index 96%
rename from lib/fog/aws/models/s3/files.rb
rename to lib/fog/aws/models/storage/files.rb
index a335ff82c..f4b1c06fb 100644
--- a/lib/fog/aws/models/s3/files.rb
+++ b/lib/fog/aws/models/storage/files.rb
@@ -1,9 +1,9 @@
 require 'fog/collection'
-require 'fog/aws/models/s3/file'
+require 'fog/aws/models/storage/file'
 
 module Fog
   module AWS
-    class S3
+    class Storage
 
       class Files < Fog::Collection
 
@@ -14,7 +14,7 @@ module Fog
         attribute :max_keys,      :aliases => ['MaxKeys', 'max-keys']
         attribute :prefix,        :aliases => 'Prefix'
 
-        model Fog::AWS::S3::File
+        model Fog::AWS::Storage::File
 
         def all(options = {})
           requires :directory
diff --git a/lib/fog/aws/parsers/ec2/allocate_address.rb b/lib/fog/aws/parsers/compute/allocate_address.rb
similarity index 93%
rename from lib/fog/aws/parsers/ec2/allocate_address.rb
rename to lib/fog/aws/parsers/compute/allocate_address.rb
index ccd08bfbf..e655c90a5 100644
--- a/lib/fog/aws/parsers/ec2/allocate_address.rb
+++ b/lib/fog/aws/parsers/compute/allocate_address.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module EC2
+      module Compute
 
         class AllocateAddress < Fog::Parsers::Base
 
diff --git a/lib/fog/aws/parsers/ec2/attach_volume.rb b/lib/fog/aws/parsers/compute/attach_volume.rb
similarity index 95%
rename from lib/fog/aws/parsers/ec2/attach_volume.rb
rename to lib/fog/aws/parsers/compute/attach_volume.rb
index 1992cdd5c..4bb8150f0 100644
--- a/lib/fog/aws/parsers/ec2/attach_volume.rb
+++ b/lib/fog/aws/parsers/compute/attach_volume.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module EC2
+      module Compute
 
         class AttachVolume < Fog::Parsers::Base
 
diff --git a/lib/fog/aws/parsers/ec2/basic.rb b/lib/fog/aws/parsers/compute/basic.rb
similarity index 95%
rename from lib/fog/aws/parsers/ec2/basic.rb
rename to lib/fog/aws/parsers/compute/basic.rb
index e30b8a33e..f591d96df 100644
--- a/lib/fog/aws/parsers/ec2/basic.rb
+++ b/lib/fog/aws/parsers/compute/basic.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module EC2
+      module Compute
 
         class Basic < Fog::Parsers::Base
 
diff --git a/lib/fog/aws/parsers/ec2/create_image.rb b/lib/fog/aws/parsers/compute/create_image.rb
similarity index 94%
rename from lib/fog/aws/parsers/ec2/create_image.rb
rename to lib/fog/aws/parsers/compute/create_image.rb
index a5ed2e37f..57ee677d5 100644
--- a/lib/fog/aws/parsers/ec2/create_image.rb
+++ b/lib/fog/aws/parsers/compute/create_image.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module EC2
+      module Compute
 
         class CreateImage < Fog::Parsers::Base
 
diff --git a/lib/fog/aws/parsers/ec2/create_key_pair.rb b/lib/fog/aws/parsers/compute/create_key_pair.rb
similarity index 94%
rename from lib/fog/aws/parsers/ec2/create_key_pair.rb
rename to lib/fog/aws/parsers/compute/create_key_pair.rb
index 2bfa48ee0..9fc8bd530 100644
--- a/lib/fog/aws/parsers/ec2/create_key_pair.rb
+++ b/lib/fog/aws/parsers/compute/create_key_pair.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module EC2
+      module Compute
 
         class CreateKeyPair < Fog::Parsers::Base
 
diff --git a/lib/fog/aws/parsers/ec2/create_snapshot.rb b/lib/fog/aws/parsers/compute/create_snapshot.rb
similarity index 95%
rename from lib/fog/aws/parsers/ec2/create_snapshot.rb
rename to lib/fog/aws/parsers/compute/create_snapshot.rb
index 40e2efd0d..e506a395c 100644
--- a/lib/fog/aws/parsers/ec2/create_snapshot.rb
+++ b/lib/fog/aws/parsers/compute/create_snapshot.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module EC2
+      module Compute
 
         class CreateSnapshot < Fog::Parsers::Base
 
@@ -23,4 +23,4 @@ module Fog
       end
     end
   end
-end
\ No newline at end of file
+end
diff --git a/lib/fog/aws/parsers/ec2/create_volume.rb b/lib/fog/aws/parsers/compute/create_volume.rb
similarity index 95%
rename from lib/fog/aws/parsers/ec2/create_volume.rb
rename to lib/fog/aws/parsers/compute/create_volume.rb
index 0b2bfe6bf..8b4263def 100644
--- a/lib/fog/aws/parsers/ec2/create_volume.rb
+++ b/lib/fog/aws/parsers/compute/create_volume.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module EC2
+      module Compute
 
         class CreateVolume < Fog::Parsers::Base
 
diff --git a/lib/fog/aws/parsers/ec2/deregister_image.rb b/lib/fog/aws/parsers/compute/deregister_image.rb
similarity index 93%
rename from lib/fog/aws/parsers/ec2/deregister_image.rb
rename to lib/fog/aws/parsers/compute/deregister_image.rb
index 706509975..697c124ff 100644
--- a/lib/fog/aws/parsers/ec2/deregister_image.rb
+++ b/lib/fog/aws/parsers/compute/deregister_image.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module EC2
+      module Compute
 
         class DeregisterImage < Fog::Parsers::Base
 
diff --git a/lib/fog/aws/parsers/ec2/describe_addresses.rb b/lib/fog/aws/parsers/compute/describe_addresses.rb
similarity index 96%
rename from lib/fog/aws/parsers/ec2/describe_addresses.rb
rename to lib/fog/aws/parsers/compute/describe_addresses.rb
index bc95c87d5..51087f6b5 100644
--- a/lib/fog/aws/parsers/ec2/describe_addresses.rb
+++ b/lib/fog/aws/parsers/compute/describe_addresses.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module EC2
+      module Compute
 
         class DescribeAddresses < Fog::Parsers::Base
 
diff --git a/lib/fog/aws/parsers/ec2/describe_availability_zones.rb b/lib/fog/aws/parsers/compute/describe_availability_zones.rb
similarity index 96%
rename from lib/fog/aws/parsers/ec2/describe_availability_zones.rb
rename to lib/fog/aws/parsers/compute/describe_availability_zones.rb
index b62619f95..92f27e82d 100644
--- a/lib/fog/aws/parsers/ec2/describe_availability_zones.rb
+++ b/lib/fog/aws/parsers/compute/describe_availability_zones.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module EC2
+      module Compute
 
         class DescribeAvailabilityZones < Fog::Parsers::Base
 
@@ -27,4 +27,4 @@ module Fog
       end
     end
   end
-end
\ No newline at end of file
+end
diff --git a/lib/fog/aws/parsers/ec2/describe_images.rb b/lib/fog/aws/parsers/compute/describe_images.rb
similarity index 98%
rename from lib/fog/aws/parsers/ec2/describe_images.rb
rename to lib/fog/aws/parsers/compute/describe_images.rb
index 1ab52b6a1..a9aded4c0 100644
--- a/lib/fog/aws/parsers/ec2/describe_images.rb
+++ b/lib/fog/aws/parsers/compute/describe_images.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module EC2
+      module Compute
 
         class DescribeImages < Fog::Parsers::Base
 
diff --git a/lib/fog/aws/parsers/ec2/describe_instances.rb b/lib/fog/aws/parsers/compute/describe_instances.rb
similarity index 99%
rename from lib/fog/aws/parsers/ec2/describe_instances.rb
rename to lib/fog/aws/parsers/compute/describe_instances.rb
index d5ba7fa2a..1f111b9ee 100644
--- a/lib/fog/aws/parsers/ec2/describe_instances.rb
+++ b/lib/fog/aws/parsers/compute/describe_instances.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module EC2
+      module Compute
 
         class DescribeInstances < Fog::Parsers::Base
 
diff --git a/lib/fog/aws/parsers/ec2/describe_key_pairs.rb b/lib/fog/aws/parsers/compute/describe_key_pairs.rb
similarity index 96%
rename from lib/fog/aws/parsers/ec2/describe_key_pairs.rb
rename to lib/fog/aws/parsers/compute/describe_key_pairs.rb
index 68f657a86..d62746b32 100644
--- a/lib/fog/aws/parsers/ec2/describe_key_pairs.rb
+++ b/lib/fog/aws/parsers/compute/describe_key_pairs.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module EC2
+      module Compute
 
         class DescribeKeyPairs < Fog::Parsers::Base
 
diff --git a/lib/fog/aws/parsers/ec2/describe_regions.rb b/lib/fog/aws/parsers/compute/describe_regions.rb
similarity index 95%
rename from lib/fog/aws/parsers/ec2/describe_regions.rb
rename to lib/fog/aws/parsers/compute/describe_regions.rb
index fee6c2006..fe93ef49b 100644
--- a/lib/fog/aws/parsers/ec2/describe_regions.rb
+++ b/lib/fog/aws/parsers/compute/describe_regions.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module EC2
+      module Compute
 
         class DescribeRegions < Fog::Parsers::Base
 
@@ -27,4 +27,4 @@ module Fog
       end
     end
   end
-end
\ No newline at end of file
+end
diff --git a/lib/fog/aws/parsers/ec2/describe_reserved_instances.rb b/lib/fog/aws/parsers/compute/describe_reserved_instances.rb
similarity index 97%
rename from lib/fog/aws/parsers/ec2/describe_reserved_instances.rb
rename to lib/fog/aws/parsers/compute/describe_reserved_instances.rb
index fe899f65e..4452ebd9d 100644
--- a/lib/fog/aws/parsers/ec2/describe_reserved_instances.rb
+++ b/lib/fog/aws/parsers/compute/describe_reserved_instances.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module EC2
+      module Compute
 
         class DescribeReservedInstances < Fog::Parsers::Base
 
diff --git a/lib/fog/aws/parsers/ec2/describe_security_groups.rb b/lib/fog/aws/parsers/compute/describe_security_groups.rb
similarity index 99%
rename from lib/fog/aws/parsers/ec2/describe_security_groups.rb
rename to lib/fog/aws/parsers/compute/describe_security_groups.rb
index d2cd0f0bb..68c323b21 100644
--- a/lib/fog/aws/parsers/ec2/describe_security_groups.rb
+++ b/lib/fog/aws/parsers/compute/describe_security_groups.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module EC2
+      module Compute
 
         class DescribeSecurityGroups < Fog::Parsers::Base
 
diff --git a/lib/fog/aws/parsers/ec2/describe_snapshots.rb b/lib/fog/aws/parsers/compute/describe_snapshots.rb
similarity index 97%
rename from lib/fog/aws/parsers/ec2/describe_snapshots.rb
rename to lib/fog/aws/parsers/compute/describe_snapshots.rb
index 4da599a6e..e5e235b8d 100644
--- a/lib/fog/aws/parsers/ec2/describe_snapshots.rb
+++ b/lib/fog/aws/parsers/compute/describe_snapshots.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module EC2
+      module Compute
 
         class DescribeSnapshots < Fog::Parsers::Base
 
diff --git a/lib/fog/aws/parsers/ec2/describe_volumes.rb b/lib/fog/aws/parsers/compute/describe_volumes.rb
similarity index 98%
rename from lib/fog/aws/parsers/ec2/describe_volumes.rb
rename to lib/fog/aws/parsers/compute/describe_volumes.rb
index 998d603ce..ec0c30783 100644
--- a/lib/fog/aws/parsers/ec2/describe_volumes.rb
+++ b/lib/fog/aws/parsers/compute/describe_volumes.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module EC2
+      module Compute
 
         class DescribeVolumes < Fog::Parsers::Base
 
diff --git a/lib/fog/aws/parsers/ec2/detach_volume.rb b/lib/fog/aws/parsers/compute/detach_volume.rb
similarity index 95%
rename from lib/fog/aws/parsers/ec2/detach_volume.rb
rename to lib/fog/aws/parsers/compute/detach_volume.rb
index 3e8361051..54b382485 100644
--- a/lib/fog/aws/parsers/ec2/detach_volume.rb
+++ b/lib/fog/aws/parsers/compute/detach_volume.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module EC2
+      module Compute
 
         class DetachVolume < Fog::Parsers::Base
 
diff --git a/lib/fog/aws/parsers/ec2/get_console_output.rb b/lib/fog/aws/parsers/compute/get_console_output.rb
similarity index 96%
rename from lib/fog/aws/parsers/ec2/get_console_output.rb
rename to lib/fog/aws/parsers/compute/get_console_output.rb
index 1fff5408d..1315735f3 100644
--- a/lib/fog/aws/parsers/ec2/get_console_output.rb
+++ b/lib/fog/aws/parsers/compute/get_console_output.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module EC2
+      module Compute
 
         class GetConsoleOutput < Fog::Parsers::Base
 
@@ -29,4 +29,4 @@ module Fog
       end
     end
   end
-end
\ No newline at end of file
+end
diff --git a/lib/fog/aws/parsers/ec2/register_image.rb b/lib/fog/aws/parsers/compute/register_image.rb
similarity index 93%
rename from lib/fog/aws/parsers/ec2/register_image.rb
rename to lib/fog/aws/parsers/compute/register_image.rb
index c5bfb7c51..8db68cff2 100644
--- a/lib/fog/aws/parsers/ec2/register_image.rb
+++ b/lib/fog/aws/parsers/compute/register_image.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module EC2
+      module Compute
 
         class RegisterImage < Fog::Parsers::Base
 
diff --git a/lib/fog/aws/parsers/ec2/run_instances.rb b/lib/fog/aws/parsers/compute/run_instances.rb
similarity index 99%
rename from lib/fog/aws/parsers/ec2/run_instances.rb
rename to lib/fog/aws/parsers/compute/run_instances.rb
index 493915c20..d26bed69f 100644
--- a/lib/fog/aws/parsers/ec2/run_instances.rb
+++ b/lib/fog/aws/parsers/compute/run_instances.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module EC2
+      module Compute
 
         class RunInstances < Fog::Parsers::Base
 
diff --git a/lib/fog/aws/parsers/ec2/start_stop_instances.rb b/lib/fog/aws/parsers/compute/start_stop_instances.rb
similarity index 97%
rename from lib/fog/aws/parsers/ec2/start_stop_instances.rb
rename to lib/fog/aws/parsers/compute/start_stop_instances.rb
index 2db6a9401..f83bd5d97 100644
--- a/lib/fog/aws/parsers/ec2/start_stop_instances.rb
+++ b/lib/fog/aws/parsers/compute/start_stop_instances.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module EC2
+      module Compute
 
         class StartStopInstances < Fog::Parsers::Base
 
diff --git a/lib/fog/aws/parsers/ec2/terminate_instances.rb b/lib/fog/aws/parsers/compute/terminate_instances.rb
similarity index 98%
rename from lib/fog/aws/parsers/ec2/terminate_instances.rb
rename to lib/fog/aws/parsers/compute/terminate_instances.rb
index 458392ade..6f9a466a3 100644
--- a/lib/fog/aws/parsers/ec2/terminate_instances.rb
+++ b/lib/fog/aws/parsers/compute/terminate_instances.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module EC2
+      module Compute
 
         class TerminateInstances < Fog::Parsers::Base
 
diff --git a/lib/fog/aws/parsers/s3/access_control_list.rb b/lib/fog/aws/parsers/storage/access_control_list.rb
similarity index 98%
rename from lib/fog/aws/parsers/s3/access_control_list.rb
rename to lib/fog/aws/parsers/storage/access_control_list.rb
index 385d7cdec..b0f1f70db 100644
--- a/lib/fog/aws/parsers/s3/access_control_list.rb
+++ b/lib/fog/aws/parsers/storage/access_control_list.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module S3
+      module Storage
 
         class AccessControlList < Fog::Parsers::Base
 
diff --git a/lib/fog/aws/parsers/s3/copy_object.rb b/lib/fog/aws/parsers/storage/copy_object.rb
similarity index 94%
rename from lib/fog/aws/parsers/s3/copy_object.rb
rename to lib/fog/aws/parsers/storage/copy_object.rb
index 333e525aa..4e428bd06 100644
--- a/lib/fog/aws/parsers/s3/copy_object.rb
+++ b/lib/fog/aws/parsers/storage/copy_object.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module S3
+      module Storage
 
         class CopyObject < Fog::Parsers::Base
 
diff --git a/lib/fog/aws/parsers/s3/get_bucket.rb b/lib/fog/aws/parsers/storage/get_bucket.rb
similarity index 98%
rename from lib/fog/aws/parsers/s3/get_bucket.rb
rename to lib/fog/aws/parsers/storage/get_bucket.rb
index 4df0fd605..740a82662 100644
--- a/lib/fog/aws/parsers/s3/get_bucket.rb
+++ b/lib/fog/aws/parsers/storage/get_bucket.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module S3
+      module Storage
 
         class GetBucket < Fog::Parsers::Base
 
diff --git a/lib/fog/aws/parsers/s3/get_bucket_location.rb b/lib/fog/aws/parsers/storage/get_bucket_location.rb
similarity index 93%
rename from lib/fog/aws/parsers/s3/get_bucket_location.rb
rename to lib/fog/aws/parsers/storage/get_bucket_location.rb
index 4ed325f9b..ba40bd006 100644
--- a/lib/fog/aws/parsers/s3/get_bucket_location.rb
+++ b/lib/fog/aws/parsers/storage/get_bucket_location.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module S3
+      module Storage
 
         class GetBucketLocation < Fog::Parsers::Base
 
diff --git a/lib/fog/aws/parsers/s3/get_bucket_logging.rb b/lib/fog/aws/parsers/storage/get_bucket_logging.rb
similarity index 98%
rename from lib/fog/aws/parsers/s3/get_bucket_logging.rb
rename to lib/fog/aws/parsers/storage/get_bucket_logging.rb
index ede0c6b5f..ef635b1fe 100644
--- a/lib/fog/aws/parsers/s3/get_bucket_logging.rb
+++ b/lib/fog/aws/parsers/storage/get_bucket_logging.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module S3
+      module Storage
 
         class AccessControlList < Fog::Parsers::Base
 
diff --git a/lib/fog/aws/parsers/s3/get_bucket_object_versions.rb b/lib/fog/aws/parsers/storage/get_bucket_object_versions.rb
similarity index 99%
rename from lib/fog/aws/parsers/s3/get_bucket_object_versions.rb
rename to lib/fog/aws/parsers/storage/get_bucket_object_versions.rb
index 30e6744d5..8d631dc8a 100644
--- a/lib/fog/aws/parsers/s3/get_bucket_object_versions.rb
+++ b/lib/fog/aws/parsers/storage/get_bucket_object_versions.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module S3
+      module Storage
 
         class GetBucketObjectVersions < Fog::Parsers::Base
 
diff --git a/lib/fog/aws/parsers/s3/get_bucket_versioning.rb b/lib/fog/aws/parsers/storage/get_bucket_versioning.rb
similarity index 95%
rename from lib/fog/aws/parsers/s3/get_bucket_versioning.rb
rename to lib/fog/aws/parsers/storage/get_bucket_versioning.rb
index 24433dd6d..1a3f9470a 100644
--- a/lib/fog/aws/parsers/s3/get_bucket_versioning.rb
+++ b/lib/fog/aws/parsers/storage/get_bucket_versioning.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module S3
+      module Storage
 
         class GetBucketVersioning < Fog::Parsers::Base
 
diff --git a/lib/fog/aws/parsers/s3/get_request_payment.rb b/lib/fog/aws/parsers/storage/get_request_payment.rb
similarity index 93%
rename from lib/fog/aws/parsers/s3/get_request_payment.rb
rename to lib/fog/aws/parsers/storage/get_request_payment.rb
index 1abc91a6d..2884f4b67 100644
--- a/lib/fog/aws/parsers/s3/get_request_payment.rb
+++ b/lib/fog/aws/parsers/storage/get_request_payment.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module S3
+      module Storage
 
         class GetRequestPayment < Fog::Parsers::Base
 
diff --git a/lib/fog/aws/parsers/s3/get_service.rb b/lib/fog/aws/parsers/storage/get_service.rb
similarity index 96%
rename from lib/fog/aws/parsers/s3/get_service.rb
rename to lib/fog/aws/parsers/storage/get_service.rb
index b888d28ab..d3ad8cc02 100644
--- a/lib/fog/aws/parsers/s3/get_service.rb
+++ b/lib/fog/aws/parsers/storage/get_service.rb
@@ -1,7 +1,7 @@
 module Fog
   module Parsers
     module AWS
-      module S3
+      module Storage
 
         class GetService < Fog::Parsers::Base
 
diff --git a/lib/fog/aws/requests/ec2/allocate_address.rb b/lib/fog/aws/requests/compute/allocate_address.rb
similarity index 90%
rename from lib/fog/aws/requests/ec2/allocate_address.rb
rename to lib/fog/aws/requests/compute/allocate_address.rb
index 4f79cd6b9..c6f5cec69 100644
--- a/lib/fog/aws/requests/ec2/allocate_address.rb
+++ b/lib/fog/aws/requests/compute/allocate_address.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
-        require 'fog/aws/parsers/ec2/allocate_address'
+        require 'fog/aws/parsers/compute/allocate_address'
 
         # Acquire an elastic IP address.
         #
@@ -15,7 +15,7 @@ module Fog
         def allocate_address
           request(
             'Action'  => 'AllocateAddress',
-            :parser   => Fog::Parsers::AWS::EC2::AllocateAddress.new
+            :parser   => Fog::Parsers::AWS::Compute::AllocateAddress.new
           )
         end
 
diff --git a/lib/fog/aws/requests/ec2/associate_address.rb b/lib/fog/aws/requests/compute/associate_address.rb
similarity index 95%
rename from lib/fog/aws/requests/ec2/associate_address.rb
rename to lib/fog/aws/requests/compute/associate_address.rb
index 9774d765c..9f2a222e8 100644
--- a/lib/fog/aws/requests/ec2/associate_address.rb
+++ b/lib/fog/aws/requests/compute/associate_address.rb
@@ -1,6 +1,6 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
         # Associate an elastic IP address with an instance
@@ -20,7 +20,7 @@ module Fog
             'InstanceId'  => instance_id,
             'PublicIp'    => public_ip,
             :idempotent   => true,
-            :parser       => Fog::Parsers::AWS::EC2::Basic.new
+            :parser       => Fog::Parsers::AWS::Compute::Basic.new
           )
         end
 
diff --git a/lib/fog/aws/requests/ec2/attach_volume.rb b/lib/fog/aws/requests/compute/attach_volume.rb
similarity index 95%
rename from lib/fog/aws/requests/ec2/attach_volume.rb
rename to lib/fog/aws/requests/compute/attach_volume.rb
index 059537720..ab31a2c6f 100644
--- a/lib/fog/aws/requests/ec2/attach_volume.rb
+++ b/lib/fog/aws/requests/compute/attach_volume.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
-        require 'fog/aws/parsers/ec2/attach_volume'
+        require 'fog/aws/parsers/compute/attach_volume'
 
         # Attach an Amazon EBS volume with a running instance, exposing as specified device
         #
@@ -28,7 +28,7 @@ module Fog
             'InstanceId'  => instance_id,
             'Device'      => device,
             :idempotent   => true,
-            :parser       => Fog::Parsers::AWS::EC2::AttachVolume.new
+            :parser       => Fog::Parsers::AWS::Compute::AttachVolume.new
           )
         end
 
diff --git a/lib/fog/aws/requests/ec2/authorize_security_group_ingress.rb b/lib/fog/aws/requests/compute/authorize_security_group_ingress.rb
similarity index 97%
rename from lib/fog/aws/requests/ec2/authorize_security_group_ingress.rb
rename to lib/fog/aws/requests/compute/authorize_security_group_ingress.rb
index 3e8b2d858..f03967ec9 100644
--- a/lib/fog/aws/requests/ec2/authorize_security_group_ingress.rb
+++ b/lib/fog/aws/requests/compute/authorize_security_group_ingress.rb
@@ -1,6 +1,6 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
         # Add permissions to a security group
@@ -26,7 +26,7 @@ module Fog
           request({
             'Action'    => 'AuthorizeSecurityGroupIngress',
             :idempotent => true,
-            :parser     => Fog::Parsers::AWS::EC2::Basic.new
+            :parser     => Fog::Parsers::AWS::Compute::Basic.new
           }.merge!(options))
         end
 
diff --git a/lib/fog/aws/requests/ec2/create_image.rb b/lib/fog/aws/requests/compute/create_image.rb
similarity index 91%
rename from lib/fog/aws/requests/ec2/create_image.rb
rename to lib/fog/aws/requests/compute/create_image.rb
index 9cf7cc0cd..e296147ed 100644
--- a/lib/fog/aws/requests/ec2/create_image.rb
+++ b/lib/fog/aws/requests/compute/create_image.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
-        require 'fog/aws/parsers/ec2/create_image'
+        require 'fog/aws/parsers/compute/create_image'
 
         # Create a bootable EBS volume AMI
         #
@@ -25,7 +25,7 @@ module Fog
             'Name'              => name,
             'Description'       => description,
             'NoReboot'          => no_reboot.to_s,
-            :parser             => Fog::Parsers::AWS::EC2::CreateImage.new
+            :parser             => Fog::Parsers::AWS::Compute::CreateImage.new
           )
         end
       end
diff --git a/lib/fog/aws/requests/ec2/create_key_pair.rb b/lib/fog/aws/requests/compute/create_key_pair.rb
similarity index 90%
rename from lib/fog/aws/requests/ec2/create_key_pair.rb
rename to lib/fog/aws/requests/compute/create_key_pair.rb
index c0a32b38c..689f541a2 100644
--- a/lib/fog/aws/requests/ec2/create_key_pair.rb
+++ b/lib/fog/aws/requests/compute/create_key_pair.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
-        require 'fog/aws/parsers/ec2/create_key_pair'
+        require 'fog/aws/parsers/compute/create_key_pair'
 
         # Create a new key pair
         #
@@ -21,7 +21,7 @@ module Fog
           request(
             'Action'  => 'CreateKeyPair',
             'KeyName' => key_name,
-            :parser   => Fog::Parsers::AWS::EC2::CreateKeyPair.new
+            :parser   => Fog::Parsers::AWS::Compute::CreateKeyPair.new
           )
         end
 
diff --git a/lib/fog/aws/requests/ec2/create_security_group.rb b/lib/fog/aws/requests/compute/create_security_group.rb
similarity index 94%
rename from lib/fog/aws/requests/ec2/create_security_group.rb
rename to lib/fog/aws/requests/compute/create_security_group.rb
index 60899b76b..6b229b7fc 100644
--- a/lib/fog/aws/requests/ec2/create_security_group.rb
+++ b/lib/fog/aws/requests/compute/create_security_group.rb
@@ -1,6 +1,6 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
         # Create a new security group
@@ -19,7 +19,7 @@ module Fog
             'Action'            => 'CreateSecurityGroup',
             'GroupName'         => name,
             'GroupDescription'  => CGI.escape(description),
-            :parser             => Fog::Parsers::AWS::EC2::Basic.new
+            :parser             => Fog::Parsers::AWS::Compute::Basic.new
           )
         end
 
diff --git a/lib/fog/aws/requests/ec2/create_snapshot.rb b/lib/fog/aws/requests/compute/create_snapshot.rb
similarity index 92%
rename from lib/fog/aws/requests/ec2/create_snapshot.rb
rename to lib/fog/aws/requests/compute/create_snapshot.rb
index 5b7d2f7c2..f461ee43c 100644
--- a/lib/fog/aws/requests/ec2/create_snapshot.rb
+++ b/lib/fog/aws/requests/compute/create_snapshot.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
-        require 'fog/aws/parsers/ec2/create_snapshot'
+        require 'fog/aws/parsers/compute/create_snapshot'
 
         # Create a snapshot of an EBS volume and store it in S3
         #
@@ -24,7 +24,7 @@ module Fog
             'Action'      => 'CreateSnapshot',
             'Description' => description,
             'VolumeId'    => volume_id,
-            :parser       => Fog::Parsers::AWS::EC2::CreateSnapshot.new
+            :parser       => Fog::Parsers::AWS::Compute::CreateSnapshot.new
           )
         end
 
diff --git a/lib/fog/aws/requests/ec2/create_volume.rb b/lib/fog/aws/requests/compute/create_volume.rb
similarity index 94%
rename from lib/fog/aws/requests/ec2/create_volume.rb
rename to lib/fog/aws/requests/compute/create_volume.rb
index ca1c5b7e5..a7d394caa 100644
--- a/lib/fog/aws/requests/ec2/create_volume.rb
+++ b/lib/fog/aws/requests/compute/create_volume.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
-        require 'fog/aws/parsers/ec2/create_volume'
+        require 'fog/aws/parsers/compute/create_volume'
 
         # Create an EBS volume
         #
@@ -27,7 +27,7 @@ module Fog
             'AvailabilityZone'  => availability_zone,
             'Size'              => size,
             'SnapshotId'        => snapshot_id,
-            :parser             => Fog::Parsers::AWS::EC2::CreateVolume.new
+            :parser             => Fog::Parsers::AWS::Compute::CreateVolume.new
           )
         end
 
diff --git a/lib/fog/aws/requests/ec2/delete_key_pair.rb b/lib/fog/aws/requests/compute/delete_key_pair.rb
similarity index 91%
rename from lib/fog/aws/requests/ec2/delete_key_pair.rb
rename to lib/fog/aws/requests/compute/delete_key_pair.rb
index c609a9937..2efbf7fb3 100644
--- a/lib/fog/aws/requests/ec2/delete_key_pair.rb
+++ b/lib/fog/aws/requests/compute/delete_key_pair.rb
@@ -1,6 +1,6 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
         # Delete a key pair that you own
@@ -18,7 +18,7 @@ module Fog
             'Action'    => 'DeleteKeyPair',
             'KeyName'   => key_name,
             :idempotent => true,
-            :parser     => Fog::Parsers::AWS::EC2::Basic.new
+            :parser     => Fog::Parsers::AWS::Compute::Basic.new
           )
         end
 
diff --git a/lib/fog/aws/requests/ec2/delete_security_group.rb b/lib/fog/aws/requests/compute/delete_security_group.rb
similarity index 93%
rename from lib/fog/aws/requests/ec2/delete_security_group.rb
rename to lib/fog/aws/requests/compute/delete_security_group.rb
index d1b08c821..05ae84b5a 100644
--- a/lib/fog/aws/requests/ec2/delete_security_group.rb
+++ b/lib/fog/aws/requests/compute/delete_security_group.rb
@@ -1,6 +1,6 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
         # Delete a security group that you own
@@ -18,7 +18,7 @@ module Fog
             'Action'    => 'DeleteSecurityGroup',
             'GroupName' => name,
             :idempotent => true,
-            :parser     => Fog::Parsers::AWS::EC2::Basic.new
+            :parser     => Fog::Parsers::AWS::Compute::Basic.new
           )
         end
 
diff --git a/lib/fog/aws/requests/ec2/delete_snapshot.rb b/lib/fog/aws/requests/compute/delete_snapshot.rb
similarity index 93%
rename from lib/fog/aws/requests/ec2/delete_snapshot.rb
rename to lib/fog/aws/requests/compute/delete_snapshot.rb
index 0bd1d5aae..6d96b0ceb 100644
--- a/lib/fog/aws/requests/ec2/delete_snapshot.rb
+++ b/lib/fog/aws/requests/compute/delete_snapshot.rb
@@ -1,6 +1,6 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
         # Delete a snapshot of an EBS volume that you own
@@ -18,7 +18,7 @@ module Fog
             'Action'      => 'DeleteSnapshot',
             'SnapshotId'  => snapshot_id,
             :idempotent   => true,
-            :parser       => Fog::Parsers::AWS::EC2::Basic.new
+            :parser       => Fog::Parsers::AWS::Compute::Basic.new
           )
         end
 
diff --git a/lib/fog/aws/requests/ec2/delete_volume.rb b/lib/fog/aws/requests/compute/delete_volume.rb
similarity index 94%
rename from lib/fog/aws/requests/ec2/delete_volume.rb
rename to lib/fog/aws/requests/compute/delete_volume.rb
index ca2037712..49705afae 100644
--- a/lib/fog/aws/requests/ec2/delete_volume.rb
+++ b/lib/fog/aws/requests/compute/delete_volume.rb
@@ -1,6 +1,6 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
         # Delete an EBS volume
@@ -18,7 +18,7 @@ module Fog
             'Action'    => 'DeleteVolume',
             'VolumeId'  => volume_id,
             :idempotent => true,
-            :parser     => Fog::Parsers::AWS::EC2::Basic.new
+            :parser     => Fog::Parsers::AWS::Compute::Basic.new
           )
         end
 
diff --git a/lib/fog/aws/requests/ec2/deregister_image.rb b/lib/fog/aws/requests/compute/deregister_image.rb
similarity index 88%
rename from lib/fog/aws/requests/ec2/deregister_image.rb
rename to lib/fog/aws/requests/compute/deregister_image.rb
index 72fcc9500..31a5f3671 100644
--- a/lib/fog/aws/requests/ec2/deregister_image.rb
+++ b/lib/fog/aws/requests/compute/deregister_image.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
-        require 'fog/aws/parsers/ec2/deregister_image'
+        require 'fog/aws/parsers/compute/deregister_image'
 
         # deregister an image
         #
@@ -19,7 +19,7 @@ module Fog
           request(
             'Action'      => 'DeregisterImage',
             'ImageId'     => image_id,
-            :parser       => Fog::Parsers::AWS::EC2::DeregisterImage.new
+            :parser       => Fog::Parsers::AWS::Compute::DeregisterImage.new
           )
         end
 
diff --git a/lib/fog/aws/requests/ec2/describe_addresses.rb b/lib/fog/aws/requests/compute/describe_addresses.rb
similarity index 91%
rename from lib/fog/aws/requests/ec2/describe_addresses.rb
rename to lib/fog/aws/requests/compute/describe_addresses.rb
index 54f30f6cf..31f004925 100644
--- a/lib/fog/aws/requests/ec2/describe_addresses.rb
+++ b/lib/fog/aws/requests/compute/describe_addresses.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
-        require 'fog/aws/parsers/ec2/describe_addresses'
+        require 'fog/aws/parsers/compute/describe_addresses'
 
         # Describe all or specified IP addresses.
         #
@@ -22,7 +22,7 @@ module Fog
           request({
             'Action'    => 'DescribeAddresses',
             :idempotent => true,
-            :parser     => Fog::Parsers::AWS::EC2::DescribeAddresses.new
+            :parser     => Fog::Parsers::AWS::Compute::DescribeAddresses.new
           }.merge!(params))
         end
 
diff --git a/lib/fog/aws/requests/ec2/describe_availability_zones.rb b/lib/fog/aws/requests/compute/describe_availability_zones.rb
similarity index 92%
rename from lib/fog/aws/requests/ec2/describe_availability_zones.rb
rename to lib/fog/aws/requests/compute/describe_availability_zones.rb
index 6263f296a..eed5eacb2 100644
--- a/lib/fog/aws/requests/ec2/describe_availability_zones.rb
+++ b/lib/fog/aws/requests/compute/describe_availability_zones.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
-        require 'fog/aws/parsers/ec2/describe_availability_zones'
+        require 'fog/aws/parsers/compute/describe_availability_zones'
 
         # Describe all or specified availability zones
         #
@@ -23,7 +23,7 @@ module Fog
           request({
             'Action'    => 'DescribeAvailabilityZones',
             :idempotent => true,
-            :parser     => Fog::Parsers::AWS::EC2::DescribeAvailabilityZones.new
+            :parser     => Fog::Parsers::AWS::Compute::DescribeAvailabilityZones.new
           }.merge!(params))
         end
 
diff --git a/lib/fog/aws/requests/ec2/describe_images.rb b/lib/fog/aws/requests/compute/describe_images.rb
similarity index 94%
rename from lib/fog/aws/requests/ec2/describe_images.rb
rename to lib/fog/aws/requests/compute/describe_images.rb
index f496a527f..4a47cb9ba 100644
--- a/lib/fog/aws/requests/ec2/describe_images.rb
+++ b/lib/fog/aws/requests/compute/describe_images.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
-        require 'fog/aws/parsers/ec2/describe_images'
+        require 'fog/aws/parsers/compute/describe_images'
 
         # Describe all or specified images.
         #
@@ -40,7 +40,7 @@ module Fog
           request({
             'Action'    => 'DescribeImages',
             :idempotent => true,
-            :parser     => Fog::Parsers::AWS::EC2::DescribeImages.new
+            :parser     => Fog::Parsers::AWS::Compute::DescribeImages.new
           }.merge!(options))
         end
 
diff --git a/lib/fog/aws/requests/ec2/describe_instances.rb b/lib/fog/aws/requests/compute/describe_instances.rb
similarity index 97%
rename from lib/fog/aws/requests/ec2/describe_instances.rb
rename to lib/fog/aws/requests/compute/describe_instances.rb
index 74dfc55d2..570550635 100644
--- a/lib/fog/aws/requests/ec2/describe_instances.rb
+++ b/lib/fog/aws/requests/compute/describe_instances.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
-        require 'fog/aws/parsers/ec2/describe_instances'
+        require 'fog/aws/parsers/compute/describe_instances'
 
         # Describe all or specified instances
         #
@@ -55,7 +55,7 @@ module Fog
           request({
             'Action'    => 'DescribeInstances',
             :idempotent => true,
-            :parser     => Fog::Parsers::AWS::EC2::DescribeInstances.new
+            :parser     => Fog::Parsers::AWS::Compute::DescribeInstances.new
           }.merge!(params))
         end
 
diff --git a/lib/fog/aws/requests/ec2/describe_key_pairs.rb b/lib/fog/aws/requests/compute/describe_key_pairs.rb
similarity index 91%
rename from lib/fog/aws/requests/ec2/describe_key_pairs.rb
rename to lib/fog/aws/requests/compute/describe_key_pairs.rb
index 3fad4a0f7..e65ec9b71 100644
--- a/lib/fog/aws/requests/ec2/describe_key_pairs.rb
+++ b/lib/fog/aws/requests/compute/describe_key_pairs.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
-        require 'fog/aws/parsers/ec2/describe_key_pairs'
+        require 'fog/aws/parsers/compute/describe_key_pairs'
 
         # Describe all or specified key pairs
         #
@@ -22,7 +22,7 @@ module Fog
           request({
             'Action'    => 'DescribeKeyPairs',
             :idempotent => true,
-            :parser     => Fog::Parsers::AWS::EC2::DescribeKeyPairs.new
+            :parser     => Fog::Parsers::AWS::Compute::DescribeKeyPairs.new
           }.merge!(params))
         end
 
diff --git a/lib/fog/aws/requests/ec2/describe_regions.rb b/lib/fog/aws/requests/compute/describe_regions.rb
similarity index 92%
rename from lib/fog/aws/requests/ec2/describe_regions.rb
rename to lib/fog/aws/requests/compute/describe_regions.rb
index 4d3e49378..e38bb7962 100644
--- a/lib/fog/aws/requests/ec2/describe_regions.rb
+++ b/lib/fog/aws/requests/compute/describe_regions.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
-        require 'fog/aws/parsers/ec2/describe_regions'
+        require 'fog/aws/parsers/compute/describe_regions'
 
         # Describe all or specified regions
         #
@@ -22,7 +22,7 @@ module Fog
           request({
             'Action'    => 'DescribeRegions',
             :idempotent => true,
-            :parser     => Fog::Parsers::AWS::EC2::DescribeRegions.new
+            :parser     => Fog::Parsers::AWS::Compute::DescribeRegions.new
           }.merge!(params))
         end
 
diff --git a/lib/fog/aws/requests/ec2/describe_reserved_instances.rb b/lib/fog/aws/requests/compute/describe_reserved_instances.rb
similarity index 90%
rename from lib/fog/aws/requests/ec2/describe_reserved_instances.rb
rename to lib/fog/aws/requests/compute/describe_reserved_instances.rb
index f650d616e..6c2a2591f 100644
--- a/lib/fog/aws/requests/ec2/describe_reserved_instances.rb
+++ b/lib/fog/aws/requests/compute/describe_reserved_instances.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
-        require 'fog/aws/parsers/ec2/describe_reserved_instances'
+        require 'fog/aws/parsers/compute/describe_reserved_instances'
 
         # Describe all or specified reserved instances
         #
@@ -30,7 +30,7 @@ module Fog
           request({
             'Action'    => 'DescribeReservedInstances',
             :idempotent => true,
-            :parser     => Fog::Parsers::AWS::EC2::DescribeReservedInstances.new
+            :parser     => Fog::Parsers::AWS::Compute::DescribeReservedInstances.new
           }.merge!(params))
         end
 
diff --git a/lib/fog/aws/requests/ec2/describe_security_groups.rb b/lib/fog/aws/requests/compute/describe_security_groups.rb
similarity index 93%
rename from lib/fog/aws/requests/ec2/describe_security_groups.rb
rename to lib/fog/aws/requests/compute/describe_security_groups.rb
index ae267dcea..f5ee9d280 100644
--- a/lib/fog/aws/requests/ec2/describe_security_groups.rb
+++ b/lib/fog/aws/requests/compute/describe_security_groups.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
-        require 'fog/aws/parsers/ec2/describe_security_groups'
+        require 'fog/aws/parsers/compute/describe_security_groups'
 
         # Describe all or specified security groups
         #
@@ -32,7 +32,7 @@ module Fog
           request({
             'Action'    => 'DescribeSecurityGroups',
             :idempotent => true,
-            :parser     => Fog::Parsers::AWS::EC2::DescribeSecurityGroups.new
+            :parser     => Fog::Parsers::AWS::Compute::DescribeSecurityGroups.new
           }.merge!(params))
         end
 
diff --git a/lib/fog/aws/requests/ec2/describe_snapshots.rb b/lib/fog/aws/requests/compute/describe_snapshots.rb
similarity index 94%
rename from lib/fog/aws/requests/ec2/describe_snapshots.rb
rename to lib/fog/aws/requests/compute/describe_snapshots.rb
index cd2ac8b39..e68907ee1 100644
--- a/lib/fog/aws/requests/ec2/describe_snapshots.rb
+++ b/lib/fog/aws/requests/compute/describe_snapshots.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
-        require 'fog/aws/parsers/ec2/describe_snapshots'
+        require 'fog/aws/parsers/compute/describe_snapshots'
 
         # Describe all or specified snapshots
         #
@@ -29,7 +29,7 @@ module Fog
           request({
             'Action'    => 'DescribeSnapshots',
             :idempotent => true,
-            :parser     => Fog::Parsers::AWS::EC2::DescribeSnapshots.new
+            :parser     => Fog::Parsers::AWS::Compute::DescribeSnapshots.new
           }.merge!(options))
         end
 
diff --git a/lib/fog/aws/requests/ec2/describe_volumes.rb b/lib/fog/aws/requests/compute/describe_volumes.rb
similarity index 95%
rename from lib/fog/aws/requests/ec2/describe_volumes.rb
rename to lib/fog/aws/requests/compute/describe_volumes.rb
index 890808b4c..4360be403 100644
--- a/lib/fog/aws/requests/ec2/describe_volumes.rb
+++ b/lib/fog/aws/requests/compute/describe_volumes.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
-        require 'fog/aws/parsers/ec2/describe_volumes'
+        require 'fog/aws/parsers/compute/describe_volumes'
 
         # Describe all or specified volumes.
         #
@@ -31,7 +31,7 @@ module Fog
           request({
             'Action'    => 'DescribeVolumes',
             :idempotent => true,
-            :parser     => Fog::Parsers::AWS::EC2::DescribeVolumes.new
+            :parser     => Fog::Parsers::AWS::Compute::DescribeVolumes.new
           }.merge!(params))
         end
 
diff --git a/lib/fog/aws/requests/ec2/detach_volume.rb b/lib/fog/aws/requests/compute/detach_volume.rb
similarity index 92%
rename from lib/fog/aws/requests/ec2/detach_volume.rb
rename to lib/fog/aws/requests/compute/detach_volume.rb
index f5caec747..194ba15fc 100644
--- a/lib/fog/aws/requests/ec2/detach_volume.rb
+++ b/lib/fog/aws/requests/compute/detach_volume.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
-        require 'fog/aws/parsers/ec2/detach_volume'
+        require 'fog/aws/parsers/compute/detach_volume'
 
         # Detach an Amazon EBS volume from a running instance
         #
@@ -28,7 +28,7 @@ module Fog
             'Action'    => 'DetachVolume',
             'VolumeId'  => volume_id,
             :idempotent => true,
-            :parser     => Fog::Parsers::AWS::EC2::DetachVolume.new
+            :parser     => Fog::Parsers::AWS::Compute::DetachVolume.new
           }.merge!(options))
         end
 
diff --git a/lib/fog/aws/requests/ec2/disassociate_address.rb b/lib/fog/aws/requests/compute/disassociate_address.rb
similarity index 94%
rename from lib/fog/aws/requests/ec2/disassociate_address.rb
rename to lib/fog/aws/requests/compute/disassociate_address.rb
index 21a6d6a85..7fbbe117c 100644
--- a/lib/fog/aws/requests/ec2/disassociate_address.rb
+++ b/lib/fog/aws/requests/compute/disassociate_address.rb
@@ -1,6 +1,6 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
         # Disassociate an elastic IP address from its instance (if any)
@@ -18,7 +18,7 @@ module Fog
             'Action'    => 'DisassociateAddress',
             'PublicIp'  => public_ip,
             :idempotent => true,
-            :parser     => Fog::Parsers::AWS::EC2::Basic.new
+            :parser     => Fog::Parsers::AWS::Compute::Basic.new
           )
         end
 
diff --git a/lib/fog/aws/requests/ec2/get_console_output.rb b/lib/fog/aws/requests/compute/get_console_output.rb
similarity index 89%
rename from lib/fog/aws/requests/ec2/get_console_output.rb
rename to lib/fog/aws/requests/compute/get_console_output.rb
index 55198ee86..b03159efe 100644
--- a/lib/fog/aws/requests/ec2/get_console_output.rb
+++ b/lib/fog/aws/requests/compute/get_console_output.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
-        require 'fog/aws/parsers/ec2/get_console_output'
+        require 'fog/aws/parsers/compute/get_console_output'
 
         # Retrieve console output for specified instance
         #
@@ -22,7 +22,7 @@ module Fog
             'Action'      => 'GetConsoleOutput',
             'InstanceId'  => instance_id,
             :idempotent   => true,
-            :parser       => Fog::Parsers::AWS::EC2::GetConsoleOutput.new
+            :parser       => Fog::Parsers::AWS::Compute::GetConsoleOutput.new
           )
         end
 
diff --git a/lib/fog/aws/requests/ec2/modify_image_attributes.rb b/lib/fog/aws/requests/compute/modify_image_attributes.rb
similarity index 93%
rename from lib/fog/aws/requests/ec2/modify_image_attributes.rb
rename to lib/fog/aws/requests/compute/modify_image_attributes.rb
index d661c92f4..97cf25d8b 100644
--- a/lib/fog/aws/requests/ec2/modify_image_attributes.rb
+++ b/lib/fog/aws/requests/compute/modify_image_attributes.rb
@@ -1,6 +1,6 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
         # Modify image attributes
@@ -21,7 +21,7 @@ module Fog
             'ImageId'       => image_id,
             'OperationType' => operation_type,
             :idempotent     => true,
-            :parser         => Fog::Parsers::AWS::EC2::Basic.new
+            :parser         => Fog::Parsers::AWS::Compute::Basic.new
           }.merge!(params))
         end
 
diff --git a/lib/fog/aws/requests/ec2/modify_snapshot_attribute.rb b/lib/fog/aws/requests/compute/modify_snapshot_attribute.rb
similarity index 92%
rename from lib/fog/aws/requests/ec2/modify_snapshot_attribute.rb
rename to lib/fog/aws/requests/compute/modify_snapshot_attribute.rb
index b958a976e..7935efbe0 100644
--- a/lib/fog/aws/requests/ec2/modify_snapshot_attribute.rb
+++ b/lib/fog/aws/requests/compute/modify_snapshot_attribute.rb
@@ -1,6 +1,6 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
         # Modify snapshot attributes
@@ -20,7 +20,7 @@ module Fog
             'SnapshotId'    => snapshot_id,
             'OperationType' => operation_type,
             :idempotent     => true,
-            :parser         => Fog::Parsers::AWS::EC2::Basic.new
+            :parser         => Fog::Parsers::AWS::Compute::Basic.new
           }.merge!(params))
         end
 
diff --git a/lib/fog/aws/requests/ec2/reboot_instances.rb b/lib/fog/aws/requests/compute/reboot_instances.rb
similarity index 94%
rename from lib/fog/aws/requests/ec2/reboot_instances.rb
rename to lib/fog/aws/requests/compute/reboot_instances.rb
index 6f420d397..d23be97f4 100644
--- a/lib/fog/aws/requests/ec2/reboot_instances.rb
+++ b/lib/fog/aws/requests/compute/reboot_instances.rb
@@ -1,6 +1,6 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
         # Reboot specified instances
@@ -18,7 +18,7 @@ module Fog
           request({
             'Action'    => 'RebootInstances',
             :idempotent => true,
-            :parser     => Fog::Parsers::AWS::EC2::Basic.new
+            :parser     => Fog::Parsers::AWS::Compute::Basic.new
           }.merge!(params))
         end
 
diff --git a/lib/fog/aws/requests/ec2/register_image.rb b/lib/fog/aws/requests/compute/register_image.rb
similarity index 95%
rename from lib/fog/aws/requests/ec2/register_image.rb
rename to lib/fog/aws/requests/compute/register_image.rb
index 62b23fe10..fb642c2d5 100644
--- a/lib/fog/aws/requests/ec2/register_image.rb
+++ b/lib/fog/aws/requests/compute/register_image.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
-        require 'fog/aws/parsers/ec2/register_image'
+        require 'fog/aws/parsers/compute/register_image'
 
         # register an image
         #
@@ -36,7 +36,7 @@ module Fog
             'Action'      => 'RegisterImage',
             'Name'        => name,
             'Description' => description,
-            :parser       => Fog::Parsers::AWS::EC2::RegisterImage.new
+            :parser       => Fog::Parsers::AWS::Compute::RegisterImage.new
           }
 
           # This determines if we are doing a snapshot or a S3 backed AMI.
diff --git a/lib/fog/aws/requests/ec2/release_address.rb b/lib/fog/aws/requests/compute/release_address.rb
similarity index 92%
rename from lib/fog/aws/requests/ec2/release_address.rb
rename to lib/fog/aws/requests/compute/release_address.rb
index aa24ac63c..8f40e5397 100644
--- a/lib/fog/aws/requests/ec2/release_address.rb
+++ b/lib/fog/aws/requests/compute/release_address.rb
@@ -1,6 +1,6 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
         # Release an elastic IP address.
@@ -15,7 +15,7 @@ module Fog
             'Action'    => 'ReleaseAddress',
             'PublicIp'  => public_ip,
             :idempotent => true,
-            :parser     => Fog::Parsers::AWS::EC2::Basic.new
+            :parser     => Fog::Parsers::AWS::Compute::Basic.new
           )
         end
 
diff --git a/lib/fog/aws/requests/ec2/revoke_security_group_ingress.rb b/lib/fog/aws/requests/compute/revoke_security_group_ingress.rb
similarity index 96%
rename from lib/fog/aws/requests/ec2/revoke_security_group_ingress.rb
rename to lib/fog/aws/requests/compute/revoke_security_group_ingress.rb
index b23b11533..379e8bff4 100644
--- a/lib/fog/aws/requests/ec2/revoke_security_group_ingress.rb
+++ b/lib/fog/aws/requests/compute/revoke_security_group_ingress.rb
@@ -1,6 +1,6 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
         # Remove permissions from a security group
@@ -26,7 +26,7 @@ module Fog
           request({
             'Action'    => 'RevokeSecurityGroupIngress',
             :idempotent => true,
-            :parser     => Fog::Parsers::AWS::EC2::Basic.new
+            :parser     => Fog::Parsers::AWS::Compute::Basic.new
           }.merge!(options))
         end
 
diff --git a/lib/fog/aws/requests/ec2/run_instances.rb b/lib/fog/aws/requests/compute/run_instances.rb
similarity index 98%
rename from lib/fog/aws/requests/ec2/run_instances.rb
rename to lib/fog/aws/requests/compute/run_instances.rb
index 4ae1f8861..49eb79525 100644
--- a/lib/fog/aws/requests/ec2/run_instances.rb
+++ b/lib/fog/aws/requests/compute/run_instances.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
-        require 'fog/aws/parsers/ec2/run_instances'
+        require 'fog/aws/parsers/compute/run_instances'
 
         # Launch specified instances
         #
@@ -97,7 +97,7 @@ module Fog
             'ImageId'   => image_id,
             'MinCount'  => min_count,
             'MaxCount'  => max_count,
-            :parser     => Fog::Parsers::AWS::EC2::RunInstances.new
+            :parser     => Fog::Parsers::AWS::Compute::RunInstances.new
           }.merge!(options))
         end
 
diff --git a/lib/fog/aws/requests/ec2/start_instances.rb b/lib/fog/aws/requests/compute/start_instances.rb
similarity index 82%
rename from lib/fog/aws/requests/ec2/start_instances.rb
rename to lib/fog/aws/requests/compute/start_instances.rb
index 5831ddee2..f6f21e9fb 100644
--- a/lib/fog/aws/requests/ec2/start_instances.rb
+++ b/lib/fog/aws/requests/compute/start_instances.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
-        require 'fog/aws/parsers/ec2/start_stop_instances'
+        require 'fog/aws/parsers/compute/start_stop_instances'
 
         # Start specified instance
         #
@@ -20,7 +20,7 @@ module Fog
           request({
             'Action'    => 'StartInstances',
             :idempotent => true,
-            :parser     => Fog::Parsers::AWS::EC2::StartStopInstances.new
+            :parser     => Fog::Parsers::AWS::Compute::StartStopInstances.new
           }.merge!(params))
         end
 
diff --git a/lib/fog/aws/requests/ec2/stop_instances.rb b/lib/fog/aws/requests/compute/stop_instances.rb
similarity index 82%
rename from lib/fog/aws/requests/ec2/stop_instances.rb
rename to lib/fog/aws/requests/compute/stop_instances.rb
index 35a20edd1..eca2d05c1 100644
--- a/lib/fog/aws/requests/ec2/stop_instances.rb
+++ b/lib/fog/aws/requests/compute/stop_instances.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
-        require 'fog/aws/parsers/ec2/start_stop_instances'
+        require 'fog/aws/parsers/compute/start_stop_instances'
 
         # Stop specified instance
         #
@@ -20,7 +20,7 @@ module Fog
           request({
             'Action'    => 'StopInstances',
             :idempotent => true,
-            :parser     => Fog::Parsers::AWS::EC2::StartStopInstances.new
+            :parser     => Fog::Parsers::AWS::Compute::StartStopInstances.new
           }.merge!(params))
         end
 
diff --git a/lib/fog/aws/requests/ec2/terminate_instances.rb b/lib/fog/aws/requests/compute/terminate_instances.rb
similarity index 95%
rename from lib/fog/aws/requests/ec2/terminate_instances.rb
rename to lib/fog/aws/requests/compute/terminate_instances.rb
index 5b0328532..f7787d285 100644
--- a/lib/fog/aws/requests/ec2/terminate_instances.rb
+++ b/lib/fog/aws/requests/compute/terminate_instances.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class EC2
+    class Compute
       class Real
 
-        require 'fog/aws/parsers/ec2/terminate_instances'
+        require 'fog/aws/parsers/compute/terminate_instances'
 
         # Terminate specified instances
         #
@@ -27,7 +27,7 @@ module Fog
           request({
             'Action'    => 'TerminateInstances',
             :idempotent => true,
-            :parser     => Fog::Parsers::AWS::EC2::TerminateInstances.new
+            :parser     => Fog::Parsers::AWS::Compute::TerminateInstances.new
           }.merge!(params))
         end
 
diff --git a/lib/fog/aws/requests/s3/copy_object.rb b/lib/fog/aws/requests/storage/copy_object.rb
similarity index 95%
rename from lib/fog/aws/requests/s3/copy_object.rb
rename to lib/fog/aws/requests/storage/copy_object.rb
index 91cd2d752..fdfff6651 100644
--- a/lib/fog/aws/requests/s3/copy_object.rb
+++ b/lib/fog/aws/requests/storage/copy_object.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class S3
+    class Storage
       class Real
 
-        require 'fog/aws/parsers/s3/copy_object'
+        require 'fog/aws/parsers/storage/copy_object'
 
         # Copy an object from one S3 bucket to another
         #
@@ -32,7 +32,7 @@ module Fog
             :headers  => headers,
             :host     => "#{target_bucket_name}.#{@host}",
             :method   => 'PUT',
-            :parser   => Fog::Parsers::AWS::S3::CopyObject.new,
+            :parser   => Fog::Parsers::AWS::Storage::CopyObject.new,
             :path     => CGI.escape(target_object_name)
           })
         end
diff --git a/lib/fog/aws/requests/s3/delete_bucket.rb b/lib/fog/aws/requests/storage/delete_bucket.rb
similarity index 98%
rename from lib/fog/aws/requests/s3/delete_bucket.rb
rename to lib/fog/aws/requests/storage/delete_bucket.rb
index 1bcde8382..5b7248eb4 100644
--- a/lib/fog/aws/requests/s3/delete_bucket.rb
+++ b/lib/fog/aws/requests/storage/delete_bucket.rb
@@ -1,6 +1,6 @@
 module Fog
   module AWS
-    class S3
+    class Storage
       class Real
 
         # Delete an S3 bucket
diff --git a/lib/fog/aws/requests/s3/delete_object.rb b/lib/fog/aws/requests/storage/delete_object.rb
similarity index 98%
rename from lib/fog/aws/requests/s3/delete_object.rb
rename to lib/fog/aws/requests/storage/delete_object.rb
index 58a1b144c..75cd7c290 100644
--- a/lib/fog/aws/requests/s3/delete_object.rb
+++ b/lib/fog/aws/requests/storage/delete_object.rb
@@ -1,6 +1,6 @@
 module Fog
   module AWS
-    class S3
+    class Storage
       class Real
 
         # Delete an object from S3
diff --git a/lib/fog/aws/requests/s3/get_bucket.rb b/lib/fog/aws/requests/storage/get_bucket.rb
similarity index 96%
rename from lib/fog/aws/requests/s3/get_bucket.rb
rename to lib/fog/aws/requests/storage/get_bucket.rb
index afee29b83..ef438d195 100644
--- a/lib/fog/aws/requests/s3/get_bucket.rb
+++ b/lib/fog/aws/requests/storage/get_bucket.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class S3
+    class Storage
       class Real
 
-        require 'fog/aws/parsers/s3/get_bucket'
+        require 'fog/aws/parsers/storage/get_bucket'
 
         # List information about objects in an S3 bucket
         #
@@ -46,7 +46,7 @@ module Fog
             :host     => "#{bucket_name}.#{@host}",
             :idempotent => true,
             :method   => 'GET',
-            :parser   => Fog::Parsers::AWS::S3::GetBucket.new,
+            :parser   => Fog::Parsers::AWS::Storage::GetBucket.new,
             :query    => options
           })
         end
diff --git a/lib/fog/aws/requests/s3/get_bucket_acl.rb b/lib/fog/aws/requests/storage/get_bucket_acl.rb
similarity index 90%
rename from lib/fog/aws/requests/s3/get_bucket_acl.rb
rename to lib/fog/aws/requests/storage/get_bucket_acl.rb
index fe283461c..6dde20977 100644
--- a/lib/fog/aws/requests/s3/get_bucket_acl.rb
+++ b/lib/fog/aws/requests/storage/get_bucket_acl.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class S3
+    class Storage
       class Real
 
-        require 'fog/aws/parsers/s3/access_control_list'
+        require 'fog/aws/parsers/storage/access_control_list'
 
         # Get access control list for an S3 bucket
         #
@@ -36,7 +36,7 @@ module Fog
             :host       => "#{bucket_name}.#{@host}",
             :idempotent => true,
             :method     => 'GET',
-            :parser     => Fog::Parsers::AWS::S3::AccessControlList.new,
+            :parser     => Fog::Parsers::AWS::Storage::AccessControlList.new,
             :query      => {'acl' => nil}
           })
         end
diff --git a/lib/fog/aws/requests/s3/get_bucket_location.rb b/lib/fog/aws/requests/storage/get_bucket_location.rb
similarity index 88%
rename from lib/fog/aws/requests/s3/get_bucket_location.rb
rename to lib/fog/aws/requests/storage/get_bucket_location.rb
index e2f13d9e9..c18b091b6 100644
--- a/lib/fog/aws/requests/s3/get_bucket_location.rb
+++ b/lib/fog/aws/requests/storage/get_bucket_location.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class S3
+    class Storage
       class Real
 
-        require 'fog/aws/parsers/s3/get_bucket_location'
+        require 'fog/aws/parsers/storage/get_bucket_location'
 
         # Get location constraint for an S3 bucket
         #
@@ -21,7 +21,7 @@ module Fog
             :host     => "#{bucket_name}.#{@host}",
             :idempotent => true,
             :method   => 'GET',
-            :parser   => Fog::Parsers::AWS::S3::GetBucketLocation.new,
+            :parser   => Fog::Parsers::AWS::Storage::GetBucketLocation.new,
             :query    => {'location' => nil}
           })
         end
diff --git a/lib/fog/aws/requests/s3/get_bucket_logging.rb b/lib/fog/aws/requests/storage/get_bucket_logging.rb
similarity index 91%
rename from lib/fog/aws/requests/s3/get_bucket_logging.rb
rename to lib/fog/aws/requests/storage/get_bucket_logging.rb
index 154884fad..4b6101f43 100644
--- a/lib/fog/aws/requests/s3/get_bucket_logging.rb
+++ b/lib/fog/aws/requests/storage/get_bucket_logging.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class S3
+    class Storage
       class Real
 
-        require 'fog/aws/parsers/s3/get_bucket_logging'
+        require 'fog/aws/parsers/storage/get_bucket_logging'
 
         # Get logging status for an S3 bucket
         #
@@ -36,7 +36,7 @@ module Fog
             :host       => "#{bucket_name}.#{@host}",
             :idempotent => true,
             :method     => 'GET',
-            :parser     => Fog::Parsers::AWS::S3::GetBucketLogging.new,
+            :parser     => Fog::Parsers::AWS::Storage::GetBucketLogging.new,
             :query      => {'logging' => nil}
           })
         end
diff --git a/lib/fog/aws/requests/s3/get_bucket_object_versions.rb b/lib/fog/aws/requests/storage/get_bucket_object_versions.rb
similarity index 95%
rename from lib/fog/aws/requests/s3/get_bucket_object_versions.rb
rename to lib/fog/aws/requests/storage/get_bucket_object_versions.rb
index ec21dfd53..974b3e33f 100644
--- a/lib/fog/aws/requests/s3/get_bucket_object_versions.rb
+++ b/lib/fog/aws/requests/storage/get_bucket_object_versions.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class S3
+    class Storage
       class Real
 
-        require 'fog/aws/parsers/s3/get_bucket_object_versions'
+        require 'fog/aws/parsers/storage/get_bucket_object_versions'
 
         # List information about object versions in an S3 bucket
         #
@@ -61,7 +61,7 @@ module Fog
             :host     => "#{bucket_name}.#{@host}",
             :idempotent => true,
             :method   => 'GET',
-            :parser   => Fog::Parsers::AWS::S3::GetBucketObjectVersions.new,
+            :parser   => Fog::Parsers::AWS::Storage::GetBucketObjectVersions.new,
             :query    => {'versions' => nil}.merge!(options)
           })
         end
diff --git a/lib/fog/aws/requests/s3/get_bucket_versioning.rb b/lib/fog/aws/requests/storage/get_bucket_versioning.rb
similarity index 86%
rename from lib/fog/aws/requests/s3/get_bucket_versioning.rb
rename to lib/fog/aws/requests/storage/get_bucket_versioning.rb
index 5e9921091..24b2e68ce 100644
--- a/lib/fog/aws/requests/s3/get_bucket_versioning.rb
+++ b/lib/fog/aws/requests/storage/get_bucket_versioning.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class S3
+    class Storage
       class Real
 
-        require 'fog/aws/parsers/s3/get_bucket_versioning'
+        require 'fog/aws/parsers/storage/get_bucket_versioning'
 
         # Get versioning status for an S3 bucket
         #
@@ -26,7 +26,7 @@ module Fog
             :host       => "#{bucket_name}.#{@host}",
             :idempotent => true,
             :method     => 'GET',
-            :parser     => Fog::Parsers::AWS::S3::GetBucketVersioning.new,
+            :parser     => Fog::Parsers::AWS::Storage::GetBucketVersioning.new,
             :query      => {'versioning' => nil}
           })
         end
diff --git a/lib/fog/aws/requests/s3/get_object.rb b/lib/fog/aws/requests/storage/get_object.rb
similarity index 99%
rename from lib/fog/aws/requests/s3/get_object.rb
rename to lib/fog/aws/requests/storage/get_object.rb
index c8158f317..c53b9ad85 100644
--- a/lib/fog/aws/requests/s3/get_object.rb
+++ b/lib/fog/aws/requests/storage/get_object.rb
@@ -1,6 +1,6 @@
 module Fog
   module AWS
-    class S3
+    class Storage
       class Real
 
         # Get an object from S3
diff --git a/lib/fog/aws/requests/s3/get_object_acl.rb b/lib/fog/aws/requests/storage/get_object_acl.rb
similarity index 92%
rename from lib/fog/aws/requests/s3/get_object_acl.rb
rename to lib/fog/aws/requests/storage/get_object_acl.rb
index 5b9814a03..fc522e5d7 100644
--- a/lib/fog/aws/requests/s3/get_object_acl.rb
+++ b/lib/fog/aws/requests/storage/get_object_acl.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class S3
+    class Storage
       class Real
 
-        require 'fog/aws/parsers/s3/access_control_list'
+        require 'fog/aws/parsers/storage/access_control_list'
 
         # Get access control list for an S3 object
         #
@@ -46,7 +46,7 @@ module Fog
             :host       => "#{bucket_name}.#{@host}",
             :idempotent => true,
             :method     => 'GET',
-            :parser     => Fog::Parsers::AWS::S3::AccessControlList.new,
+            :parser     => Fog::Parsers::AWS::Storage::AccessControlList.new,
             :path       => CGI.escape(object_name),
             :query      => query
           })
diff --git a/lib/fog/aws/requests/s3/get_object_torrent.rb b/lib/fog/aws/requests/storage/get_object_torrent.rb
similarity index 98%
rename from lib/fog/aws/requests/s3/get_object_torrent.rb
rename to lib/fog/aws/requests/storage/get_object_torrent.rb
index b3b2d834b..9340f4aea 100644
--- a/lib/fog/aws/requests/s3/get_object_torrent.rb
+++ b/lib/fog/aws/requests/storage/get_object_torrent.rb
@@ -1,6 +1,6 @@
 module Fog
   module AWS
-    class S3
+    class Storage
       class Real
 
         # Get torrent for an S3 object
diff --git a/lib/fog/aws/requests/s3/get_object_url.rb b/lib/fog/aws/requests/storage/get_object_url.rb
similarity index 98%
rename from lib/fog/aws/requests/s3/get_object_url.rb
rename to lib/fog/aws/requests/storage/get_object_url.rb
index 99ea1a667..ff0f09b54 100644
--- a/lib/fog/aws/requests/s3/get_object_url.rb
+++ b/lib/fog/aws/requests/storage/get_object_url.rb
@@ -1,6 +1,6 @@
 module Fog
   module AWS
-    class S3
+    class Storage
       class Real
 
         # Get an expiring object url from S3
diff --git a/lib/fog/aws/requests/s3/get_request_payment.rb b/lib/fog/aws/requests/storage/get_request_payment.rb
similarity index 88%
rename from lib/fog/aws/requests/s3/get_request_payment.rb
rename to lib/fog/aws/requests/storage/get_request_payment.rb
index 2c7c4ba82..8418ec146 100644
--- a/lib/fog/aws/requests/s3/get_request_payment.rb
+++ b/lib/fog/aws/requests/storage/get_request_payment.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class S3
+    class Storage
       class Real
 
-        require 'fog/aws/parsers/s3/get_request_payment'
+        require 'fog/aws/parsers/storage/get_request_payment'
 
         # Get configured payer for an S3 bucket
         #
@@ -21,7 +21,7 @@ module Fog
             :host     => "#{bucket_name}.#{@host}",
             :idempotent => true,
             :method   => 'GET',
-            :parser   => Fog::Parsers::AWS::S3::GetRequestPayment.new,
+            :parser   => Fog::Parsers::AWS::Storage::GetRequestPayment.new,
             :query    => {'requestPayment' => nil}
           })
         end
diff --git a/lib/fog/aws/requests/s3/get_service.rb b/lib/fog/aws/requests/storage/get_service.rb
similarity index 90%
rename from lib/fog/aws/requests/s3/get_service.rb
rename to lib/fog/aws/requests/storage/get_service.rb
index 862ac7e5c..c4a959efd 100644
--- a/lib/fog/aws/requests/s3/get_service.rb
+++ b/lib/fog/aws/requests/storage/get_service.rb
@@ -1,9 +1,9 @@
 module Fog
   module AWS
-    class S3
+    class Storage
       class Real
 
-        require 'fog/aws/parsers/s3/get_service'
+        require 'fog/aws/parsers/storage/get_service'
 
         # List information about S3 buckets for authorized user
         #
@@ -23,7 +23,7 @@ module Fog
             :host     => @host,
             :idempotent => true,
             :method   => 'GET',
-            :parser   => Fog::Parsers::AWS::S3::GetService.new,
+            :parser   => Fog::Parsers::AWS::Storage::GetService.new,
             :url      => @host
           })
         end
diff --git a/lib/fog/aws/requests/s3/head_object.rb b/lib/fog/aws/requests/storage/head_object.rb
similarity index 99%
rename from lib/fog/aws/requests/s3/head_object.rb
rename to lib/fog/aws/requests/storage/head_object.rb
index 30c85f0a0..b4e783338 100644
--- a/lib/fog/aws/requests/s3/head_object.rb
+++ b/lib/fog/aws/requests/storage/head_object.rb
@@ -1,6 +1,6 @@
 module Fog
   module AWS
-    class S3
+    class Storage
       class Real
 
         # Get headers for an object from S3
diff --git a/lib/fog/aws/requests/s3/put_bucket.rb b/lib/fog/aws/requests/storage/put_bucket.rb
similarity index 99%
rename from lib/fog/aws/requests/s3/put_bucket.rb
rename to lib/fog/aws/requests/storage/put_bucket.rb
index c632eaa6f..fbc07d579 100644
--- a/lib/fog/aws/requests/s3/put_bucket.rb
+++ b/lib/fog/aws/requests/storage/put_bucket.rb
@@ -1,6 +1,6 @@
 module Fog
   module AWS
-    class S3
+    class Storage
       class Real
 
         # Create an S3 bucket
diff --git a/lib/fog/aws/requests/s3/put_bucket_acl.rb b/lib/fog/aws/requests/storage/put_bucket_acl.rb
similarity index 99%
rename from lib/fog/aws/requests/s3/put_bucket_acl.rb
rename to lib/fog/aws/requests/storage/put_bucket_acl.rb
index 14414df0d..be10ddd04 100644
--- a/lib/fog/aws/requests/s3/put_bucket_acl.rb
+++ b/lib/fog/aws/requests/storage/put_bucket_acl.rb
@@ -1,6 +1,6 @@
 module Fog
   module AWS
-    class S3
+    class Storage
       class Real
 
         # Change access control list for an S3 bucket
diff --git a/lib/fog/aws/requests/s3/put_bucket_logging.rb b/lib/fog/aws/requests/storage/put_bucket_logging.rb
similarity index 99%
rename from lib/fog/aws/requests/s3/put_bucket_logging.rb
rename to lib/fog/aws/requests/storage/put_bucket_logging.rb
index a3ab90d2b..f0da7cd6d 100644
--- a/lib/fog/aws/requests/s3/put_bucket_logging.rb
+++ b/lib/fog/aws/requests/storage/put_bucket_logging.rb
@@ -1,6 +1,6 @@
 module Fog
   module AWS
-    class S3
+    class Storage
       class Real
 
         # Change logging status for an S3 bucket
diff --git a/lib/fog/aws/requests/s3/put_bucket_versioning.rb b/lib/fog/aws/requests/storage/put_bucket_versioning.rb
similarity index 98%
rename from lib/fog/aws/requests/s3/put_bucket_versioning.rb
rename to lib/fog/aws/requests/storage/put_bucket_versioning.rb
index db90a5055..9f258d6b8 100644
--- a/lib/fog/aws/requests/s3/put_bucket_versioning.rb
+++ b/lib/fog/aws/requests/storage/put_bucket_versioning.rb
@@ -1,6 +1,6 @@
 module Fog
   module AWS
-    class S3
+    class Storage
       class Real
 
         # Change versioning status for an S3 bucket
diff --git a/lib/fog/aws/requests/s3/put_object.rb b/lib/fog/aws/requests/storage/put_object.rb
similarity index 99%
rename from lib/fog/aws/requests/s3/put_object.rb
rename to lib/fog/aws/requests/storage/put_object.rb
index 6184a841e..93d886a0e 100644
--- a/lib/fog/aws/requests/s3/put_object.rb
+++ b/lib/fog/aws/requests/storage/put_object.rb
@@ -1,6 +1,6 @@
 module Fog
   module AWS
-    class S3
+    class Storage
       class Real
 
         # Create an object in an S3 bucket
diff --git a/lib/fog/aws/requests/s3/put_object_url.rb b/lib/fog/aws/requests/storage/put_object_url.rb
similarity index 98%
rename from lib/fog/aws/requests/s3/put_object_url.rb
rename to lib/fog/aws/requests/storage/put_object_url.rb
index 1f0ce2f0d..75031768d 100644
--- a/lib/fog/aws/requests/s3/put_object_url.rb
+++ b/lib/fog/aws/requests/storage/put_object_url.rb
@@ -1,6 +1,6 @@
 module Fog
   module AWS
-    class S3
+    class Storage
       class Real
 
         # Get an expiring object url from S3 for putting an object
diff --git a/lib/fog/aws/requests/s3/put_request_payment.rb b/lib/fog/aws/requests/storage/put_request_payment.rb
similarity index 98%
rename from lib/fog/aws/requests/s3/put_request_payment.rb
rename to lib/fog/aws/requests/storage/put_request_payment.rb
index eda7e52d3..b6ce1f63a 100644
--- a/lib/fog/aws/requests/s3/put_request_payment.rb
+++ b/lib/fog/aws/requests/storage/put_request_payment.rb
@@ -1,6 +1,6 @@
 module Fog
   module AWS
-    class S3
+    class Storage
       class Real
 
         # Change who pays for requests to an S3 bucket
diff --git a/lib/fog/aws/s3.rb b/lib/fog/aws/s3.rb
index 9810975ba..a1e1991c4 100644
--- a/lib/fog/aws/s3.rb
+++ b/lib/fog/aws/s3.rb
@@ -1,211 +1,15 @@
 module Fog
   module AWS
-    class S3 < Fog::Service
-
-      requires :aws_access_key_id, :aws_secret_access_key
-
-      model_path 'fog/aws/models/s3'
-      collection  :directories
-      model       :directory
-      collection  :files
-      model       :file
-
-      request_path 'fog/aws/requests/s3'
-      request :copy_object
-      request :delete_bucket
-      request :delete_object
-      request :get_bucket
-      request :get_bucket_acl
-      request :get_bucket_location
-      request :get_bucket_logging
-      request :get_bucket_object_versions
-      request :get_bucket_versioning
-      request :get_object
-      request :get_object_acl
-      request :get_object_torrent
-      request :get_object_url
-      request :get_request_payment
-      request :get_service
-      request :head_object
-      request :put_bucket
-      request :put_bucket_acl
-      request :put_bucket_logging
-      request :put_bucket_versioning
-      request :put_object
-      request :put_object_url
-      request :put_request_payment
-
-      module Utils
-
-        def parse_data(data)
-          metadata = {
-            :body => nil,
-            :headers => {}
-          }
-
-          if data.is_a?(String)
-            metadata[:body] = data
-            metadata[:headers]['Content-Length'] = metadata[:body].size.to_s
-          else
-            filename = ::File.basename(data.path)
-            unless (mime_types = MIME::Types.of(filename)).empty?
-              metadata[:headers]['Content-Type'] = mime_types.first.content_type
-            end
-            metadata[:body] = data
-            metadata[:headers]['Content-Length'] = ::File.size(data.path).to_s
-          end
-          # metadata[:headers]['Content-MD5'] = Base64.encode64(Digest::MD5.digest(metadata[:body])).strip
-          metadata
-        end
-
-        def url(params, expires)
-          params[:headers]['Date'] = expires.to_i
-          query = [params[:query]].compact
-          query << "AWSAccessKeyId=#{@aws_access_key_id}"
-          query << "Signature=#{CGI.escape(signature(params))}"
-          query << "Expires=#{params[:headers]['Date']}"
-          "http://#{params[:host]}/#{params[:path]}?#{query.join('&')}"
-        end
+    class S3
 
+      def self.new(attributes = {})
+        location = caller.first
+        warning = "[yellow][WARN] Fog::AWS::S3#new is deprecated, use Fog::AWS::Storage#new instead[/]"
+        warning << " [light_black](" << location << ")[/] "
+        Formatador.display_line(warning)
+        Fog::AWS::Storage.new(attributes)
       end
 
-      class Mock
-        include Collections
-        include Utils
-
-        def self.data
-          @data ||= Hash.new do |hash, key|
-            hash[key] = {
-              :buckets => {}
-            }
-          end
-        end
-
-        def self.reset_data(keys=data.keys)
-          for key in [*keys]
-            data.delete(key)
-          end
-        end
-
-        def initialize(options={})
-          @aws_access_key_id = options[:aws_access_key_id]
-          @data = self.class.data[@aws_access_key_id]
-        end
-
-        def signature(params)
-          "foo"
-        end
-      end
-
-      class Real
-        include Collections
-        include Utils
-        extend Fog::Deprecation
-        deprecate(:reset, :reload)
-
-        # Initialize connection to S3
-        #
-        # ==== Notes
-        # options parameter must include values for :aws_access_key_id and 
-        # :aws_secret_access_key in order to create a connection
-        #
-        # ==== Examples
-        #   s3 = S3.new(
-        #     :aws_access_key_id => your_aws_access_key_id,
-        #     :aws_secret_access_key => your_aws_secret_access_key
-        #   )
-        #
-        # ==== Parameters
-        # * options<~Hash> - config arguments for connection.  Defaults to {}.
-        #
-        # ==== Returns
-        # * S3 object with connection to aws.
-        def initialize(options={})
-          @aws_access_key_id = options[:aws_access_key_id]
-          @aws_secret_access_key = options[:aws_secret_access_key]
-          @hmac = Fog::HMAC.new('sha1', @aws_secret_access_key)
-          options[:region] ||= 'us-east-1'
-          @host = options[:host] || case options[:region]
-            when 'us-east-1'
-              's3.amazonaws.com'
-            when 'ap-southeast-1'
-              's3-ap-southeast-1.amazonaws.com'
-            when 'us-west-1'
-              's3-us-west-1.amazonaws.com'
-            else
-              raise ArgumentError, "Unknown region: #{options[:region].inspect}"
-            end
-          @port   = options[:port]      || 443
-          @scheme = options[:scheme]    || 'https'
-          @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}", options[:persistent] || true)
-        end
-
-        def reload
-          @connection.reset
-        end
-
-        private
-
-        def request(params, &block)
-          params[:headers]['Date'] = Time.now.utc.strftime("%a, %d %b %Y %H:%M:%S +0000")
-          params[:headers]['Authorization'] = "AWS #{@aws_access_key_id}:#{signature(params)}"
-
-          response = @connection.request(params, &block)
-
-          response
-        end
-
-        def signature(params)
-          string_to_sign =
-<<-DATA
-#{params[:method]}
-#{params[:headers]['Content-MD5']}
-#{params[:headers]['Content-Type']}
-#{params[:headers]['Date']}
-DATA
-
-          amz_headers, canonical_amz_headers = {}, ''
-          for key, value in params[:headers]
-            if key[0..5] == 'x-amz-'
-              amz_headers[key] = value
-            end
-          end
-          amz_headers = amz_headers.sort {|x, y| x[0] <=> y[0]}
-          for key, value in amz_headers
-            canonical_amz_headers << "#{key}:#{value}\n"
-          end
-          string_to_sign << "#{canonical_amz_headers}"
-
-          subdomain = params[:host].split(".#{@host}").first
-          unless subdomain =~ /^(?:[a-z]|\d(?!\d{0,2}(?:\.\d{1,3}){3}$))(?:[a-z0-9]|\.(?![\.\-])|\-(?![\.])){1,61}[a-z0-9]$/
-            Formatador.display_line("[yellow][WARN] fog: the specified s3 bucket name(#{subdomain}) is not a valid dns name.  See: http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?Introduction.html[/]")
-            params[:host] = params[:host].split("#{subdomain}.")[-1]
-            if params[:path]
-              params[:path] = "#{subdomain}/#{params[:path]}"
-            else
-              params[:path] = "#{subdomain}"
-            end
-            subdomain = nil
-          end
-
-          canonical_resource  = "/"
-          unless subdomain.nil? || subdomain == @host
-            canonical_resource << "#{CGI.escape(subdomain).downcase}/"
-          end
-          canonical_resource << "#{params[:path]}"
-          canonical_resource << '?'
-          for key in (params[:query] || {}).keys
-            if ['acl', 'location', 'logging', 'requestPayment', 'torrent', 'versions', 'versioning'].include?(key)
-              canonical_resource << "#{key}&"
-            end
-          end
-          canonical_resource.chop!
-          string_to_sign << "#{canonical_resource}"
-
-          signed_string = @hmac.sign(string_to_sign)
-          signature = Base64.encode64(signed_string).chomp!
-        end
-      end
     end
   end
 end
diff --git a/lib/fog/aws/storage.rb b/lib/fog/aws/storage.rb
new file mode 100644
index 000000000..d01b6fbe4
--- /dev/null
+++ b/lib/fog/aws/storage.rb
@@ -0,0 +1,211 @@
+module Fog
+  module AWS
+    class Storage < Fog::Service
+
+      requires :aws_access_key_id, :aws_secret_access_key
+
+      model_path 'fog/aws/models/storage'
+      collection  :directories
+      model       :directory
+      collection  :files
+      model       :file
+
+      request_path 'fog/aws/requests/storage'
+      request :copy_object
+      request :delete_bucket
+      request :delete_object
+      request :get_bucket
+      request :get_bucket_acl
+      request :get_bucket_location
+      request :get_bucket_logging
+      request :get_bucket_object_versions
+      request :get_bucket_versioning
+      request :get_object
+      request :get_object_acl
+      request :get_object_torrent
+      request :get_object_url
+      request :get_request_payment
+      request :get_service
+      request :head_object
+      request :put_bucket
+      request :put_bucket_acl
+      request :put_bucket_logging
+      request :put_bucket_versioning
+      request :put_object
+      request :put_object_url
+      request :put_request_payment
+
+      module Utils
+
+        def parse_data(data)
+          metadata = {
+            :body => nil,
+            :headers => {}
+          }
+
+          if data.is_a?(String)
+            metadata[:body] = data
+            metadata[:headers]['Content-Length'] = metadata[:body].size.to_s
+          else
+            filename = ::File.basename(data.path)
+            unless (mime_types = MIME::Types.of(filename)).empty?
+              metadata[:headers]['Content-Type'] = mime_types.first.content_type
+            end
+            metadata[:body] = data
+            metadata[:headers]['Content-Length'] = ::File.size(data.path).to_s
+          end
+          # metadata[:headers]['Content-MD5'] = Base64.encode64(Digest::MD5.digest(metadata[:body])).strip
+          metadata
+        end
+
+        def url(params, expires)
+          params[:headers]['Date'] = expires.to_i
+          query = [params[:query]].compact
+          query << "AWSAccessKeyId=#{@aws_access_key_id}"
+          query << "Signature=#{CGI.escape(signature(params))}"
+          query << "Expires=#{params[:headers]['Date']}"
+          "http://#{params[:host]}/#{params[:path]}?#{query.join('&')}"
+        end
+
+      end
+
+      class Mock
+        include Collections
+        include Utils
+
+        def self.data
+          @data ||= Hash.new do |hash, key|
+            hash[key] = {
+              :buckets => {}
+            }
+          end
+        end
+
+        def self.reset_data(keys=data.keys)
+          for key in [*keys]
+            data.delete(key)
+          end
+        end
+
+        def initialize(options={})
+          @aws_access_key_id = options[:aws_access_key_id]
+          @data = self.class.data[@aws_access_key_id]
+        end
+
+        def signature(params)
+          "foo"
+        end
+      end
+
+      class Real
+        include Collections
+        include Utils
+        extend Fog::Deprecation
+        deprecate(:reset, :reload)
+
+        # Initialize connection to S3
+        #
+        # ==== Notes
+        # options parameter must include values for :aws_access_key_id and 
+        # :aws_secret_access_key in order to create a connection
+        #
+        # ==== Examples
+        #   s3 = S3.new(
+        #     :aws_access_key_id => your_aws_access_key_id,
+        #     :aws_secret_access_key => your_aws_secret_access_key
+        #   )
+        #
+        # ==== Parameters
+        # * options<~Hash> - config arguments for connection.  Defaults to {}.
+        #
+        # ==== Returns
+        # * S3 object with connection to aws.
+        def initialize(options={})
+          @aws_access_key_id = options[:aws_access_key_id]
+          @aws_secret_access_key = options[:aws_secret_access_key]
+          @hmac = Fog::HMAC.new('sha1', @aws_secret_access_key)
+          options[:region] ||= 'us-east-1'
+          @host = options[:host] || case options[:region]
+            when 'us-east-1'
+              's3.amazonaws.com'
+            when 'ap-southeast-1'
+              's3-ap-southeast-1.amazonaws.com'
+            when 'us-west-1'
+              's3-us-west-1.amazonaws.com'
+            else
+              raise ArgumentError, "Unknown region: #{options[:region].inspect}"
+            end
+          @port   = options[:port]      || 443
+          @scheme = options[:scheme]    || 'https'
+          @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}", options[:persistent] || true)
+        end
+
+        def reload
+          @connection.reset
+        end
+
+        private
+
+        def request(params, &block)
+          params[:headers]['Date'] = Time.now.utc.strftime("%a, %d %b %Y %H:%M:%S +0000")
+          params[:headers]['Authorization'] = "AWS #{@aws_access_key_id}:#{signature(params)}"
+
+          response = @connection.request(params, &block)
+
+          response
+        end
+
+        def signature(params)
+          string_to_sign =
+<<-DATA
+#{params[:method]}
+#{params[:headers]['Content-MD5']}
+#{params[:headers]['Content-Type']}
+#{params[:headers]['Date']}
+DATA
+
+          amz_headers, canonical_amz_headers = {}, ''
+          for key, value in params[:headers]
+            if key[0..5] == 'x-amz-'
+              amz_headers[key] = value
+            end
+          end
+          amz_headers = amz_headers.sort {|x, y| x[0] <=> y[0]}
+          for key, value in amz_headers
+            canonical_amz_headers << "#{key}:#{value}\n"
+          end
+          string_to_sign << "#{canonical_amz_headers}"
+
+          subdomain = params[:host].split(".#{@host}").first
+          unless subdomain =~ /^(?:[a-z]|\d(?!\d{0,2}(?:\.\d{1,3}){3}$))(?:[a-z0-9]|\.(?![\.\-])|\-(?![\.])){1,61}[a-z0-9]$/
+            Formatador.display_line("[yellow][WARN] fog: the specified s3 bucket name(#{subdomain}) is not a valid dns name.  See: http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?Introduction.html[/]")
+            params[:host] = params[:host].split("#{subdomain}.")[-1]
+            if params[:path]
+              params[:path] = "#{subdomain}/#{params[:path]}"
+            else
+              params[:path] = "#{subdomain}"
+            end
+            subdomain = nil
+          end
+
+          canonical_resource  = "/"
+          unless subdomain.nil? || subdomain == @host
+            canonical_resource << "#{CGI.escape(subdomain).downcase}/"
+          end
+          canonical_resource << "#{params[:path]}"
+          canonical_resource << '?'
+          for key in (params[:query] || {}).keys
+            if ['acl', 'location', 'logging', 'requestPayment', 'torrent', 'versions', 'versioning'].include?(key)
+              canonical_resource << "#{key}&"
+            end
+          end
+          canonical_resource.chop!
+          string_to_sign << "#{canonical_resource}"
+
+          signed_string = @hmac.sign(string_to_sign)
+          signature = Base64.encode64(signed_string).chomp!
+        end
+      end
+    end
+  end
+end