diff --git a/ec2stack/configure.py b/ec2stack/configure.py
index 5c4ffee..cc2e6f6 100644
--- a/ec2stack/configure.py
+++ b/ec2stack/configure.py
@@ -168,16 +168,6 @@
     @param profile: the profile to set the attribute in.
     @return: configparser configuration.
     """
-
-    configure_instance_disk = raw_input(
-        'Do you wish to input a second custom storage disk for instances? (Yes/No): '
-    )
-
-    if configure_instance_disk.lower() in ['yes', 'y']:
-        config = _set_attribute_of_profile(
-            config, profile, 'cloudstack_instance_custom_disk_offering', 'Cloudstack custom instance disk offering name', 'CustomInstance'
-        )
-
     configure_instance_type_mapings = raw_input(
         'Do you wish to input instance type mappings? (Yes/No): '
     )
diff --git a/ec2stack/providers/cloudstack/instances.py b/ec2stack/providers/cloudstack/instances.py
index 3e8115b..01d2127 100644
--- a/ec2stack/providers/cloudstack/instances.py
+++ b/ec2stack/providers/cloudstack/instances.py
@@ -178,14 +178,9 @@
     if helpers.get('BlockDeviceMapping.1.Ebs.VolumeType') is not None:
         disk_type = helpers.get('BlockDeviceMapping.1.Ebs.VolumeType')
         if disk_type == 'gp2':
-             if 'CLOUDSTACK_INSTANCE_CUSTOM_DISK_OFFERING' in current_app.config:
-                args['diskofferingid'] = disk_offerings.get_disk_offering(
-                    current_app.config['CLOUDSTACK_INSTANCE_CUSTOM_DISK_OFFERING']
-                )['id']
-             else:
-                errors.invalid_request(
-                    "Unable to configure secondary disk, please run ec2stack-configure and choose to "
-                    "configure an instance disk")
+            args['diskofferingid'] = disk_offerings.get_disk_offering(
+                current_app.config['CLOUDSTACK_CUSTOM_DISK_OFFERING']
+            )['id']
 
         if helpers.get('BlockDeviceMapping.1.Ebs.VolumeSize') is None:
             errors.invalid_request("VolumeSize not found in BlockDeviceMapping")
diff --git a/pylint.rc b/pylint.rc
index c45bc02..1819a65 100644
--- a/pylint.rc
+++ b/pylint.rc
@@ -236,7 +236,7 @@
 max-returns=6
 
 # Maximum number of branch for function / method body
-max-branchs=12
+max-branches=16
 
 # Maximum number of statements in function / method body
 max-statements=50
diff --git a/tests/instances_tests.py b/tests/instances_tests.py
index f1986c2..a53fa0b 100644
--- a/tests/instances_tests.py
+++ b/tests/instances_tests.py
@@ -315,6 +315,118 @@
         self.assert_ok(response)
         assert 'RunInstancesResponse' in response.data
 
+    def test_run_instance_gp2(self):
+        data = self.get_example_data()
+        data['Action'] = 'RunInstances'
+        data['ImageId'] = 'a32d70ee-95e4-11e3-b2e4-d19c9d3e5e1d'
+        data['MinCount'] = '0'
+        data['MaxCount'] = '0'
+        data['SecurityGroupId.1'] = 'example-security-group-id'
+        data['SecurityGroup.1'] = 'example-security-group-name'
+        data['KeyName'] = 'example-ssh-key-name'
+        data['UserData'] = 'example-user-data'
+        data['BlockDeviceMapping.1.Ebs.VolumeType'] = 'gp2'
+        data['BlockDeviceMapping.1.Ebs.VolumeSize'] = '20'
+        data['Signature'] = generate_signature(data, 'POST', 'localhost', '/')
+
+        get = mock.Mock()
+        get.return_value.text = read_file(
+            'tests/data/valid_run_instance.json'
+        )
+        get.return_value.status_code = 200
+
+        get_disk_offering = mock.Mock()
+        get_disk_offering.return_value = json.loads(read_file(
+            'tests/data/disk_offering_search.json'
+        ))
+
+        get_service_offering = mock.Mock()
+        get_service_offering.return_value = json.loads(read_file(
+            'tests/data/service_offering_search.json'
+        ))
+
+        get_zone = mock.Mock()
+        get_zone.return_value = json.loads(read_file(
+            'tests/data/zones_search.json'
+        ))
+
+        with mock.patch('requests.get', get):
+            with mock.patch(
+                    'ec2stack.providers.cloudstack.disk_offerings.get_disk_offering',
+                    get_disk_offering
+            ):
+                with mock.patch(
+                        'ec2stack.providers.cloudstack.service_offerings.get_service_offering',
+                        get_service_offering
+                ):
+                    with mock.patch(
+                            'ec2stack.providers.cloudstack.zones.get_zone',
+                            get_zone
+                    ):
+                        response = self.post(
+                            '/',
+                            data=data
+                        )
+
+        self.assert_ok(response)
+        assert 'RunInstancesResponse' in response.data
+
+    def test_run_instance_gp2_no_volume_size(self):
+        data = self.get_example_data()
+        data['Action'] = 'RunInstances'
+        data['ImageId'] = 'a32d70ee-95e4-11e3-b2e4-d19c9d3e5e1d'
+        data['MinCount'] = '0'
+        data['MaxCount'] = '0'
+        data['SecurityGroupId.1'] = 'example-security-group-id'
+        data['SecurityGroup.1'] = 'example-security-group-name'
+        data['KeyName'] = 'example-ssh-key-name'
+        data['UserData'] = 'example-user-data'
+        data['BlockDeviceMapping.1.Ebs.VolumeType'] = 'gp2'
+        data['Signature'] = generate_signature(data, 'POST', 'localhost', '/')
+
+        get = mock.Mock()
+        get.return_value.text = read_file(
+            'tests/data/valid_run_instance.json'
+        )
+        get.return_value.status_code = 200
+
+        get_disk_offering = mock.Mock()
+        get_disk_offering.return_value = json.loads(read_file(
+            'tests/data/disk_offering_search.json'
+        ))
+
+        get_service_offering = mock.Mock()
+        get_service_offering.return_value = json.loads(read_file(
+            'tests/data/service_offering_search.json'
+        ))
+
+        get_zone = mock.Mock()
+        get_zone.return_value = json.loads(read_file(
+            'tests/data/zones_search.json'
+        ))
+
+        with mock.patch('requests.get', get):
+            with mock.patch(
+                    'ec2stack.providers.cloudstack.disk_offerings.get_disk_offering',
+                    get_disk_offering
+            ):
+                with mock.patch(
+                        'ec2stack.providers.cloudstack.service_offerings.get_service_offering',
+                        get_service_offering
+                ):
+                    with mock.patch(
+                            'ec2stack.providers.cloudstack.zones.get_zone',
+                            get_zone
+                    ):
+                        response = self.post(
+                            '/',
+                            data=data
+                        )
+
+        self.assert_bad_request(response)
+        assert 'VolumeSize not found in BlockDeviceMapping' in response.data
+
+
     def test_run_instance_with_zone_and_type_(self):
         data = self.get_example_data()
         data['Action'] = 'RunInstances'
