Complete create/list/delete vpc actions.
diff --git a/ec2stack/controllers/default.py b/ec2stack/controllers/default.py
index 14503d8..d0b05bd 100644
--- a/ec2stack/controllers/default.py
+++ b/ec2stack/controllers/default.py
@@ -52,6 +52,7 @@
         'DeleteSecurityGroup': security_groups.delete_security_group,
         'DeleteTags': tags.delete_tags,
         'DeleteVolume': volumes.delete_volume,
+        'DeleteVpc': vpcs.delete_vpc,
         'DescribeAvailabilityZones': zones.describe_zones,
         'DescribeImageAttribute': images.describe_image_attribute,
         'DescribeImages': images.describe_images,
@@ -61,6 +62,7 @@
         'DescribeSecurityGroups': security_groups.describe_security_groups,
         'DescribeTags': tags.describe_tags,
         'DescribeVolumes': volumes.describe_volumes,
+        'DescribeVpcs': vpcs.describe_vpcs,
         'DetachVolume': volumes.detach_volume,
         'GetPasswordData': passwords.get_password_data,
         'ImportKeyPair': keypairs.import_keypair,
diff --git a/ec2stack/errors.py b/ec2stack/errors.py
index e7841eb..ba170bf 100644
--- a/ec2stack/errors.py
+++ b/ec2stack/errors.py
@@ -174,6 +174,18 @@
         'The specified CIDR block range is not valid.'
     )
 
+def invalid_vpc_id():
+    """
+    VPC with this ID does not exist.
+
+    @raise Ec2stackError: Defining a bad request and message.
+    """
+    raise Ec2stackError(
+        '400',
+        'InvalidVpcID.NotFound',
+        'The specified VPC does not exist.'
+    )
+
 
 def duplicate_security_group():
     """
diff --git a/ec2stack/providers/cloudstack/vpcs.py b/ec2stack/providers/cloudstack/vpcs.py
index 5f877e2..56b2e40 100644
--- a/ec2stack/providers/cloudstack/vpcs.py
+++ b/ec2stack/providers/cloudstack/vpcs.py
@@ -7,10 +7,12 @@
 
 import uuid
 
+from flask import current_app
+
 from ec2stack import errors
 from ec2stack import helpers
 from ec2stack.providers import cloudstack
-from ec2stack.providers.cloudstack import requester
+from ec2stack.providers.cloudstack import requester, zones
 
 
 @helpers.authentication_required
@@ -35,11 +37,12 @@
     args['name'] = id
     args['id'] = id
     args['displaytext'] = id
+    args['zoneid'] = zones.get_zone(
+        current_app.config['CLOUDSTACK_DEFAULT_ZONE'])['id']
+    args['vpcofferingid'] = current_app.config['VPC_OFFERING_ID']
     args['cidr'] = helpers.get('CidrBlock')
 
-    response = requester.make_request(args)
-
-    response = response['createvpcresponse']
+    response = requester.make_request_async(args)
 
     return response
 
@@ -61,6 +64,7 @@
             'response': response
         }
 
+
 @helpers.authentication_required
 def delete_vpc():
     """
@@ -81,7 +85,7 @@
     """
     args = {'command': 'deleteVPC', 'id': helpers.get('VpcId')}
 
-    response = requester.make_request(args)
+    response = requester.make_request_async(args)
 
     return response
 
@@ -107,7 +111,7 @@
     """
     args = {'command': 'listVPCs'}
     response = cloudstack.describe_item(
-        args, 'vpc', {}, 'vpcId'
+        args, 'vpc', errors.invalid_vpc_id, 'VpcId'
     )
 
     return _describe_vpc_response(
diff --git a/ec2stack/templates/create_vpc.xml b/ec2stack/templates/create_vpc.xml
index a708e72..5c7c804 100644
--- a/ec2stack/templates/create_vpc.xml
+++ b/ec2stack/templates/create_vpc.xml
@@ -1,9 +1,9 @@
 {% extends "response.xml" %}
 {% block response_content %}
    <vpc>
-      <vpcId>{{ vpc.id }}</vpcId>
-      <state>{{ vpc.state }}</state>
-      <cidrBlock>{{ vpc.cidr }}</cidrBlock>
+      <vpcId>{{ response.id }}</vpcId>
+      <state>{{ response.state }}</state>
+      <cidrBlock>{{ response.cidr }}</cidrBlock>
       <tagSet/>
    </vpc>
 {% endblock %}
\ No newline at end of file