diff --git a/lib/fog/core/errors.rb b/lib/fog/core/errors.rb
index 747291a9a..e042439b0 100644
--- a/lib/fog/core/errors.rb
+++ b/lib/fog/core/errors.rb
@@ -65,6 +65,9 @@ An alternate file may be used by placing its path in the FOG_RC environment vari
   :dnsimple_password:
   :dnsmadeeasy_api_key:
   :dnsmadeeasy_secret_key:
+  :cloudstack_host:
+  :cloudstack_api_key:
+  :cloudstack_secret_access_key:
 #
 # End of Fog Credentials File
 #######################################################
diff --git a/tests/cloudstack/signed_params_tests.rb b/tests/cloudstack/signed_params_tests.rb
new file mode 100644
index 000000000..6ba96da0a
--- /dev/null
+++ b/tests/cloudstack/signed_params_tests.rb
@@ -0,0 +1,12 @@
+# encoding: utf-8
+
+Shindo.tests('Cloudstack | escape', ['cloudstack']) do
+  returns( Fog::Cloudstack.escape( "'Stöp!' said Fred_-~." ) ) { "%27St%C3%B6p%21%27%20said%20Fred_-%7E." }
+end
+
+Shindo.tests('Cloudstack | signed_params', ['cloudstack']) do
+  returns( Fog::Cloudstack.signed_params( 'abcdefg', 'account' => 'Lorem Ipsum', 'domainid' => 42, 'q' => 'keywords' ) ) { "V2CxRU4zQQtox1DZsH/66GDdzhg=" }
+  returns( Fog::Cloudstack.signed_params( 'abcdefg', 'account' => 'Lorem Ipsum', 'domainid' => '42', 'q' => 'keywords' ) ) { "V2CxRU4zQQtox1DZsH/66GDdzhg=" }
+  returns( Fog::Cloudstack.signed_params( 'abcdefg', 'account' => 'Lorem Ipsum', 'domainid' => 42, 'q' => nil ) ) { "5bsDirm5pPgVoreQ6vquKRN+4HI=" }
+  returns( Fog::Cloudstack.signed_params( 'abcdefg', 'account' => 'Lorem Ipsum', 'domainid' => 42, 'q' => '' ) ) { "5bsDirm5pPgVoreQ6vquKRN+4HI=" }
+end
diff --git a/tests/compute/requests/cloudstack/domain_tests.rb b/tests/compute/requests/cloudstack/domain_tests.rb
new file mode 100644
index 000000000..9445c0dfa
--- /dev/null
+++ b/tests/compute/requests/cloudstack/domain_tests.rb
@@ -0,0 +1,26 @@
+Shindo.tests('Fog::Compute[:cloudstack] | domain requests', ['cloudstack']) do
+
+  @domains_format = {
+    'listdomainsresponse'  => {
+      'count' => Integer,
+      'domain' => [
+        'id' => Integer,
+        'name' => String,
+        'level' => Integer,
+        'haschild' => Fog::Boolean,
+        'parentdomainid' => Fog::Nullable::Integer,
+        'parentdomainname' => Fog::Nullable::String
+      ]
+    }
+  }
+
+  tests('success') do
+
+    tests('#list_domains').formats(@domains_format) do
+      pending if Fog.mocking?
+      Fog::Compute[:cloudstack].list_domains
+    end
+
+  end
+
+end
\ No newline at end of file
diff --git a/tests/compute/requests/cloudstack/snapshot_tests.rb b/tests/compute/requests/cloudstack/snapshot_tests.rb
new file mode 100644
index 000000000..4cae8a296
--- /dev/null
+++ b/tests/compute/requests/cloudstack/snapshot_tests.rb
@@ -0,0 +1,32 @@
+Shindo.tests('Fog::Compute[:cloudstack] | snapshot requests', ['cloudstack']) do
+
+  @snapshots_format = {
+    'listsnapshotsresponse'  => {
+      'count' => Integer,
+      'snapshot' => [
+        'id' => Integer,
+        'account' => String,
+        'domainid' => Integer,
+        'domain' => String,
+        'snapshottype' => String,
+        'volumeid' => Integer,
+        'volumename' => String,
+        'volumetype' => String,
+        'created' => String,
+        'name' => String,
+        'intervaltype' => String,
+        'state' => String
+      ]
+    }
+  }
+
+  tests('success') do
+
+    tests('#list_snapshots').formats(@snapshots_format) do
+      pending if Fog.mocking?
+      Fog::Compute[:cloudstack].list_snapshots
+    end
+
+  end
+
+end
\ No newline at end of file
diff --git a/tests/compute/requests/cloudstack/template_tests.rb b/tests/compute/requests/cloudstack/template_tests.rb
new file mode 100644
index 000000000..742e8a95a
--- /dev/null
+++ b/tests/compute/requests/cloudstack/template_tests.rb
@@ -0,0 +1,53 @@
+Shindo.tests('Fog::Compute[:cloudstack] | template requests', ['cloudstack']) do
+
+  @templates_format = {
+    'listtemplatesresponse'  => {
+      'count' => Integer,
+      'template' => [
+        'id' => Integer,
+        'name' => String,
+        'displaytext' => String,
+        'ispublic' => Fog::Boolean,
+        'created' => String,
+        'isready' => Fog::Boolean,
+        'passwordenabled' => Fog::Boolean,
+        'format' => String,
+        'isfeatured' => Fog::Boolean,
+        'crossZones' => Fog::Boolean,
+        'ostypeid' => Integer,
+        'ostypename' => String,
+        'account' => String,
+        'zoneid' => Integer,
+        'zonename' => String,
+        'status' => String,
+        'size' => Integer,
+        'templatetype' => String,
+        'hypervisor' => String,
+        'domain' => String,
+        'domainid' => Integer,
+        'isextractable' => Fog::Boolean,
+        'checksum' => Fog::Nullable::String,
+        'sourcetemplateid' => Fog::Nullable::Integer,
+        'accountid' => Fog::Nullable::Integer,        
+        'bootable' => Fog::Nullable::Boolean,
+        'hostid' => Fog::Nullable::Integer,
+        'hostname' => Fog::Nullable::String,
+        'jobid' => Fog::Nullable::Integer,
+        'jobstatus' => Fog::Nullable::Integer,
+        'removed' => Fog::Nullable::Boolean,
+        'templatetag' => Fog::Nullable::String,
+        'templatetype' => Fog::Nullable::String
+      ]
+    }
+  }
+
+  tests('success') do
+
+    tests('#list_templates').formats(@templates_format) do
+      pending if Fog.mocking?
+      Fog::Compute[:cloudstack].list_templates('templateFilter' => "executable")
+    end
+
+  end
+
+end
\ No newline at end of file
diff --git a/tests/compute/requests/cloudstack/virtual_machine_tests.rb b/tests/compute/requests/cloudstack/virtual_machine_tests.rb
new file mode 100644
index 000000000..521f175ad
--- /dev/null
+++ b/tests/compute/requests/cloudstack/virtual_machine_tests.rb
@@ -0,0 +1,71 @@
+Shindo.tests('Fog::Compute[:cloudstack] | virtual machine requests', ['cloudstack']) do
+
+  @virtual_machines_format = {
+    'listvirtualmachinesresponse'  => {
+      'count' => Integer,
+      'virtualmachine' => [
+        'id' => Integer,
+        'name' => String,
+        'displayname' => String,
+        'account' => String,
+        'domainid' => Integer,
+        'domain' => String,
+        'created' => String,
+        'state' => String,
+        'haenable' => Fog::Boolean,
+        'zoneid' => Integer,
+        'zonename' => String,
+        'hostid' => Integer,
+        'hostname' => Fog::Nullable::String,
+        'templateid' => Integer,
+        'templatename' => String,
+        'templatedisplaytext' => String,
+        'passwordenabled' => Fog::Boolean,
+        'serviceofferingid' => Integer,
+        'serviceofferingname' => String,
+        'cpunumber' => Integer,
+        'cpuspeed' => Integer,
+        'networkkbsread' => Fog::Nullable::Integer,
+        'memory' => Integer,
+        'cpuused' => Fog::Nullable::String,
+        'guestosid' => Integer,
+        'networkkbswrite' => Fog::Nullable::Integer,
+        'rootdeviceid' => Integer,
+        'rootdevicetype' => String,
+        'hypervisor' => String,
+        'group' => Fog::Nullable::String,
+        'groupid' => Fog::Nullable::Integer,
+        'isoname' => Fog::Nullable::String,
+        'isoid' => Fog::Nullable::Integer,
+        'securitygroup' => [
+           'id' => Integer,
+           'name' => Fog::Nullable::String,
+           'description' => Fog::Nullable::String
+        ],
+        'nic' => [
+          'id' => Integer,
+          'networkid' => Integer,
+          'netmask' => String,
+          'gateway' => String,
+          'ipaddress' => String,
+          'traffictype' => String,
+          'type' => String,
+          'isdefault' => Fog::Boolean,
+          'macaddress' => String,
+          'broadcasturi' => Fog::Nullable::String,
+          'isolationuri' => Fog::Nullable::String
+        ]
+      ]
+    }
+  }
+
+  tests('success') do
+
+    tests('#list_virtual_machines').formats(@virtual_machines_format) do
+      pending if Fog.mocking?
+      Fog::Compute[:cloudstack].list_virtual_machines
+    end
+
+  end
+
+end
\ No newline at end of file
diff --git a/tests/compute/requests/cloudstack/volume_tests.rb b/tests/compute/requests/cloudstack/volume_tests.rb
new file mode 100644
index 000000000..793c84b31
--- /dev/null
+++ b/tests/compute/requests/cloudstack/volume_tests.rb
@@ -0,0 +1,48 @@
+Shindo.tests('Fog::Compute[:cloudstack] | volume requests', ['cloudstack']) do
+
+  @volumes_format = {
+    'listvolumesresponse'  => {
+      'count' => Integer,
+      'volume' => [
+        'id' => Integer,
+        'name' => String,
+        'zoneid' => Integer,
+        'zonename' => String,
+        'type' => String,
+        'size' => Integer,
+        'created' => String,
+        'account' => String,
+        'domainid' => Integer,
+        'domain' => String,
+        'state' => String,
+        'storagetype' => String,
+        'hypervisor' => String,
+        'diskofferingid' => Fog::Nullable::Integer,
+        'diskofferingname' => Fog::Nullable::String,
+        'diskofferingdisplaytext' => Fog::Nullable::String,
+        'storage' => String,
+        'destroyed' => Fog::Boolean,
+        'isextractable' => Fog::Boolean,
+        'deviceid' => Fog::Nullable::Integer,
+        'virtualmachineid' => Fog::Nullable::Integer,
+        'vmname' => Fog::Nullable::String,
+        'vmdisplayname' => Fog::Nullable::String,
+        'vmstate' => Fog::Nullable::String,
+        'serviceofferingid' => Fog::Nullable::Integer,
+        'serviceofferingname' => Fog::Nullable::String,
+        'serviceofferingdisplaytext' => Fog::Nullable::String,
+        'attached' => Fog::Nullable::String
+      ]
+    }
+  }
+
+  tests('success') do
+
+    tests('#list_volumes').formats(@volumes_format) do
+      pending if Fog.mocking?
+      Fog::Compute[:cloudstack].list_volumes('zoneid' => 1)
+    end
+
+  end
+
+end
\ No newline at end of file
diff --git a/tests/compute/requests/cloudstack/zone_tests.rb b/tests/compute/requests/cloudstack/zone_tests.rb
new file mode 100644
index 000000000..8cfb82a7e
--- /dev/null
+++ b/tests/compute/requests/cloudstack/zone_tests.rb
@@ -0,0 +1,32 @@
+Shindo.tests('Fog::Compute[:cloudstack] | zone requests', ['cloudstack']) do
+
+  @zones_format = {
+    'listzonesresponse'  => {
+      'count' => Integer,
+      'zone' => [
+        'id' => Integer,
+        'name' => String,
+        'dns1' => String,
+        'dns2' => String,
+        'internaldns1' => String,
+        'internaldns2' => String,
+        'vlan' => String,
+        'guestcidraddress' => String,
+        'networktype' => String,
+        'securitygroupsenabled' => [TrueClass,FalseClass],
+        'allocationstate' => String,
+        'dhcpprovider' => String
+      ]
+    }
+  }
+
+  tests('success') do
+
+    tests('#list_zones').formats(@zones_format) do
+      pending if Fog.mocking?
+      Fog::Compute[:cloudstack].list_zones
+    end
+
+  end
+
+end