diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Response.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Response.java
index d3cea10..fe1d541 100644
--- a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Response.java
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Response.java
@@ -39,16 +39,16 @@
    public abstract List<Property> info();
 
    @Nullable
-   public abstract List<String> warning();
+   public abstract List<Property> warning();
 
    @Nullable
-   public abstract List<String> error();
+   public abstract List<Property> error();
 
    public abstract String requestId();
 
    @SerializedNames({ "operation", "responseCode", "message", "info", "warning", "error", "requestId" })
    public static Response create(String operation, String responseCode, String message, List<Property> info,
-         List<String> warning, List<String> error, String requestId) {
+         List<Property> warning, List<Property> error, String requestId) {
       return builder().operation(operation).responseCode(responseCode).message(message).info(info).warning(warning)
             .error(error).requestId(requestId).build();
    }
@@ -66,17 +66,17 @@
 
       public abstract Builder info(List<Property> info);
 
-      public abstract Builder warning(List<String> warning);
+      public abstract Builder warning(List<Property> warning);
 
-      public abstract Builder error(List<String> error);
+      public abstract Builder error(List<Property> error);
 
       public abstract Builder requestId(String requestId);
 
       abstract Response autoBuild();
 
-      abstract List<String> warning();
+      abstract List<Property> warning();
 
-      abstract List<String> error();
+      abstract List<Property> error();
 
       abstract List<Property> info();
 
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/utils/ParseResponse.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/utils/ParseResponse.java
index 6f8b5de..809d934 100644
--- a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/utils/ParseResponse.java
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/utils/ParseResponse.java
@@ -46,17 +46,19 @@
    }
 
    public String apply(HttpResponse from) {
-      try {
-         InputStream gson = from.getPayload().openStream();
-
-         final Response response = json.fromJson(gson, TypeLiteral.get(Response.class).getType());
+      Response response = null;
+      try (InputStream gson = from.getPayload().openStream()) {
+         response = json.fromJson(gson, TypeLiteral.get(Response.class).getType());
          return tryFindInfoPropertyValue(response);
       } catch (Exception e) {
          StringBuilder message = new StringBuilder();
-         message.append("Error parsing input: ");
-         message.append(e.getMessage());
+         message.append("Error parsing input: ").append(e.getMessage());
+         if (response != null) {
+            message.append(" ").append("Response Message: ").append(response.message());
+            message.append(" ").append(checkForErrorElements(response));
+         }
          logger.error(e, message.toString());
-         throw new HttpResponseException(message.toString() + "\n" + from, null, from, e);
+         throw new HttpResponseException(message.toString() + ".\n" + from, null, from, e);
       } finally {
          releasePayload(from);
       }
@@ -83,4 +85,15 @@
       }
       return "";
    }
+
+   final String checkForErrorElements(final Response response) {
+      if (response.error() != null && !response.error().isEmpty()) {
+         StringBuilder message = new StringBuilder("Error Elements: ");
+         for (Property e : response.error()) {
+            message.append(e.name()).append(":").append(e.value()).append(", ");
+         }
+         return message.subSequence(0, message.length() - 2).toString() + ".";
+      }
+      return null;
+   }
 }
diff --git a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/FirewallRuleParseTest.java b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/FirewallRuleParseTest.java
new file mode 100644
index 0000000..82150e2
--- /dev/null
+++ b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/FirewallRuleParseTest.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.dimensiondata.cloudcontrol.parse;
+
+import org.jclouds.dimensiondata.cloudcontrol.domain.FirewallRule;
+import org.jclouds.dimensiondata.cloudcontrol.domain.FirewallRuleTarget;
+import org.jclouds.dimensiondata.cloudcontrol.domain.IpRange;
+import org.jclouds.dimensiondata.cloudcontrol.domain.State;
+import org.jclouds.dimensiondata.cloudcontrol.internal.BaseDimensionDataCloudControlParseTest;
+import org.testng.annotations.Test;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.core.MediaType;
+
+@Test(groups = "unit")
+public class FirewallRuleParseTest extends BaseDimensionDataCloudControlParseTest<FirewallRule> {
+
+   @Override
+   public String resource() {
+      return "/firewallRule.json";
+   }
+
+   @Override
+   @Consumes(MediaType.APPLICATION_JSON)
+   public FirewallRule expected() {
+      return FirewallRule.builder().networkDomainId("484174a2-ae74-4658-9e56-50fc90e086cf")
+            .name("CCDEFAULT.BlockOutboundMailIPv6Secure").action("DROP").ipVersion("IPV6").protocol("TCP")
+            .source(FirewallRuleTarget.builder().ip(IpRange.create("ANY", null)).build()).destination(
+                  FirewallRuleTarget.builder().ip(IpRange.create("ANY", null))
+                        .port(FirewallRuleTarget.Port.create(587, null)).build()).ruleType("DEFAULT_RULE").enabled(true)
+            .id("1aa3d0ce-d95d-4296-8338-9717e0d37ff9").datacenterId("NA9").state(State.NORMAL).build();
+   }
+}
diff --git a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/NatRuleParseTest.java b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/NatRuleParseTest.java
new file mode 100644
index 0000000..ee3cad6
--- /dev/null
+++ b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/NatRuleParseTest.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.dimensiondata.cloudcontrol.parse;
+
+import org.jclouds.dimensiondata.cloudcontrol.domain.NatRule;
+import org.jclouds.dimensiondata.cloudcontrol.domain.State;
+import org.jclouds.dimensiondata.cloudcontrol.internal.BaseDimensionDataCloudControlParseTest;
+import org.testng.annotations.Test;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.core.MediaType;
+
+@Test(groups = "unit")
+public class NatRuleParseTest extends BaseDimensionDataCloudControlParseTest<NatRule> {
+
+   @Override
+   public String resource() {
+      return "/natRule.json";
+   }
+
+   @Override
+   @Consumes(MediaType.APPLICATION_JSON)
+   public NatRule expected() {
+      return NatRule.builder().networkDomainId("484174a2-ae74-4658-9e56-50fc90e086cf")
+            .createTime(parseDate("2015-03-06T13:45:10.000Z")).internalIp("10.0.0.16").externalIp("165.180.12.19")
+            .state(State.NORMAL).id("2169a38e-5692-497e-a22a-701a838a6539").datacenterId("NA9").build();
+   }
+}
diff --git a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/NetworkDomainParseTest.java b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/NetworkDomainParseTest.java
new file mode 100644
index 0000000..5292b35
--- /dev/null
+++ b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/NetworkDomainParseTest.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.dimensiondata.cloudcontrol.parse;
+
+import org.jclouds.dimensiondata.cloudcontrol.domain.NetworkDomain;
+import org.jclouds.dimensiondata.cloudcontrol.domain.State;
+import org.jclouds.dimensiondata.cloudcontrol.internal.BaseDimensionDataCloudControlParseTest;
+import org.testng.annotations.Test;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.core.MediaType;
+
+@Test(groups = "unit")
+public class NetworkDomainParseTest extends BaseDimensionDataCloudControlParseTest<NetworkDomain> {
+
+   @Override
+   public String resource() {
+      return "/networkDomain.json";
+   }
+
+   @Override
+   @Consumes(MediaType.APPLICATION_JSON)
+   public NetworkDomain expected() {
+      return NetworkDomain.builder().name("test").description("").type(NetworkDomain.Type.ESSENTIALS)
+            .snatIpv4Address("168.128.3.44").createTime(parseDate("2016-03-08T14:39:47.000Z")).state(State.NORMAL)
+            .id("8e082ed6-c198-4eff-97cb-aeac6f9685d8").datacenterId("NA9").build();
+   }
+}
diff --git a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/PublicIpBlockParseTest.java b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/PublicIpBlockParseTest.java
new file mode 100644
index 0000000..f3e3aad
--- /dev/null
+++ b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/PublicIpBlockParseTest.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.dimensiondata.cloudcontrol.parse;
+
+import org.jclouds.dimensiondata.cloudcontrol.domain.PublicIpBlock;
+import org.jclouds.dimensiondata.cloudcontrol.domain.State;
+import org.jclouds.dimensiondata.cloudcontrol.internal.BaseDimensionDataCloudControlParseTest;
+import org.testng.annotations.Test;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.core.MediaType;
+
+@Test(groups = "unit")
+public class PublicIpBlockParseTest extends BaseDimensionDataCloudControlParseTest<PublicIpBlock> {
+
+   @Override
+   public String resource() {
+      return "/publicIpBlock.json";
+   }
+
+   @Override
+   @Consumes(MediaType.APPLICATION_JSON)
+   public PublicIpBlock expected() {
+      return PublicIpBlock.builder().networkDomainId("690de302-bb80-49c6-b401-8c02bbefb945").baseIp("168.128.6.216")
+            .size(2).createTime(parseDate("2016-03-14T11:49:33.000Z")).state(State.NORMAL)
+            .id("9993e5fc-bdce-11e4-8c14-b8ca3a5d9ef8").datacenterId("NA9").build();
+   }
+}
diff --git a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/ServerParseTest.java b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/ServerParseTest.java
new file mode 100644
index 0000000..5d44d5e
--- /dev/null
+++ b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/ServerParseTest.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.dimensiondata.cloudcontrol.parse;
+
+import org.jclouds.dimensiondata.cloudcontrol.domain.CPU;
+import org.jclouds.dimensiondata.cloudcontrol.domain.Disk;
+import org.jclouds.dimensiondata.cloudcontrol.domain.Guest;
+import org.jclouds.dimensiondata.cloudcontrol.domain.NIC;
+import org.jclouds.dimensiondata.cloudcontrol.domain.NetworkInfo;
+import org.jclouds.dimensiondata.cloudcontrol.domain.OperatingSystem;
+import org.jclouds.dimensiondata.cloudcontrol.domain.Server;
+import org.jclouds.dimensiondata.cloudcontrol.domain.State;
+import org.jclouds.dimensiondata.cloudcontrol.domain.VirtualHardware;
+import org.jclouds.dimensiondata.cloudcontrol.domain.VmTools;
+import org.jclouds.dimensiondata.cloudcontrol.internal.BaseDimensionDataCloudControlParseTest;
+import org.testng.annotations.Test;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.core.MediaType;
+import java.util.Collections;
+
+@Test(groups = "unit")
+public class ServerParseTest extends BaseDimensionDataCloudControlParseTest<Server> {
+
+   @Override
+   public String resource() {
+      return "/server.json";
+   }
+
+   @Override
+   @Consumes(MediaType.APPLICATION_JSON)
+   public Server expected() {
+
+      return Server.builder().id("cb08c7ba-7a51-4e32-8d39-05d2270f8f8b").name("ServerApiLiveTest").datacenterId("EU6")
+            .state(State.NORMAL).sourceImageId("56eb0b7c-15a7-4b63-b373-05b962e37554")
+            .createTime(parseDate("2017-07-03T16:29:33.000Z")).started(true).deployed(true).guest(Guest.builder()
+                  .operatingSystem(
+                        OperatingSystem.builder().id("REDHAT764").displayName("REDHAT7/64").family("UNIX").build())
+                  .vmTools(VmTools.builder().apiVersion(9356).type(VmTools.Type.VMWARE_TOOLS)
+                        .versionStatus(VmTools.VersionStatus.CURRENT).runningStatus(VmTools.RunningStatus.NOT_RUNNING)
+                        .build()).osCustomization(true).build())
+            .cpu(CPU.builder().count(2).speed("STANDARD").coresPerSocket(1).build()).memoryGb(4).disks(Collections
+                  .singletonList(
+                        Disk.builder().id("918f12ba-5e5e-4cd6-87bd-60c18293c24d").scsiId(0).sizeGb(20).speed("STANDARD")
+                              .state("NORMAL").build())).networkInfo(NetworkInfo.builder().primaryNic(
+                  NIC.builder().id("f0c00cab-bfa3-4c51-8c0a-c52fdac1ae4b").privateIpv4("10.0.0.7")
+                        .ipv6("2a00:47c0:111:1131:5851:1950:411c:3dd8").vlanId("7bd12a4d-4e83-4254-a266-174aa5f55187")
+                        .vlanName("jclouds vlan").state("NORMAL").build()).additionalNic(Collections.<NIC>emptyList())
+                  .networkDomainId("d122949b-8990-46d6-98f0-91c8676fc720").build())
+            .virtualHardware(VirtualHardware.builder().upToDate(true).version("vmx-10").build())
+            .softwareLabels(Collections.emptyList()).build();
+   }
+}
diff --git a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/ServersParseTest.java b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/ServersParseTest.java
new file mode 100644
index 0000000..eb97dae
--- /dev/null
+++ b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/ServersParseTest.java
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.dimensiondata.cloudcontrol.parse;
+
+import com.google.common.collect.ImmutableList;
+import org.jclouds.dimensiondata.cloudcontrol.domain.CPU;
+import org.jclouds.dimensiondata.cloudcontrol.domain.Disk;
+import org.jclouds.dimensiondata.cloudcontrol.domain.Guest;
+import org.jclouds.dimensiondata.cloudcontrol.domain.NIC;
+import org.jclouds.dimensiondata.cloudcontrol.domain.NetworkInfo;
+import org.jclouds.dimensiondata.cloudcontrol.domain.OperatingSystem;
+import org.jclouds.dimensiondata.cloudcontrol.domain.Server;
+import org.jclouds.dimensiondata.cloudcontrol.domain.Servers;
+import org.jclouds.dimensiondata.cloudcontrol.domain.State;
+import org.jclouds.dimensiondata.cloudcontrol.domain.VirtualHardware;
+import org.jclouds.dimensiondata.cloudcontrol.domain.VmTools;
+import org.jclouds.dimensiondata.cloudcontrol.internal.BaseDimensionDataCloudControlParseTest;
+import org.testng.annotations.Test;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.core.MediaType;
+import java.util.Collections;
+import java.util.List;
+
+@Test(groups = "unit")
+public class ServersParseTest extends BaseDimensionDataCloudControlParseTest<Servers> {
+
+   @Override
+   public String resource() {
+      return "/servers.json";
+   }
+
+   @Override
+   @Consumes(MediaType.APPLICATION_JSON)
+   public Servers expected() {
+      List<Server> servers = ImmutableList
+            .of(Server.builder().id("b8246ba4-847d-475b-b296-f76787a69ca8").name("parser-test-server-name")
+                  .description("parser-test-server-description").datacenterId("NA9").state(State.NORMAL)
+                  .sourceImageId("1e44ab3f-2426-45ec-a1b5-827b2ce58836")
+                  .createTime(parseDate("2016-03-10T13:05:21.000Z")).started(true).deployed(true).guest(Guest.builder()
+                        .operatingSystem(
+                              OperatingSystem.builder().id("CENTOS564").displayName("CENTOS5/64").family("UNIX")
+                                    .build()).vmTools(VmTools.builder().apiVersion(9354).type(VmTools.Type.VMWARE_TOOLS)
+                              .versionStatus(VmTools.VersionStatus.NEED_UPGRADE)
+                              .runningStatus(VmTools.RunningStatus.RUNNING).build()).osCustomization(true).build())
+                  .cpu(CPU.builder().count(2).speed("STANDARD").coresPerSocket(1).build()).memoryGb(4).disks(Collections
+                        .singletonList(Disk.builder().id("0ba67812-d7b7-4c3f-b114-870fbea24d42").scsiId(0).sizeGb(10)
+                              .speed("STANDARD").state("NORMAL").build())).networkInfo(NetworkInfo.builder().primaryNic(
+                        NIC.builder().id("980a9fdd-4ea2-478b-85b4-f016349f1738").privateIpv4("10.0.0.8")
+                              .ipv6("2607:f480:111:1575:c47:7479:2af8:3f1a")
+                              .vlanId("6b25b02e-d3a2-4e69-8ca7-9bab605deebd")
+                              .vlanId("6b25b02e-d3a2-4e69-8ca7-9bab605deebd").vlanName("vlan1").state("NORMAL").build())
+                        .additionalNic(null).networkDomainId("690de302-bb80-49c6-b401-8c02bbefb945").build())
+                  .virtualHardware(VirtualHardware.builder().upToDate(false).version("vmx-08").build())
+                  .softwareLabels(Collections.emptyList()).build());
+      return new Servers(servers, 1, 5, 5, 250);
+   }
+}
diff --git a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/VlanParseTest.java b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/VlanParseTest.java
new file mode 100644
index 0000000..804e491
--- /dev/null
+++ b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/parse/VlanParseTest.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.dimensiondata.cloudcontrol.parse;
+
+import org.jclouds.dimensiondata.cloudcontrol.domain.IpRange;
+import org.jclouds.dimensiondata.cloudcontrol.domain.NetworkDomain;
+import org.jclouds.dimensiondata.cloudcontrol.domain.State;
+import org.jclouds.dimensiondata.cloudcontrol.domain.Vlan;
+import org.jclouds.dimensiondata.cloudcontrol.internal.BaseDimensionDataCloudControlParseTest;
+import org.testng.annotations.Test;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.core.MediaType;
+
+@Test(groups = "unit")
+public class VlanParseTest extends BaseDimensionDataCloudControlParseTest<Vlan> {
+
+   @Override
+   public String resource() {
+      return "/vlan.json";
+   }
+
+   @Override
+   @Consumes(MediaType.APPLICATION_JSON)
+   public Vlan expected() {
+      return Vlan.builder()
+            .networkDomain(NetworkDomain.builder().id("690de302-bb80-49c6-b401-8c02bbefb945").name("test").build())
+            .name("vlan1").description("").privateIpv4Range(IpRange.create("10.0.0.0", 24))
+            .ipv4GatewayAddress("10.0.0.1").ipv6Range(IpRange.create("2607:f480:111:1575:0:0:0:0", 64))
+            .ipv6GatewayAddress("2607:f480:111:1575:0:0:0:1").createTime(parseDate("2016-03-11T10:41:19.000Z"))
+            .state(State.NORMAL).datacenterId("NA9").id("6b25b02e-d3a2-4e69-8ca7-9bab605deebd").build();
+   }
+}
diff --git a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/utils/ResponseParseTest.java b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/utils/ParseResponseTest.java
similarity index 75%
rename from dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/utils/ResponseParseTest.java
rename to dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/utils/ParseResponseTest.java
index 5c4ea1d..995e318 100644
--- a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/utils/ResponseParseTest.java
+++ b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/utils/ParseResponseTest.java
@@ -24,8 +24,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
-@Test(groups = "unit", testName = "ResponseParseTest", singleThreaded = true)
-public class ResponseParseTest {
+@Test(groups = "unit", testName = "ParseResponseTest", singleThreaded = true)
+public class ParseResponseTest {
 
    public void testTryFindPropertyValue() {
 
@@ -53,4 +53,18 @@
 
       new ParseResponse(null, "noProperty").tryFindInfoPropertyValue(response);
    }
+
+   public void testTryFindPropertyValue_ErrorReturned() {
+
+      List<Property> errorProperties = new ArrayList<Property>();
+      errorProperties.add(Property.create("propertyName1", "propertyValue1"));
+      errorProperties.add(Property.create("propertyName2", "propertyValue2"));
+
+      Response response = Response.builder().responseCode("responseCode").error(errorProperties).message("message")
+            .operation("operation").requestId("requestId").info(null).build();
+
+      Assert.assertEquals(new ParseResponse(null, "noProperty").checkForErrorElements(response),
+            "Error Elements: propertyName1:propertyValue1, propertyName2:propertyValue2.");
+   }
+
 }
diff --git a/dimensiondata/src/test/resources/firewallRule.json b/dimensiondata/src/test/resources/firewallRule.json
new file mode 100644
index 0000000..e85b5d8
--- /dev/null
+++ b/dimensiondata/src/test/resources/firewallRule.json
@@ -0,0 +1,25 @@
+{
+  "networkDomainId": "484174a2-ae74-4658-9e56-50fc90e086cf",
+  "name": "CCDEFAULT.BlockOutboundMailIPv6Secure",
+  "action": "DROP",
+  "ipVersion": "IPV6",
+  "protocol": "TCP",
+  "source": {
+    "ip": {
+      "address": "ANY"
+    }
+  },
+  "destination": {
+    "ip": {
+      "address": "ANY"
+    },
+    "port": {
+      "begin": 587
+    }
+  },
+  "enabled": true,
+  "state": "NORMAL",
+  "id": "1aa3d0ce-d95d-4296-8338-9717e0d37ff9",
+  "datacenterId": "NA9",
+  "ruleType": "DEFAULT_RULE"
+}
\ No newline at end of file
diff --git a/dimensiondata/src/test/resources/server.json b/dimensiondata/src/test/resources/server.json
index 9ece773..f0804e0 100644
--- a/dimensiondata/src/test/resources/server.json
+++ b/dimensiondata/src/test/resources/server.json
@@ -19,7 +19,7 @@
     "primaryNic": {
       "id": "f0c00cab-bfa3-4c51-8c0a-c52fdac1ae4b",
       "privateIpv4": "10.0.0.7",
-      "ipv6": "2a00:47c0: 111: 1131: 5851: 1950:411c: 3dd8",
+      "ipv6": "2a00:47c0:111:1131:5851:1950:411c:3dd8",
       "vlanId": "7bd12a4d-4e83-4254-a266-174aa5f55187",
       "vlanName": "jclouds vlan",
       "networkAdapter": "E1000",
@@ -32,7 +32,7 @@
   },
   "softwareLabel": [],
   "sourceImageId": "56eb0b7c-15a7-4b63-b373-05b962e37554",
-  "createTime": "2017-07-03T16: 29: 33.000Z",
+  "createTime": "2017-07-03T16:29:33.000Z",
   "deployed": true,
   "started": true,
   "state": "NORMAL",
