Remove deprecated neutron code
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/NeutronApi.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/NeutronApi.java
deleted file mode 100644
index d39bc3c..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/NeutronApi.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0;
-
-import java.io.Closeable;
-import java.util.Set;
-
-import org.jclouds.location.Region;
-import org.jclouds.location.Zone;
-import org.jclouds.location.functions.RegionToEndpoint;
-import org.jclouds.location.functions.ZoneToEndpoint;
-import org.jclouds.openstack.neutron.v2_0.extensions.RouterApi;
-import org.jclouds.openstack.neutron.v2_0.features.NetworkApi;
-import org.jclouds.openstack.neutron.v2_0.features.PortApi;
-import org.jclouds.openstack.neutron.v2_0.features.SubnetApi;
-import org.jclouds.openstack.v2_0.features.ExtensionApi;
-import org.jclouds.rest.annotations.Delegate;
-import org.jclouds.rest.annotations.EndpointParam;
-
-import com.google.common.base.Optional;
-import com.google.inject.Provides;
-
-/**
- * Provides access to the OpenStack Networking (Neutron) v2 API.
- * <p/>
- *
- * @deprecated Please use {@link org.jclouds.openstack.neutron.v2.NeutronApi} instead. To be removed in jclouds 2.0.
- */
-@Deprecated
-public interface NeutronApi extends Closeable {
-
-   /**
-    * @return the Region codes configured
-    */
-   @Provides
-   @Region
-   Set<String> getConfiguredRegions();
-
-   /**
-    * Provides access to Extension features.
-    */
-   @Delegate
-   ExtensionApi getExtensionApi(@EndpointParam(parser = RegionToEndpoint.class) String region);
-
-   /**
-    * Provides access to Network features.
-    */
-   @Delegate
-   NetworkApi getNetworkApi(@EndpointParam(parser = RegionToEndpoint.class) String region);
-
-   /**
-    * Provides access to Subnet features.
-    */
-   @Delegate
-   SubnetApi getSubnetApi(@EndpointParam(parser = RegionToEndpoint.class) String region);
-
-   /**
-    * Provides access to Port features.
-    */
-   @Delegate
-   PortApi getPortApi(@EndpointParam(parser = RegionToEndpoint.class) String region);
-
-   /**
-    * Provides access to Router features.
-    */
-   @Delegate
-   Optional<? extends RouterApi> getRouterApi(@EndpointParam(parser = RegionToEndpoint.class) String region);
-
-   /**
-    * @return the Zone codes configured
-    * @deprecated Please use {@link #getConfiguredRegions()} instead. To be removed in jclouds 2.0.
-    */
-   @Deprecated
-   @Provides
-   @Zone
-   Set<String> getConfiguredZones();
-
-   /**
-    * Provides access to Extension features.
-    * @deprecated Please use {@link #getExtensionApi(String)} instead. To be removed in jclouds 2.0.
-    */
-   @Deprecated
-   @Delegate
-   ExtensionApi getExtensionApiForZone(
-           @EndpointParam(parser = ZoneToEndpoint.class) String zone);
-
-   /**
-    * Provides access to Network features.
-    * @deprecated Please use {@link #getNetworkApi(String)} instead. To be removed in jclouds 2.0.
-    */
-   @Deprecated
-   @Delegate
-   NetworkApi getNetworkApiForZone(@EndpointParam(parser = ZoneToEndpoint.class) String zone);
-
-   /**
-    * Provides access to Subnet features.
-    * @deprecated Please use {@link #getSubnetApi(String)} instead. To be removed in jclouds 2.0.
-    */
-   @Deprecated
-   @Delegate
-   SubnetApi getSubnetApiForZone(@EndpointParam(parser = ZoneToEndpoint.class) String zone);
-
-   /**
-    * Provides access to Port features.
-    * @deprecated Please use {@link #getPortApi(String)} instead. To be removed in jclouds 2.0.
-    */
-   @Deprecated
-   @Delegate
-   PortApi getPortApiForZone(@EndpointParam(parser = ZoneToEndpoint.class) String zone);
-
-   /**
-    * Provides access to Router features.
-    * @deprecated Please use {@link #getRouterApi(String)} instead. To be removed in jclouds 2.0.
-    */
-   @Deprecated
-   @Delegate
-   Optional<? extends RouterApi> getRouterExtensionForZone(@EndpointParam(parser = ZoneToEndpoint.class) String zone);
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/NeutronApiMetadata.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/NeutronApiMetadata.java
deleted file mode 100644
index f333647..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/NeutronApiMetadata.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0;
-
-import static org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties.CREDENTIAL_TYPE;
-import static org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties.SERVICE_TYPE;
-
-import java.net.URI;
-import java.util.Properties;
-
-import org.jclouds.apis.ApiMetadata;
-import org.jclouds.openstack.keystone.v2_0.config.AuthenticationApiModule;
-import org.jclouds.openstack.keystone.v2_0.config.CredentialTypes;
-import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule;
-import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule.ZoneModule;
-import org.jclouds.openstack.neutron.v2_0.config.NeutronHttpApiModule;
-import org.jclouds.openstack.v2_0.ServiceType;
-import org.jclouds.rest.internal.BaseHttpApiMetadata;
-
-import com.google.auto.service.AutoService;
-import com.google.common.collect.ImmutableSet;
-import com.google.inject.Module;
-
-/**
- * Implementation of {@link org.jclouds.apis.ApiMetadata} for Neutron 2.0 API
- * @deprecated To be removed in jclouds 2.0.
- */
-@Deprecated
-@AutoService(ApiMetadata.class)
-public class NeutronApiMetadata extends BaseHttpApiMetadata<NeutronApi> {
-
-   @Override
-   public Builder toBuilder() {
-      return new Builder().fromApiMetadata(this);
-   }
-
-   public NeutronApiMetadata() {
-      this(new Builder());
-   }
-
-   protected NeutronApiMetadata(Builder builder) {
-      super(builder);
-   }
-
-   public static Properties defaultProperties() {
-      Properties properties = BaseHttpApiMetadata.defaultProperties();
-      properties.setProperty(CREDENTIAL_TYPE, CredentialTypes.PASSWORD_CREDENTIALS);
-      properties.setProperty(SERVICE_TYPE, ServiceType.NETWORK);
-      return properties;
-   }
-
-   public static class Builder extends BaseHttpApiMetadata.Builder<NeutronApi, Builder> {
-
-      protected Builder() {
-         super(NeutronApi.class);
-         id("openstack-neutron-legacy")
-            .name("OpenStack Neutron API")
-            .identityName("${tenantName}:${userName} or ${userName}, if your keystone supports a default tenant")
-            .credentialName("${password}")
-            .endpointName("KeyStone base url ending in /v2.0/")
-            .documentation(URI.create("http://docs.openstack.org/api/openstack-network/2.0/content/"))
-            .version("2.0")
-            .defaultEndpoint("http://localhost:5000/v2.0/")
-            .defaultProperties(NeutronApiMetadata.defaultProperties())
-            .defaultModules(ImmutableSet.<Class<? extends Module>>builder()
-               .add(AuthenticationApiModule.class)
-               .add(KeystoneAuthenticationModule.class)
-               .add(ZoneModule.class)
-               .add(NeutronHttpApiModule.class).build());
-      }
-
-      @Override
-      public NeutronApiMetadata build() {
-         return new NeutronApiMetadata(this);
-      }
-
-      @Override
-      public Builder fromApiMetadata(ApiMetadata in) {
-         super.fromApiMetadata(in);
-         return this;
-      }
-
-      @Override
-      protected Builder self() {
-         return this;
-      }
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/config/NeutronHttpApiModule.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/config/NeutronHttpApiModule.java
deleted file mode 100644
index b46262e..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/config/NeutronHttpApiModule.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.config;
-
-import static org.jclouds.openstack.keystone.v2_0.config.KeystoneHttpApiModule.aliasBinder;
-
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-
-import javax.inject.Provider;
-import javax.inject.Singleton;
-
-import org.jclouds.http.HttpErrorHandler;
-import org.jclouds.http.annotation.ClientError;
-import org.jclouds.http.annotation.Redirection;
-import org.jclouds.http.annotation.ServerError;
-import org.jclouds.json.config.GsonModule.DateAdapter;
-import org.jclouds.json.config.GsonModule.Iso8601DateAdapter;
-import org.jclouds.openstack.neutron.v2_0.NeutronApi;
-import org.jclouds.openstack.neutron.v2_0.handlers.NeutronErrorHandler;
-import org.jclouds.openstack.v2_0.domain.Extension;
-import org.jclouds.openstack.v2_0.functions.PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensionsSet;
-import org.jclouds.rest.ConfiguresHttpApi;
-import org.jclouds.rest.config.HttpApiModule;
-import org.jclouds.rest.functions.ImplicitOptionalConverter;
-
-import com.google.common.cache.CacheBuilder;
-import com.google.common.cache.CacheLoader;
-import com.google.common.cache.LoadingCache;
-import com.google.inject.Provides;
-
-/**
- * Configures the Neutron connection.
- */
-@ConfiguresHttpApi
-public class NeutronHttpApiModule extends HttpApiModule<NeutronApi> {
-   
-   @Override
-   protected void configure() {
-      bind(DateAdapter.class).to(Iso8601DateAdapter.class);
-      bind(ImplicitOptionalConverter.class).to(PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensionsSet.class);
-      super.configure();
-      aliasBinder(binder());
-   }
-   
-   @Provides
-   @Singleton
-   public LoadingCache<String, Set<? extends Extension>> provideExtensionsByZone(final Provider<NeutronApi> quantumApi) {
-      return CacheBuilder.newBuilder().expireAfterWrite(23, TimeUnit.HOURS)
-            .build(new CacheLoader<String, Set<? extends Extension>>() {
-               @Override
-               public Set<? extends Extension> load(String key) throws Exception {
-                  return quantumApi.get().getExtensionApiForZone(key).list();
-               }
-            });
-   }
-   
-   @Override
-   protected void bindErrorHandlers() {
-      bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(NeutronErrorHandler.class);
-      bind(HttpErrorHandler.class).annotatedWith(ClientError.class).to(NeutronErrorHandler.class);
-      bind(HttpErrorHandler.class).annotatedWith(ServerError.class).to(NeutronErrorHandler.class);
-   }
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/AllocationPool.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/AllocationPool.java
deleted file mode 100644
index f81192e..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/AllocationPool.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.domain;
-
-import com.google.common.base.Objects;
-import com.google.common.base.Objects.ToStringHelper;
-
-import java.beans.ConstructorProperties;
-
-/**
- * A Neutron Subnet Allocation Pool
- *
- * @see <a href="http://docs.openstack.org/api/openstack-network/2.0/content/Subnets.html">api doc</a>
- */
-public class AllocationPool {
-
-   private final String start;
-   private final String end;
-
-   @ConstructorProperties({
-      "start", "end"
-   })
-   protected AllocationPool(String start, String end) {
-      this.start = start;
-      this.end = end;
-   }
-
-   /**
-    * @return the start ip
-    */
-   public String getStart() {
-      return start;
-   }
-
-   /**
-    * @return the end ip
-    */
-   public String getEnd() {
-      return end;
-   }
-
-   @Override
-   public int hashCode() {
-      return Objects.hashCode(start, end);
-   }
-
-   @Override
-   public boolean equals(Object obj) {
-      if (this == obj) return true;
-      if (obj == null || getClass() != obj.getClass()) return false;
-      AllocationPool that = AllocationPool.class.cast(obj);
-      return Objects.equal(this.start, that.start) && Objects.equal(this.end, that.end);
-   }
-
-   protected ToStringHelper string() {
-      return Objects.toStringHelper(this).add("start", start).add("end", end);
-   }
-
-   @Override
-   public String toString() {
-      return string().toString();
-   }
-
-   public static Builder builder() {
-      return new ConcreteBuilder();
-   }
-
-   public Builder toBuilder() {
-      return new ConcreteBuilder().fromAllocationPool(this);
-   }
-
-   public abstract static class Builder {
-      protected abstract Builder self();
-
-      protected String start;
-      protected String end;
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.AllocationPool#getStart()
-       */
-      public Builder start(String start) {
-         this.start = start;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.AllocationPool#getEnd()
-       */
-      public Builder end(String end) {
-         this.end = end;
-         return self();
-      }
-
-      public AllocationPool build() {
-         return new AllocationPool(start, end);
-      }
-
-      public Builder fromAllocationPool(AllocationPool in) {
-         return this.start(in.getStart()).end(in.getEnd());
-      }
-   }
-
-   private static class ConcreteBuilder extends Builder {
-      @Override
-      protected ConcreteBuilder self() {
-         return this;
-      }
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/BulkNetwork.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/BulkNetwork.java
deleted file mode 100644
index f2e4a0e..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/BulkNetwork.java
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.domain;
-
-import com.google.common.base.Objects;
-
-import java.beans.ConstructorProperties;
-
-/**
- * A Neutron network used for creating networks in bulk
- * The only difference between this and the actual network are the missing fields id, tenantId, state & shared
- */
-public class BulkNetwork {
-
-   private final String name;
-   private final Boolean adminStateUp;
-   private final Boolean external;
-   private final NetworkType networkType;
-   private final String physicalNetworkName;
-   private final Integer segmentationId;
-
-   @ConstructorProperties({
-      "name", "admin_state_up", "router:external", "provider:network_type", "provider:physical_network", "provider:segmentation_id"
-   })
-   protected BulkNetwork(String name, Boolean adminStateUp, Boolean external, String networkType, String physicalNetworkName, Integer segmentationId) {
-      this.name = name;
-      this.adminStateUp = adminStateUp;
-      this.external = external;
-      this.networkType = NetworkType.fromValue(networkType);
-      this.physicalNetworkName = physicalNetworkName;
-      this.segmentationId = segmentationId;
-   }
-
-   /**
-    * @return the name of the network
-    */
-   public String getName() {
-      return name;
-   }
-
-   /**
-    * @return the administrative state of network. If false, the network does not forward packets.
-    */
-   public Boolean getAdminStateUp() {
-      return adminStateUp;
-   }
-
-   /**
-    * @return true if network is external, false if not
-    */
-   public Boolean getExternal() {
-      return external;
-   }
-
-   /**
-    * @return the type of network
-    */
-   public NetworkType getNetworkType() {
-      return networkType;
-   }
-
-   /**
-    * @return the physical network name
-    */
-   public String getPhysicalNetworkName() {
-      return physicalNetworkName;
-   }
-
-   /**
-    * @return the segmentation id of the network
-    */
-   public Integer getSegmentationId() {
-      return segmentationId;
-   }
-
-   @Override
-   public int hashCode() {
-      return Objects.hashCode(name, adminStateUp, external, networkType, physicalNetworkName, segmentationId);
-   }
-
-   @Override
-   public boolean equals(Object obj) {
-      if (this == obj) return true;
-      if (obj == null || getClass() != obj.getClass()) return false;
-      BulkNetwork that = BulkNetwork.class.cast(obj);
-      return Objects.equal(this.name, that.name)
-         && Objects.equal(this.adminStateUp, that.adminStateUp)
-         && Objects.equal(this.external, that.external)
-         && Objects.equal(this.networkType, that.networkType)
-         && Objects.equal(this.physicalNetworkName, that.physicalNetworkName)
-         && Objects.equal(this.segmentationId, that.segmentationId);
-   }
-
-   protected Objects.ToStringHelper string() {
-      return Objects.toStringHelper(this)
-         .add("name", name).add("adminStateUp", adminStateUp).add("external", external)
-         .add("networkType", networkType).add("physicalNetworkName", physicalNetworkName)
-         .add("segmentationId", segmentationId);
-   }
-
-   @Override
-   public String toString() {
-      return string().toString();
-   }
-
-   public static Builder builder() {
-      return new ConcreteBuilder();
-   }
-
-   public Builder toBuilder() {
-      return new ConcreteBuilder().fromBulkNetwork(this);
-   }
-
-   public abstract static class Builder {
-      protected abstract Builder self();
-
-      protected String name;
-      protected Boolean adminStateUp;
-      protected Boolean external;
-      protected NetworkType networkType;
-      protected String physcialNetworkName;
-      protected Integer segmentationId;
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.BulkNetwork#getName()
-       */
-      public Builder name(String name) {
-         this.name = name;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.BulkNetwork#getAdminStateUp()
-       */
-      public Builder adminStateUp(Boolean adminStateUp) {
-         this.adminStateUp = adminStateUp;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.BulkNetwork#getExternal()
-       */
-      public Builder external(Boolean external) {
-         this.external = external;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.BulkNetwork#getNetworkType()
-       */
-      public Builder networkType(NetworkType networkType) {
-         this.networkType = networkType;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.BulkNetwork#getPhysicalNetworkName()
-       */
-      public Builder physicalNetworkName(String physicalNetworkName) {
-         this.physcialNetworkName = physicalNetworkName;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.BulkNetwork#getSegmentationId()
-       */
-      public Builder segmentationId(Integer segmentationId) {
-         this.segmentationId = segmentationId;
-         return self();
-      }
-
-      public BulkNetwork build() {
-         return new BulkNetwork(name, adminStateUp, external, networkType == null ? null : networkType.getValue(), physcialNetworkName, segmentationId);
-      }
-
-      public Builder fromBulkNetwork(BulkNetwork in) {
-         return this.name(in.getName())
-               .adminStateUp(in.getAdminStateUp())
-               .external(in.getExternal())
-               .networkType(in.getNetworkType())
-               .physicalNetworkName(in.getPhysicalNetworkName())
-               .segmentationId(in.getSegmentationId());
-      }
-   }
-
-   private static class ConcreteBuilder extends Builder {
-      @Override
-      protected ConcreteBuilder self() {
-         return this;
-      }
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/BulkPort.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/BulkPort.java
deleted file mode 100644
index 91c2637..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/BulkPort.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.domain;
-
-import com.google.common.base.Objects;
-import com.google.common.collect.ImmutableSet;
-
-import java.beans.ConstructorProperties;
-import java.util.Collection;
-import java.util.Set;
-
-/**
- * A Neutron port used for creating ports in bulk
- * The only difference between this and the actual port are the missing fields id, tenantId & state
- */
-public class BulkPort {
-
-   private final String name;
-   private final String networkId;
-   private final Boolean adminStateUp;
-   private final String deviceId;
-   private final String deviceOwner;
-   private final Set<IP> fixedIps;
-   private final String macAddress;
-
-   @ConstructorProperties({
-      "name", "network_id", "admin_state_up", "device_id", "device_owner", "fixed_ips", "mac_address"
-   })
-   protected BulkPort(String name, String networkId, Boolean adminStateUp, String deviceId, String deviceOwner, Set<IP> fixedIps, String macAddress) {
-      this.name = name;
-      this.networkId = networkId;
-      this.adminStateUp = adminStateUp;
-      this.deviceId = deviceId;
-      this.deviceOwner = deviceOwner;
-      this.fixedIps = fixedIps != null ? ImmutableSet.copyOf(fixedIps) : ImmutableSet.<IP>of();
-      this.macAddress = macAddress;
-   }
-
-   /**
-    * @return the name of the port
-    */
-   public String getName() {
-      return name;
-   }
-
-   /**
-    * @return the id of the network where this port is associated with
-    */
-   public String getNetworkId() {
-      return networkId;
-   }
-
-   /**
-    * @return the administrative state of port. If false, port does not forward packets
-    */
-   public Boolean getAdminStateUp() {
-      return adminStateUp;
-   }
-
-   /**
-    * @return the id of the device (e.g. server) using this port.
-    */
-   public String getDeviceId() {
-      return deviceId;
-   }
-
-   /**
-    * @return the entity (e.g.: dhcp agent) using this port.
-    */
-   public String getDeviceOwner() {
-      return deviceOwner;
-   }
-
-   /**
-    * @return the set of fixed ips this port has been assigned
-    */
-   public Set<IP> getFixedIps() {
-      return fixedIps;
-   }
-
-   /**
-    * @return the mac address of this port
-    */
-   public String getMacAddress() {
-      return macAddress;
-   }
-
-   @Override
-   public int hashCode() {
-      return Objects.hashCode(name, networkId, adminStateUp, deviceId, deviceOwner, fixedIps, macAddress);
-   }
-
-   @Override
-   public boolean equals(Object obj) {
-      if (this == obj) return true;
-      if (obj == null || getClass() != obj.getClass()) return false;
-      BulkPort that = BulkPort.class.cast(obj);
-      return Objects.equal(this.name, that.name)
-         && Objects.equal(this.networkId, that.networkId)
-         && Objects.equal(this.adminStateUp, that.adminStateUp)
-         && Objects.equal(this.deviceId, that.deviceId)
-         && Objects.equal(this.deviceOwner, that.deviceOwner)
-         && Objects.equal(this.fixedIps, that.fixedIps)
-         && Objects.equal(this.macAddress, that.macAddress);
-   }
-
-   protected Objects.ToStringHelper string() {
-      return Objects.toStringHelper(this)
-         .add("name", name).add("networkId", networkId).add("adminStateUp", adminStateUp)
-         .add("deviceId", deviceId).add("deviceOwner", deviceOwner).add("fixedIps", fixedIps).add("macAddress", macAddress);
-   }
-
-   @Override
-   public String toString() {
-      return string().toString();
-   }
-
-   public static Builder builder() {
-      return new ConcreteBuilder();
-   }
-
-   public Builder toBuilder() {
-      return new ConcreteBuilder().fromBulkPort(this);
-   }
-
-   public abstract static class Builder {
-      protected abstract Builder self();
-
-      protected String name;
-      protected String networkId;
-      protected String deviceId;
-      protected String deviceOwner;
-      protected String macAddress;
-      protected Set<IP> fixedIps;
-      protected Boolean adminStateUp;
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.BulkPort#getName()
-       */
-      public Builder name(String name) {
-         this.name = name;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.BulkPort#getNetworkId()
-       */
-      public Builder networkId(String networkId) {
-         this.networkId = networkId;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.BulkPort#getDeviceId()
-       */
-      public Builder deviceId(String deviceId) {
-         this.deviceId = deviceId;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.BulkPort#getDeviceOwner()
-       */
-      public Builder deviceOwner(String deviceOwner) {
-         this.deviceOwner = deviceOwner;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.BulkPort#getMacAddress()
-       */
-      public Builder macAddress(String macAddress) {
-         this.macAddress = macAddress;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.BulkPort#getFixedIps()
-       */
-      public Builder fixedIps(Collection<IP> fixedIps) {
-         this.fixedIps = ImmutableSet.copyOf(fixedIps);
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.BulkPort#getAdminStateUp()
-       */
-      public Builder adminStateUp(Boolean adminStateUp) {
-         this.adminStateUp = adminStateUp;
-         return self();
-      }
-
-      public BulkPort build() {
-         return new BulkPort(name, networkId, adminStateUp, deviceId, deviceOwner, fixedIps, macAddress);
-      }
-
-      public Builder fromBulkPort(BulkPort in) {
-         return this.name(in.getName())
-               .networkId(in.getNetworkId())
-               .adminStateUp(in.getAdminStateUp())
-               .deviceId(in.getDeviceId())
-               .deviceOwner(in.getDeviceOwner())
-               .fixedIps(in.getFixedIps())
-               .macAddress(in.getMacAddress());
-      }
-   }
-
-   private static class ConcreteBuilder extends Builder {
-      @Override
-      protected ConcreteBuilder self() {
-         return this;
-      }
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/BulkSubnet.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/BulkSubnet.java
deleted file mode 100644
index c1eea45..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/BulkSubnet.java
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.domain;
-
-import com.google.common.base.Objects;
-import com.google.common.collect.ImmutableSet;
-
-import java.beans.ConstructorProperties;
-import java.util.Collection;
-import java.util.Set;
-
-/**
- * A Neutron subnet used for creating subnets in bulk
- * The only difference between this and the actual subnet are the missing fields id & tenantId
- */
-public class BulkSubnet {
-
-   protected String name;
-   protected String networkId;
-   protected String gatewayIp;
-   protected Integer ipVersion;
-   protected String cidr;
-   protected Set<AllocationPool> allocationPools;
-   protected Boolean enableDhcp;
-   protected Set<String> dnsNameServers;
-   protected Set<HostRoute> hostRoutes;
-
-   @ConstructorProperties({
-      "name", "network_id", "gateway_ip", "ip_version", "cidr", "allocation_pools", "enable_dhcp", "dns_nameservers", "host_routes"
-   })
-   protected BulkSubnet(String name, String networkId, String gatewayIp, Integer ipVersion, String cidr,
-                     Set<AllocationPool> allocationPools, Boolean enableDhcp, Set<String> dnsNameServers, Set<HostRoute> hostRoutes) {
-      this.name = name;
-      this.networkId = networkId;
-      this.gatewayIp = gatewayIp;
-      this.ipVersion = ipVersion;
-      this.cidr = cidr;
-      this.allocationPools = allocationPools != null ? ImmutableSet.copyOf(allocationPools) : ImmutableSet.<AllocationPool>of();
-      this.enableDhcp = enableDhcp;
-      this.dnsNameServers = dnsNameServers != null ? ImmutableSet.copyOf(dnsNameServers) : ImmutableSet.<String>of();
-      this.hostRoutes = hostRoutes != null ? ImmutableSet.copyOf(hostRoutes) : ImmutableSet.<HostRoute>of();
-   }
-
-   /**
-    * @return the name of the subnet
-    */
-   public String getName() {
-      return name;
-   }
-
-   /**
-    * @return the id of the network this subnet is associated with
-    */
-   public String getNetworkId() {
-      return networkId;
-   }
-
-   /**
-    * @return the default gateway used by devices in this subnet
-    */
-   public String getGatewayIp() {
-      return gatewayIp;
-   }
-
-   /**
-    * @return the ip version used by this subnet
-    */
-   public Integer getIpVersion() {
-      return ipVersion;
-   }
-
-   /**
-    * @return the cidr representing the IP range for this subnet, based on IP version
-    */
-   public String getCidr() {
-      return cidr;
-   }
-
-   /**
-    * @return the sub-ranges of cidr available for dynamic allocation to ports
-    */
-   public Set<AllocationPool> getAllocationPools() {
-      return allocationPools;
-   }
-
-   /**
-    * @return true if DHCP is enabled for this subnet, false if not.
-    */
-   public Boolean getEnableDhcp() {
-      return enableDhcp;
-   }
-
-   /**
-    * @return the set of DNS name servers used by hosts in this subnet.
-    */
-   public Set<String> getDnsNameServers() {
-      return dnsNameServers;
-   }
-
-   /**
-    * @return the set of routes that should be used by devices with IPs from this subnet
-    */
-   public Set<HostRoute> getHostRoutes() {
-      return hostRoutes;
-   }
-
-   @Override
-   public int hashCode() {
-      return Objects.hashCode(name, networkId, gatewayIp, ipVersion, cidr,
-         allocationPools, enableDhcp, dnsNameServers, hostRoutes);
-   }
-
-   @Override
-   public boolean equals(Object obj) {
-      if (this == obj) return true;
-      if (obj == null || getClass() != obj.getClass()) return false;
-      BulkSubnet that = BulkSubnet.class.cast(obj);
-      return Objects.equal(this.name, that.name)
-         && Objects.equal(this.networkId, that.networkId)
-         && Objects.equal(this.gatewayIp, that.gatewayIp)
-         && Objects.equal(this.ipVersion, that.ipVersion)
-         && Objects.equal(this.cidr, that.cidr)
-         && Objects.equal(this.allocationPools, that.allocationPools)
-         && Objects.equal(this.enableDhcp, that.enableDhcp)
-         && Objects.equal(this.dnsNameServers, that.dnsNameServers)
-         && Objects.equal(this.hostRoutes, that.hostRoutes);
-   }
-
-   protected Objects.ToStringHelper string() {
-      return Objects.toStringHelper(this)
-         .add("name", name).add("networkId", networkId).add("gatewayIp", gatewayIp).add("ipVersion", ipVersion)
-         .add("cidr", cidr).add("enableDhcp", enableDhcp).add("allocationPools", allocationPools)
-         .add("dnsNameServers", dnsNameServers).add("hostRoutes", hostRoutes);
-   }
-
-   @Override
-   public String toString() {
-      return string().toString();
-   }
-
-   public static Builder builder() {
-      return new ConcreteBuilder();
-   }
-
-   public Builder toBuilder() {
-      return new ConcreteBuilder().fromBulkSubnet(this);
-   }
-
-   public abstract static class Builder {
-      protected abstract Builder self();
-
-      protected String name;
-      protected String networkId;
-      protected String gatewayIp;
-      protected Integer ipVersion;
-      protected String cidr;
-      protected Set<AllocationPool> allocationPools;
-      protected Boolean enableDhcp;
-      protected Set<String> dnsNameServers;
-      protected Set<HostRoute> hostRoutes;
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.BulkSubnet#getName()
-       */
-      public Builder name(String name) {
-         this.name = name;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.BulkSubnet#getNetworkId()
-       */
-      public Builder networkId(String networkId) {
-         this.networkId = networkId;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.BulkSubnet#getGatewayIp()
-       */
-      public Builder gatewayIp(String gatewayIp) {
-         this.gatewayIp = gatewayIp;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.BulkSubnet#getIpVersion()
-       */
-      public Builder ipVersion(Integer ipVersion) {
-         this.ipVersion = ipVersion;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.BulkSubnet#getCidr()
-       */
-      public Builder cidr(String cidr) {
-         this.cidr = cidr;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.BulkSubnet#getAllocationPools()
-       */
-      public Builder allocationPools(Collection<AllocationPool> allocationPools) {
-         this.allocationPools = ImmutableSet.copyOf(allocationPools);
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.BulkSubnet#getEnableDhcp()
-       */
-      public Builder enableDhcp(Boolean enableDhcp) {
-         this.enableDhcp = enableDhcp;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.BulkSubnet#getDnsNameServers()
-       */
-      public Builder dnsNameServers(Collection<String> dnsNameServers) {
-         this.dnsNameServers = ImmutableSet.copyOf(dnsNameServers);
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.BulkSubnet#getHostRoutes()
-       */
-      public Builder hostRoutes(Collection<HostRoute> hostRoutes) {
-         this.hostRoutes = ImmutableSet.copyOf(hostRoutes);
-         return self();
-      }
-
-      public BulkSubnet build() {
-         return new BulkSubnet(name, networkId, gatewayIp, ipVersion, cidr, allocationPools, enableDhcp, dnsNameServers, hostRoutes);
-      }
-
-      public Builder fromBulkSubnet(BulkSubnet in) {
-         return this.name(in.getName())
-               .networkId(in.getNetworkId())
-               .gatewayIp(in.getGatewayIp())
-               .ipVersion(in.getIpVersion())
-               .cidr(in.getCidr())
-               .allocationPools(in.getAllocationPools())
-               .enableDhcp(in.getEnableDhcp())
-               .dnsNameServers(in.getDnsNameServers())
-               .hostRoutes(in.getHostRoutes());
-      }
-   }
-
-   private static class ConcreteBuilder extends Builder {
-      @Override
-      protected ConcreteBuilder self() {
-         return this;
-      }
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/ExternalGatewayInfo.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/ExternalGatewayInfo.java
deleted file mode 100644
index f5473ed..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/ExternalGatewayInfo.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.domain;
-
-import com.google.common.base.Objects;
-
-import java.beans.ConstructorProperties;
-
-/**
- * Information on external gateway for the router
- */
-public class ExternalGatewayInfo {
-
-   private final String networkId;
-
-   @ConstructorProperties({"network_id"})
-   protected ExternalGatewayInfo(String networkId) {
-      this.networkId = networkId;
-   }
-
-   /**
-    * @return the id of the network which is used as external gateway for the router
-    */
-   public String getNetworkId() {
-      return networkId;
-   }
-
-   @Override
-   public int hashCode() {
-      return Objects.hashCode(networkId);
-   }
-
-   @Override
-   public boolean equals(Object obj) {
-      if (this == obj) return true;
-      if (obj == null || getClass() != obj.getClass()) return false;
-      ExternalGatewayInfo that = ExternalGatewayInfo.class.cast(obj);
-      return Objects.equal(this.networkId, that.networkId);
-   }
-
-   protected Objects.ToStringHelper string() {
-      return Objects.toStringHelper(this).add("networkId", networkId);
-   }
-
-   @Override
-   public String toString() {
-      return string().toString();
-   }
-
-   public static Builder builder() {
-      return new ConcreteBuilder();
-   }
-
-   public Builder toBuilder() {
-      return new ConcreteBuilder().fromExternalGatewayInfo(this);
-   }
-
-   public abstract static class Builder {
-      protected abstract Builder self();
-
-      protected String networkId;
-
-      /**
-       * @see ExternalGatewayInfo#getNetworkId()
-       */
-      public Builder networkId(String networkId) {
-         this.networkId = networkId;
-         return self();
-      }
-
-      public ExternalGatewayInfo build() {
-         return new ExternalGatewayInfo(networkId);
-      }
-
-      public Builder fromExternalGatewayInfo(ExternalGatewayInfo in) {
-         return this.networkId(in.getNetworkId());
-      }
-   }
-
-   private static class ConcreteBuilder extends Builder {
-      @Override
-      protected ConcreteBuilder self() {
-         return this;
-      }
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/HostRoute.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/HostRoute.java
deleted file mode 100644
index c5dcb56..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/HostRoute.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.domain;
-
-import com.google.common.base.Objects;
-import com.google.common.base.Objects.ToStringHelper;
-
-import java.beans.ConstructorProperties;
-
-/**
- * A Neutron Subnet Host Route
- *
- * @see <a href="http://docs.openstack.org/api/openstack-network/2.0/content/Subnets.html">api doc</a>
- */
-public class HostRoute {
-
-   private final String destinationCidr;
-   private final String nextHop;
-
-   @ConstructorProperties({
-      "destination", "nexthop"
-   })
-   protected HostRoute(String destinationCidr, String nextHop) {
-      this.destinationCidr = destinationCidr;
-      this.nextHop = nextHop;
-   }
-
-   /**
-    * @return the destination cidr for this route
-    */
-   public String getDestinationCidr() {
-      return destinationCidr;
-   }
-
-   /**
-    * @return the ip of the next hop to forward traffic to
-    */
-   public String getNextHop() {
-      return nextHop;
-   }
-
-   @Override
-   public int hashCode() {
-      return Objects.hashCode(destinationCidr, nextHop);
-   }
-
-   @Override
-   public boolean equals(Object obj) {
-      if (this == obj) return true;
-      if (obj == null || getClass() != obj.getClass()) return false;
-      HostRoute that = HostRoute.class.cast(obj);
-      return Objects.equal(this.destinationCidr, that.destinationCidr) && Objects.equal(this.nextHop, that.nextHop);
-   }
-
-   protected ToStringHelper string() {
-      return Objects.toStringHelper(this)
-         .add("destinationCidr", destinationCidr).add("nextHop", nextHop);
-   }
-
-   @Override
-   public String toString() {
-      return string().toString();
-   }
-
-   public static Builder builder() {
-      return new ConcreteBuilder();
-   }
-
-   public Builder toBuilder() {
-      return new ConcreteBuilder().fromHostRoute(this);
-   }
-
-   public abstract static class Builder {
-      protected abstract Builder self();
-
-      protected String destinationCidr;
-      protected String nextHop;
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.HostRoute#getDestinationCidr()
-       */
-      public Builder destinationCidr(String destinationCidr) {
-         this.destinationCidr = destinationCidr;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.HostRoute#getNextHop()
-       */
-      public Builder nextHop(String nextHop) {
-         this.nextHop = nextHop;
-         return self();
-      }
-
-      public HostRoute build() {
-         return new HostRoute(destinationCidr, nextHop);
-      }
-
-      public Builder fromHostRoute(HostRoute in) {
-         return this.destinationCidr(in.getDestinationCidr()).nextHop(in.getNextHop());
-      }
-   }
-
-   private static class ConcreteBuilder extends Builder {
-      @Override
-      protected ConcreteBuilder self() {
-         return this;
-      }
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/IP.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/IP.java
deleted file mode 100644
index 689a53e..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/IP.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.domain;
-
-import com.google.common.base.Objects;
-
-import java.beans.ConstructorProperties;
-
-public class IP {
-
-   private String ipAddress;
-   private String subnetId;
-
-   @ConstructorProperties({
-      "ip_address", "subnet_id"
-   })
-   protected IP(String ipAddress, String subnetId) {
-      this.ipAddress = ipAddress;
-      this.subnetId = subnetId;
-   }
-
-   /**
-    * @return the fixed ip address
-    */
-   public String getIpAddress() {
-      return ipAddress;
-   }
-
-   /**
-    * @return the id of the subnet of this ip
-    */
-   public String getSubnetId() {
-      return subnetId;
-   }
-
-   @Override
-   public int hashCode() {
-      return Objects.hashCode(ipAddress, subnetId);
-   }
-
-   @Override
-   public boolean equals(Object obj) {
-      if (this == obj) return true;
-      if (obj == null || getClass() != obj.getClass()) return false;
-      IP that = IP.class.cast(obj);
-      return Objects.equal(this.ipAddress, that.ipAddress) && Objects.equal(this.subnetId, that.subnetId);
-   }
-
-   protected Objects.ToStringHelper string() {
-      return Objects.toStringHelper(this)
-         .add("ipAddress", ipAddress).add("subnetId", subnetId);
-   }
-
-   @Override
-   public String toString() {
-      return string().toString();
-   }
-
-   public static Builder builder() {
-      return new ConcreteBuilder();
-   }
-
-   public Builder toBuilder() {
-      return new ConcreteBuilder().fromIP(this);
-   }
-
-   public abstract static class Builder {
-      protected abstract Builder self();
-
-      protected String ipAddress;
-      protected String subnetId;
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.IP#getIpAddress
-       */
-      public Builder ipAddress(String ipAddress) {
-         this.ipAddress = ipAddress;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.IP#getSubnetId
-       */
-      public Builder subnetId(String subnetId) {
-         this.subnetId = subnetId;
-         return self();
-      }
-
-      public IP build() {
-         return new IP(ipAddress, subnetId);
-      }
-
-      public Builder fromIP(IP in) {
-         return this.ipAddress(in.getIpAddress()).subnetId(in.getSubnetId());
-      }
-   }
-
-   private static class ConcreteBuilder extends Builder {
-      @Override
-      protected ConcreteBuilder self() {
-         return this;
-      }
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/Network.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/Network.java
deleted file mode 100644
index 3aa1804..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/Network.java
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.domain;
-
-import com.google.common.base.Objects;
-import com.google.common.collect.ImmutableSet;
-
-import java.beans.ConstructorProperties;
-import java.util.Set;
-
-/**
- * A Neutron network
- *
- * @see <a href="http://docs.openstack.org/api/openstack-network/2.0/content/Networks.html">api doc</a>
- */
-public class Network extends ReferenceWithName {
-
-   private final State state;
-   private final Set<String> subnets;
-   private final Boolean adminStateUp;
-   private final Boolean shared;
-   private final Boolean external;
-   private final NetworkType networkType;
-   private final String physicalNetworkName;
-   private final Integer segmentationId;
-
-   @ConstructorProperties({
-      "id", "tenant_id", "name", "status", "subnets", "admin_state_up", "shared", "router:external",
-      "provider:network_type", "provider:physical_network", "provider:segmentation_id"
-   })
-   protected Network(String id, String tenantId, String name, State state,
-                     Set<String> subnets, Boolean adminStateUp, Boolean shared, Boolean external,
-                     String networkType, String physicalNetworkName, Integer segmentationId) {
-      super(id, tenantId, name);
-      this.state = state;
-      this.subnets = subnets != null ? ImmutableSet.copyOf(subnets) : ImmutableSet.<String>of();
-      this.adminStateUp = adminStateUp;
-      this.shared = shared;
-      this.external = external;
-      this.networkType = networkType != null ? NetworkType.fromValue(networkType) : null;
-      this.physicalNetworkName = physicalNetworkName;
-      this.segmentationId = segmentationId;
-   }
-
-   /**
-    * @return the current state of the network
-    */
-   public State getState() {
-      return state;
-   }
-
-   /**
-    * @return set of subnet ids that are associated with this network
-    */
-   public Set<String> getSubnets() {
-      return subnets;
-   }
-
-   /**
-    * @return the administrative state of network. If false, the network does not forward packets.
-    */
-   public Boolean getAdminStateUp() {
-      return adminStateUp;
-   }
-
-   /**
-    * @return true if the network resource can be accessed by any tenant or not, false if not
-    */
-   public Boolean getShared() {
-      return shared;
-   }
-
-   /**
-    * @return true if network is external, false if not
-    */
-   public Boolean getExternal() {
-      return external;
-   }
-
-   /**
-    * @return the type of network
-    */
-   public NetworkType getNetworkType() {
-      return networkType;
-   }
-
-   /**
-    * @return the physical network name
-    */
-   public String getPhysicalNetworkName() {
-      return physicalNetworkName;
-   }
-
-   /**
-    * @return the segmentation id of the network
-    */
-   public Integer getSegmentationId() {
-      return segmentationId;
-   }
-
-   @Override
-   public int hashCode() {
-      return Objects.hashCode(super.hashCode(), state, subnets, adminStateUp, shared, external,
-         networkType, physicalNetworkName, segmentationId);
-   }
-
-   @Override
-   public boolean equals(Object obj) {
-      if (this == obj) return true;
-      if (obj == null || getClass() != obj.getClass()) return false;
-      Network that = Network.class.cast(obj);
-      return super.equals(obj)
-         && Objects.equal(this.state, that.state)
-         && Objects.equal(this.subnets, that.subnets)
-         && Objects.equal(this.adminStateUp, that.adminStateUp)
-         && Objects.equal(this.shared, that.shared)
-         && Objects.equal(this.external, that.external)
-         && Objects.equal(this.networkType, that.networkType)
-         && Objects.equal(this.physicalNetworkName, that.physicalNetworkName)
-         && Objects.equal(this.segmentationId, that.segmentationId);
-   }
-
-   protected Objects.ToStringHelper string() {
-      return super.string()
-         .add("state", state).add("subnets", subnets).add("adminStateUp", adminStateUp).add("shared", shared).add("external", external)
-         .add("networkType", networkType).add("physicalNetworkName", physicalNetworkName).add("segmentationId", segmentationId);
-   }
-
-   @Override
-   public String toString() {
-      return string().toString();
-   }
-
-   public static Builder<?> builder() {
-      return new ConcreteBuilder();
-   }
-
-   public Builder<?> toBuilder() {
-      return new ConcreteBuilder().fromNetwork(this);
-   }
-
-   public abstract static class Builder<T extends Builder<T>> extends ReferenceWithName.Builder<T> {
-      protected State state;
-      protected Set<String> subnets;
-      protected Boolean adminStateUp;
-      protected Boolean shared;
-      protected Boolean external;
-      protected NetworkType networkType;
-      protected String physicalNetworkName;
-      protected Integer segmentationId;
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.Network#getState()
-       */
-      public T state(State state) {
-         this.state = state;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.Network#getSubnets()
-       */
-      public T subnets(Set<String> subnets) {
-         this.subnets = subnets;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.Network#getAdminStateUp()
-       */
-      public T adminStateUp(Boolean adminStateUp) {
-         this.adminStateUp = adminStateUp;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.Network#getShared()
-       */
-      public T shared(Boolean shared) {
-         this.shared = shared;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.Network#getExternal()
-       */
-      public T external(Boolean external) {
-         this.external = external;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.Network#getNetworkType()
-       */
-      public T networkType(NetworkType networkType) {
-         this.networkType = networkType;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.Network#getPhysicalNetworkName()
-       */
-      public T physicalNetworkName(String physicalNetworkName) {
-         this.physicalNetworkName = physicalNetworkName;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.Network#getSegmentationId()
-       */
-      public T segmentationId(Integer segmentationId) {
-         this.segmentationId = segmentationId;
-         return self();
-      }
-
-      public Network build() {
-         return new Network(id, tenantId, name, state, subnets, adminStateUp, shared, external, networkType == null ? null : networkType.getValue(), physicalNetworkName, segmentationId);
-      }
-
-      public T fromNetwork(Network in) {
-         return super.fromReference(in)
-               .state(in.getState())
-               .subnets(in.getSubnets())
-               .adminStateUp(in.getAdminStateUp())
-               .shared(in.getShared())
-               .external(in.getExternal())
-               .networkType(in.getNetworkType())
-               .physicalNetworkName(in.getPhysicalNetworkName())
-               .segmentationId(in.getSegmentationId());
-      }
-   }
-
-   private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
-      @Override
-      protected ConcreteBuilder self() {
-         return this;
-      }
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/NetworkType.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/NetworkType.java
deleted file mode 100644
index b0f1d20..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/NetworkType.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.domain;
-
-/**
- * The type of Network
- */
-public enum NetworkType {
-   LOCAL("local"), FLAT("flat"), VLAN("vlan"), GRE("gre");
-
-   private String value;
-
-   private NetworkType(String value) {
-      this.value = value;
-   }
-
-   public String getValue() {
-      return value;
-   }
-
-   public static NetworkType fromValue(String value) {
-      return NetworkType.valueOf(value.toUpperCase());
-   }
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/Port.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/Port.java
deleted file mode 100644
index 75f491f..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/Port.java
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.domain;
-
-import com.google.common.base.Objects;
-
-import java.beans.ConstructorProperties;
-import java.util.Set;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * A Neutron port
- *
- * @see <a href="http://docs.openstack.org/api/openstack-network/1.0/content/Ports.html">api doc</a>
- */
-public class Port extends ReferenceWithName {
-
-   private final State state;
-   private final Boolean adminStateUp;
-   private final String networkId;
-   private final String deviceId;
-   private final String deviceOwner;
-   private final String macAddress;
-   private final Set<IP> fixedIps;
-
-   @ConstructorProperties({
-      "id", "tenant_id", "name", "status", "network_id", "admin_state_up", "device_id", "device_owner", "fixed_ips", "mac_address"
-   })
-   protected Port(String id, String tenantId, String name, State state, String networkId, Boolean adminStateUp,
-                  String deviceId, String deviceOwner, Set<IP> fixedIps, String macAddress) {
-      super(id, tenantId, name);
-      this.adminStateUp = adminStateUp;
-      this.state = state;
-      this.networkId = checkNotNull(networkId, "networkId");
-      this.deviceId = deviceId;
-      this.deviceOwner = deviceOwner;
-      this.fixedIps = fixedIps;
-      this.macAddress = macAddress;
-   }
-
-   /**
-    * @return the current state of the port
-    */
-   public State getState() {
-      return this.state;
-   }
-
-   /**
-    * @return the administrative state of port. If false, port does not forward packets.
-    */
-   public Boolean getAdminStateUp() {
-      return adminStateUp;
-   }
-
-   /**
-    * @return the id of the network where this port is associated with
-    */
-   public String getNetworkId() {
-      return networkId;
-   }
-
-   /**
-    * @return the id of the device (e.g. server) using this port.
-    */
-   public String getDeviceId() {
-      return deviceId;
-   }
-
-   /**
-    * @return the entity (e.g.: dhcp agent) using this port.
-    */
-   public String getDeviceOwner() {
-      return deviceOwner;
-   }
-
-   /**
-    * @return the set of fixed ips this port has been assigned
-    */
-   public Set<IP> getFixedIps() {
-      return fixedIps;
-   }
-
-   /**
-    * @return the mac address of this port
-    */
-   public String getMacAddress() {
-      return macAddress;
-   }
-
-   @Override
-   public int hashCode() {
-      return Objects.hashCode(super.hashCode(), state, adminStateUp, networkId, deviceId, deviceOwner, fixedIps, macAddress);
-   }
-
-   @Override
-   public boolean equals(Object obj) {
-      if (this == obj) return true;
-      if (obj == null || getClass() != obj.getClass()) return false;
-      Port that = Port.class.cast(obj);
-      return super.equals(obj)
-         && Objects.equal(this.state, that.state)
-         && Objects.equal(this.adminStateUp, that.adminStateUp)
-         && Objects.equal(this.networkId, that.networkId)
-         && Objects.equal(this.deviceId, that.deviceId)
-         && Objects.equal(this.deviceOwner, that.deviceOwner)
-         && Objects.equal(this.fixedIps, that.fixedIps)
-         && Objects.equal(this.macAddress, that.macAddress);
-   }
-
-   protected Objects.ToStringHelper string() {
-      return super.string()
-         .add("state", state).add("adminStateUp", adminStateUp).add("networkId", networkId).add("deviceId", deviceId)
-         .add("deviceOwner", deviceOwner).add("fixedIps", fixedIps).add("macAddress", macAddress);
-   }
-
-   @Override
-   public String toString() {
-      return string().toString();
-   }
-
-   public static Builder<?> builder() {
-      return new ConcreteBuilder();
-   }
-
-   public Builder<?> toBuilder() {
-      return new ConcreteBuilder().fromPort(this);
-   }
-
-   public abstract static class Builder<T extends Builder<T>> extends ReferenceWithName.Builder<T> {
-      protected String networkId;
-      protected String deviceId;
-      protected String deviceOwner;
-      protected String macAddress;
-      protected Set<IP> fixedIps;
-      protected State state;
-      protected Boolean adminStateUp;
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.Port#getState()
-       */
-      public T state(State state) {
-         this.state = state;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.Port#getNetworkId()
-       */
-      public T networkId(String networkId) {
-         this.networkId = networkId;
-         return self();
-      }
-
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.Port#getAdminStateUp()
-       */
-      public T adminStateUp(Boolean adminStateUp) {
-         this.adminStateUp = adminStateUp;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.Port#getDeviceId()
-       */
-      public T deviceId(String deviceId) {
-         this.deviceId = deviceId;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.Port#getDeviceOwner()
-       */
-      public T deviceOwner(String deviceOwner) {
-         this.deviceOwner = deviceOwner;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.Port#getDeviceId()
-       */
-      public T fixedIps(Set<IP> fixedIps) {
-         this.fixedIps = fixedIps;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.Port#getMacAddress()
-       */
-      public T macAddress(String macAddress) {
-         this.macAddress = macAddress;
-         return self();
-      }
-
-      public Port build() {
-         return new Port(id, tenantId, name, state, networkId, adminStateUp, deviceId, deviceOwner, fixedIps, macAddress);
-      }
-
-      public T fromPort(Port in) {
-         return super.fromReference(in)
-               .state(in.getState())
-               .networkId(in.getNetworkId())
-               .adminStateUp(in.getAdminStateUp())
-               .deviceId(in.getDeviceId())
-               .deviceOwner(in.getDeviceOwner())
-               .fixedIps(in.getFixedIps())
-               .macAddress(in.getMacAddress());
-      }
-   }
-
-   private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
-      @Override
-      protected ConcreteBuilder self() {
-         return this;
-      }
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/Reference.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/Reference.java
deleted file mode 100644
index 0458118..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/Reference.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.domain;
-
-import com.google.common.base.Objects;
-
-import java.beans.ConstructorProperties;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * Base class for beans in the Neutron v2.0 api
- *
- * @see <a href="http://docs.openstack.org/api/openstack-network/2.0/content/Networks.html">api doc</a>
- */
-public class Reference {
-
-   private final String id;
-   private final String tenantId;
-
-   @ConstructorProperties({
-      "id", "tenant_id"
-   })
-   protected Reference(String id, String tenantId) {
-      this.id = checkNotNull(id, "id");
-      this.tenantId = checkNotNull(tenantId, "tenantId");
-   }
-
-   /**
-    * @return the id of the entity
-    */
-   public String getId() {
-      return this.id;
-   }
-
-   /**
-    * @return the id of the tenant where this entity is associated with
-    */
-   public String getTenantId() {
-      return tenantId;
-   }
-
-   @Override
-   public int hashCode() {
-      return Objects.hashCode(id, tenantId);
-   }
-
-   @Override
-   public boolean equals(Object obj) {
-      if (this == obj) return true;
-      if (obj == null || getClass() != obj.getClass()) return false;
-      Reference that = Reference.class.cast(obj);
-      return Objects.equal(this.id, that.id) && Objects.equal(this.tenantId, that.tenantId);
-   }
-
-   protected Objects.ToStringHelper string() {
-      return Objects.toStringHelper(this)
-         .add("id", id).add("tenantId", tenantId);
-   }
-
-   @Override
-   public String toString() {
-      return string().toString();
-   }
-
-   public static Builder<?> builder() {
-      return new ConcreteBuilder();
-   }
-
-   public Builder<?> toBuilder() {
-      return new ConcreteBuilder().fromReference(this);
-   }
-
-   public abstract static class Builder<T extends Builder<T>> {
-      protected abstract T self();
-
-      protected String id;
-      protected String tenantId;
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.Reference#getId()
-       */
-      public T id(String id) {
-         this.id = id;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.Reference#getTenantId()
-       */
-      public T tenantId(String tenantId) {
-         this.tenantId = tenantId;
-         return self();
-      }
-
-      public Reference build() {
-         return new Reference(id, tenantId);
-      }
-
-      public T fromReference(Reference in) {
-         return this.id(in.getId()).tenantId(in.getTenantId());
-      }
-   }
-
-   private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
-      @Override
-      protected ConcreteBuilder self() {
-         return this;
-      }
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/ReferenceWithName.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/ReferenceWithName.java
deleted file mode 100644
index 28db0be..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/ReferenceWithName.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.domain;
-
-import com.google.common.base.Objects;
-import com.google.common.base.Objects.ToStringHelper;
-import com.google.common.base.Strings;
-
-import java.beans.ConstructorProperties;
-
-/**
- * Base class for beans in the Neutron v2.0 api
- *
- * @see <a href="http://docs.openstack.org/api/openstack-network/2.0/content/Networks.html">api doc</a>
- */
-public class ReferenceWithName extends Reference {
-
-   private final String name;
-
-   @ConstructorProperties({
-      "id", "tenant_id", "name"
-   })
-   protected ReferenceWithName(String id, String tenantId, String name) {
-      super(id, tenantId);
-      this.name = Strings.nullToEmpty(name);
-   }
-
-   /**
-    * @return the name of the entity
-    */
-   public String getName() {
-      return name;
-   }
-
-   @Override
-   public int hashCode() {
-      return Objects.hashCode(super.hashCode(), name);
-   }
-
-   @Override
-   public boolean equals(Object obj) {
-      if (this == obj) return true;
-      if (obj == null || getClass() != obj.getClass()) return false;
-      ReferenceWithName that = ReferenceWithName.class.cast(obj);
-      return super.equals(obj) && Objects.equal(this.name, that.name);
-   }
-
-   protected ToStringHelper string() {
-      return super.string().add("name", name);
-   }
-
-   @Override
-   public String toString() {
-      return string().toString();
-   }
-
-   public static Builder<?> builder() {
-      return new ConcreteBuilder();
-   }
-
-   public Builder<?> toBuilder() {
-      return new ConcreteBuilder().fromReferenceWithName(this);
-   }
-
-   public abstract static class Builder<T extends Builder<T>> extends Reference.Builder<T> {
-      protected abstract T self();
-
-      protected String name;
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.ReferenceWithName#getName()
-       */
-      public T name(String name) {
-         this.name = name;
-         return self();
-      }
-
-      public ReferenceWithName build() {
-         return new ReferenceWithName(id, tenantId, name);
-      }
-
-      public T fromReferenceWithName(ReferenceWithName in) {
-         return super.fromReference(in).name(in.getName());
-      }
-   }
-
-   private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
-      @Override
-      protected ConcreteBuilder self() {
-         return this;
-      }
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/Router.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/Router.java
deleted file mode 100644
index 5096ed9..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/Router.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.domain;
-
-import com.google.common.base.Objects;
-
-import java.beans.ConstructorProperties;
-
-/**
- * A Neutron Router
- *
- * @see <a href="http://docs.openstack.org/api/openstack-network/2.0/content/router_ext_concepts.html">api doc</a>
- */
-public class Router extends ReferenceWithName {
-
-   private final Boolean adminStateUp;
-   private final State state;
-   private final ExternalGatewayInfo externalGatewayInfo;
-
-   @ConstructorProperties({
-      "id", "tenant_id", "name", "admin_state_up", "status", "external_gateway_info"
-   })
-   protected Router(String id, String tenantId, String name, Boolean adminStateUp, State state, ExternalGatewayInfo externalGatewayInfo) {
-      super(id, tenantId, name);
-      this.adminStateUp = adminStateUp;
-      this.state = state;
-      this.externalGatewayInfo = externalGatewayInfo;
-   }
-
-   /**
-    * @return the administrative state of the router
-    */
-   public Boolean getAdminStateUp() {
-      return adminStateUp;
-   }
-
-   /**
-    * @return the current state of the router
-    */
-   public State getState() {
-      return state;
-   }
-
-   /**
-    * @return the information on external gateway for the router
-    */
-   public ExternalGatewayInfo getExternalGatewayInfo() {
-      return externalGatewayInfo;
-   }
-
-   @Override
-   public int hashCode() {
-      return Objects.hashCode(super.hashCode(), adminStateUp, state, externalGatewayInfo);
-   }
-
-   @Override
-   public boolean equals(Object obj) {
-      if (this == obj) return true;
-      if (obj == null || getClass() != obj.getClass()) return false;
-      Router that = Router.class.cast(obj);
-      return super.equals(obj)
-         && Objects.equal(this.adminStateUp, that.adminStateUp)
-         && Objects.equal(this.state, that.state)
-         && Objects.equal(this.externalGatewayInfo, that.externalGatewayInfo);
-   }
-
-   protected Objects.ToStringHelper string() {
-      return super.string()
-         .add("adminStateUp", adminStateUp).add("state", state).add("externalGatewayInfo", externalGatewayInfo != null ? externalGatewayInfo.toString() : "");
-   }
-
-   @Override
-   public String toString() {
-      return string().toString();
-   }
-
-   public static Builder<?> builder() {
-      return new ConcreteBuilder();
-   }
-
-   public Builder<?> toBuilder() {
-      return new ConcreteBuilder().fromRouter(this);
-   }
-
-   public abstract static class Builder<T extends Builder<T>> extends ReferenceWithName.Builder<T> {
-
-      protected Boolean adminStateUp;
-      protected State state;
-      protected ExternalGatewayInfo externalGatewayInfo;
-
-      /**
-       * @see Router#getAdminStateUp()
-       */
-      public T adminStateUp(Boolean adminStateUp) {
-         this.adminStateUp = adminStateUp;
-         return self();
-      }
-
-      /**
-       * @see Router#getState()
-       */
-      public T state(State state) {
-         this.state = state;
-         return self();
-      }
-
-      /**
-       * @see Router#getExternalGatewayInfo()
-       */
-      public T externalGatewayInfo(ExternalGatewayInfo externalGatewayInfo) {
-         this.externalGatewayInfo = externalGatewayInfo;
-         return self();
-      }
-
-      public Router build() {
-         return new Router(id, tenantId, name, adminStateUp, state, externalGatewayInfo);
-      }
-
-      public T fromRouter(Router in) {
-         return super.fromReference(in)
-            .adminStateUp(in.getAdminStateUp())
-            .state(in.getState())
-            .externalGatewayInfo(in.getExternalGatewayInfo());
-      }
-   }
-
-   private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
-      @Override
-      protected ConcreteBuilder self() {
-         return this;
-      }
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/RouterInterface.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/RouterInterface.java
deleted file mode 100644
index f1a9c70..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/RouterInterface.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.domain;
-
-import com.google.common.base.Objects;
-
-import java.beans.ConstructorProperties;
-
-/**
- * A Neutron Router Interface
- *
- * @see <a href="http://docs.openstack.org/api/openstack-network/2.0/content/router_add_interface.html">api doc</a>
- */
-public class RouterInterface {
-
-   private final String subnetId;
-   private final String portId;
-
-   @ConstructorProperties({
-      "subnet_id", "port_id"
-   })
-   protected RouterInterface(String subnetId, String portId) {
-      this.subnetId = subnetId;
-      this.portId = portId;
-   }
-
-   /**
-    * @return the id of the subnet this router interface is associated with
-    */
-   public String getSubnetId() {
-      return subnetId;
-   }
-
-   /**
-    * @return the id of the port this router interface is associated with
-    */
-   public String getPortId() {
-      return portId;
-   }
-
-   @Override
-   public int hashCode() {
-      return Objects.hashCode(subnetId, portId);
-   }
-
-   @Override
-   public boolean equals(Object obj) {
-      if (this == obj) return true;
-      if (obj == null || getClass() != obj.getClass()) return false;
-      RouterInterface that = RouterInterface.class.cast(obj);
-      return Objects.equal(this.subnetId, that.subnetId) && Objects.equal(this.portId, that.portId);
-   }
-
-   protected Objects.ToStringHelper string() {
-      return Objects.toStringHelper(this)
-         .add("subnetId", subnetId).add("portId", portId);
-   }
-
-   @Override
-   public String toString() {
-      return string().toString();
-   }
-
-   public static Builder builder() {
-      return new ConcreteBuilder();
-   }
-
-   public Builder toBuilder() {
-      return new ConcreteBuilder().fromRouterInterface(this);
-   }
-
-   public abstract static class Builder {
-      protected abstract Builder self();
-
-      protected String subnetId;
-      protected String portId;
-
-      /**
-       * @see RouterInterface#getSubnetId()
-       */
-      public Builder subnetId(String subnetId) {
-         this.subnetId = subnetId;
-         return self();
-      }
-
-      /**
-       * @see RouterInterface#getPortId()
-       */
-      public Builder portId(String portId) {
-         this.portId = portId;
-         return self();
-      }
-
-      public RouterInterface build() {
-         return new RouterInterface(subnetId, portId);
-      }
-
-      public Builder fromRouterInterface(RouterInterface in) {
-         return this.subnetId(in.getSubnetId()).portId(in.getPortId());
-      }
-   }
-
-   private static class ConcreteBuilder extends Builder {
-      @Override
-      protected ConcreteBuilder self() {
-         return this;
-      }
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/State.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/State.java
deleted file mode 100644
index e276df8..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/State.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.domain;
-
-/**
- * The possible state of an entity
- *
- * @see <a href="http://docs.openstack.org/api/openstack-network/2.0/content/Concepts-d1e369.html">api doc</a>
- */
-public enum State {
-   ACTIVE, DOWN, BUILD, ERROR
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/Subnet.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/Subnet.java
deleted file mode 100644
index 9faf8bd..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/domain/Subnet.java
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.domain;
-
-import com.google.common.base.Objects;
-import com.google.common.base.Objects.ToStringHelper;
-import com.google.common.collect.ImmutableSet;
-
-import java.beans.ConstructorProperties;
-import java.util.Collection;
-import java.util.Set;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * A Neutron subnet
- *
- * @see <a href="http://docs.openstack.org/api/openstack-network/2.0/content/Subnets.html">api doc</a>
- */
-public class Subnet extends ReferenceWithName {
-
-   private final String networkId;
-   private final String gatewayIp;
-   private final Integer ipVersion;
-   private final String cidr;
-   private final Set<AllocationPool> allocationPools;
-   private final Boolean enableDhcp;
-   private final Set<String> dnsNameServers;
-   private final Set<HostRoute> hostRoutes;
-
-   @ConstructorProperties({
-      "id", "tenant_id", "name", "network_id", "gateway_ip", "ip_version", "cidr", "allocation_pools", "enable_dhcp", "dns_nameservers", "host_routes"
-   })
-   protected Subnet(String id, String tenantId, String name, String networkId,
-                    String gatewayIp, Integer ipVersion, String cidr, Set<AllocationPool> allocationPools,
-                    Boolean enableDhcp, Set<String> dnsNameServers, Set<HostRoute> hostRoutes) {
-      super(id, tenantId, name);
-      this.networkId = checkNotNull(networkId, "networkId");
-      this.gatewayIp = gatewayIp;
-      this.ipVersion = checkNotNull(ipVersion, "ipVersion");
-      this.cidr = checkNotNull(cidr, "cidr");
-      this.allocationPools = allocationPools != null ? ImmutableSet.copyOf(allocationPools) : ImmutableSet.<AllocationPool>of();
-      this.enableDhcp = enableDhcp;
-      this.dnsNameServers = dnsNameServers != null ? ImmutableSet.copyOf(dnsNameServers) : ImmutableSet.<String>of();
-      this.hostRoutes = hostRoutes != null ? ImmutableSet.copyOf(hostRoutes) : ImmutableSet.<HostRoute>of();
-   }
-
-   /**
-    * @return the id of the network this subnet is associated with
-    */
-   public String getNetworkId() {
-      return networkId;
-   }
-
-   /**
-    * @return the default gateway used by devices in this subnet
-    */
-   public String getGatewayIp() {
-      return gatewayIp;
-   }
-
-   /**
-    * @return the ip version used by this subnet
-    */
-   public Integer getIpVersion() {
-      return ipVersion;
-   }
-
-   /**
-    * @return the cidr representing the IP range for this subnet, based on IP version
-    */
-   public String getCidr() {
-      return cidr;
-   }
-
-   /**
-    * @return the sub-ranges of cidr available for dynamic allocation to ports
-    */
-   public Set<AllocationPool> getAllocationPools() {
-      return allocationPools;
-   }
-
-   /**
-    * @return true if DHCP is enabled for this subnet, false if not.
-    */
-   public Boolean getEnableDhcp() {
-      return enableDhcp;
-   }
-
-   /**
-    * @return the set of DNS name servers used by hosts in this subnet.
-    */
-   public Set<String> getDnsNameServers() {
-      return dnsNameServers;
-   }
-
-   /**
-    * @return the set of routes that should be used by devices with IPs from this subnet
-    */
-   public Set<HostRoute> getHostRoutes() {
-      return hostRoutes;
-   }
-
-   @Override
-   public int hashCode() {
-      return Objects.hashCode(super.hashCode(), networkId, gatewayIp, ipVersion, cidr,
-         allocationPools, enableDhcp, dnsNameServers, hostRoutes);
-   }
-
-   @Override
-   public boolean equals(Object obj) {
-      if (this == obj) return true;
-      if (obj == null || getClass() != obj.getClass()) return false;
-      Subnet that = Subnet.class.cast(obj);
-      return super.equals(obj)
-         && Objects.equal(this.networkId, that.networkId)
-         && Objects.equal(this.gatewayIp, that.gatewayIp)
-         && Objects.equal(this.ipVersion, that.ipVersion)
-         && Objects.equal(this.cidr, that.cidr)
-         && Objects.equal(this.allocationPools, that.allocationPools)
-         && Objects.equal(this.enableDhcp, that.enableDhcp)
-         && Objects.equal(this.dnsNameServers, that.dnsNameServers)
-         && Objects.equal(this.hostRoutes, that.hostRoutes);
-   }
-
-   protected ToStringHelper string() {
-      return super.string()
-         .add("networkId", networkId)
-         .add("gatewayIp", gatewayIp)
-         .add("ipVersion", ipVersion)
-         .add("cidr", cidr)
-         .add("enableDHCP", enableDhcp)
-         .add("allocationPools", allocationPools)
-         .add("dnsNameServers", dnsNameServers)
-         .add("hostRoutes", hostRoutes);
-   }
-
-   @Override
-   public String toString() {
-      return string().toString();
-   }
-
-   public static Builder<?> builder() {
-      return new ConcreteBuilder();
-   }
-
-   public Builder<?> toBuilder() {
-      return new ConcreteBuilder().fromSubnet(this);
-   }
-
-   public abstract static class Builder<T extends Builder<T>> extends ReferenceWithName.Builder<T> {
-      protected String networkId;
-      protected String gatewayIp;
-      protected Integer ipVersion;
-      protected String cidr;
-      protected Set<AllocationPool> allocationPools;
-      protected Boolean enableDhcp;
-      protected Set<String> dnsNameServers;
-      protected Set<HostRoute> hostRoutes;
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.Subnet#getNetworkId()
-       */
-      public T networkId(String networkId) {
-         this.networkId = networkId;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.Subnet#getGatewayIp()
-       */
-      public T gatewayIp(String gatewayIp) {
-         this.gatewayIp = gatewayIp;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.Subnet#getIpVersion()
-       */
-      public T ipVersion(Integer ipVersion) {
-         this.ipVersion = ipVersion;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.Subnet#getCidr()
-       */
-      public T cidr(String cidr) {
-         this.cidr = cidr;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.Subnet#getAllocationPools()
-       */
-      public T allocationPools(Collection<AllocationPool> allocationPools) {
-         this.allocationPools = ImmutableSet.copyOf(allocationPools);
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.Subnet#getEnableDhcp()
-       */
-      public T enableDhcp(Boolean enableDhcp) {
-         this.enableDhcp = enableDhcp;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.Subnet#getDnsNameServers()
-       */
-      public T dnsNameServers(Collection<String> dnsNameServers) {
-         this.dnsNameServers = ImmutableSet.copyOf(dnsNameServers);
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.domain.Subnet#getHostRoutes()
-       */
-      public T hostRoutes(Collection<HostRoute> hostRoutes) {
-         this.hostRoutes = ImmutableSet.copyOf(hostRoutes);
-         return self();
-      }
-
-      public Subnet build() {
-         return new Subnet(id, tenantId, name, networkId, gatewayIp, ipVersion, cidr, allocationPools, enableDhcp, dnsNameServers, hostRoutes);
-      }
-
-      public T fromSubnet(Subnet in) {
-         return super.fromReference(in)
-               .networkId(in.getNetworkId())
-               .gatewayIp(in.getGatewayIp())
-               .ipVersion(in.getIpVersion())
-               .cidr(in.getCidr())
-               .allocationPools(in.getAllocationPools())
-               .enableDhcp(in.getEnableDhcp())
-               .dnsNameServers(in.getDnsNameServers())
-               .hostRoutes(in.getHostRoutes());
-      }
-   }
-
-   private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
-      @Override
-      protected ConcreteBuilder self() {
-         return this;
-      }
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/extensions/RouterApi.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/extensions/RouterApi.java
deleted file mode 100644
index 3da0e34..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/extensions/RouterApi.java
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.extensions;
-
-import javax.inject.Named;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.core.MediaType;
-
-import org.jclouds.Fallbacks;
-import org.jclouds.collect.PagedIterable;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.openstack.keystone.v2_0.KeystoneFallbacks.EmptyPaginatedCollectionOnNotFoundOr404;
-import org.jclouds.openstack.keystone.v2_0.filters.AuthenticateRequest;
-import org.jclouds.openstack.neutron.v2_0.domain.ReferenceWithName;
-import org.jclouds.openstack.neutron.v2_0.domain.Router;
-import org.jclouds.openstack.neutron.v2_0.domain.RouterInterface;
-import org.jclouds.openstack.neutron.v2_0.functions.ParseRouterDetails;
-import org.jclouds.openstack.neutron.v2_0.functions.ParseRouters;
-import org.jclouds.openstack.neutron.v2_0.options.CreateRouterOptions;
-import org.jclouds.openstack.neutron.v2_0.options.EmptyOptions;
-import org.jclouds.openstack.neutron.v2_0.options.UpdateRouterOptions;
-import org.jclouds.openstack.v2_0.options.PaginationOptions;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.MapBinder;
-import org.jclouds.rest.annotations.PayloadParam;
-import org.jclouds.rest.annotations.QueryParams;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.annotations.ResponseParser;
-import org.jclouds.rest.annotations.SelectJson;
-import org.jclouds.rest.annotations.Transform;
-
-/**
- * Provides access to Router operations for the OpenStack Networking (Neutron) v2 API.
- * <p/>
- * A logical entity for forwarding packets across internal subnets and NATting them on external
- * networks through an appropriate external gateway.
- *
- * @deprecated Please use {@link org.jclouds.openstack.neutron.v2.extensions.RouterApi} instead.
- *             To be removed in jclouds 2.0.
- */
-@Deprecated
-@Path("/v2.0/routers")
-@RequestFilters(AuthenticateRequest.class)
-@Consumes(MediaType.APPLICATION_JSON)
-public interface RouterApi {
-
-   /**
-    * Returns the list of all routers currently defined in Neutron for the current tenant. The list provides the unique
-    * identifier of each router configured for the tenant
-    *
-    * @return the list of all router references configured for the tenant.
-    */
-   @Named("router:list")
-   @GET
-   @ResponseParser(ParseRouters.class)
-   @Transform(ParseRouters.ToPagedIterable.class)
-   @Fallback(Fallbacks.EmptyPagedIterableOnNotFoundOr404.class)
-   @QueryParams(keys = {"fields", "fields", "fields"}, values = {"id", "tenant_id", "name"})
-   PagedIterable<? extends ReferenceWithName> list();
-
-   /**
-    * @see <a href="http://docs.openstack.org/api/openstack-network/2.0/content/pagination.html">api doc</a>
-    */
-   @Named("router:list")
-   @GET
-   @ResponseParser(ParseRouters.class)
-   @Fallback(EmptyPaginatedCollectionOnNotFoundOr404.class)
-   @QueryParams(keys = {"fields", "fields", "fields"}, values = {"id", "tenant_id", "name"})
-   PagedIterable<? extends ReferenceWithName> list(PaginationOptions options);
-
-   /**
-    * Returns all routers currently defined in Neutron for the current tenant.
-    *
-    * @return the list of all routers configured for the tenant
-    */
-   @Named("router:list")
-   @GET
-   @ResponseParser(ParseRouterDetails.class)
-   @Transform(ParseRouterDetails.ToPagedIterable.class)
-   @Fallback(Fallbacks.EmptyPagedIterableOnNotFoundOr404.class)
-   PagedIterable<? extends Router> listInDetail();
-
-   /**
-    * @see <a href="http://docs.openstack.org/api/openstack-network/2.0/content/pagination.html">api doc</a>
-    */
-   @Named("router:list")
-   @GET
-   @ResponseParser(ParseRouterDetails.class)
-   @Fallback(EmptyPaginatedCollectionOnNotFoundOr404.class)
-   PagedIterable<? extends Router> listInDetail(PaginationOptions options);
-
-   /**
-    * Returns the specific router.
-    *
-    * @param id the id of the router to return
-    * @return Router or null if not found
-    */
-   @Named("router:get")
-   @GET
-   @Path("/{id}")
-   @SelectJson("router")
-   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
-   @Nullable
-   Router get(@PathParam("id") String id);
-
-   /**
-    * Create a new router
-    *
-    * @param options optional arguments
-    * @return the newly created router
-    */
-   @Named("router:create")
-   @POST
-   @SelectJson("router")
-   @MapBinder(CreateRouterOptions.class)
-   Router create(CreateRouterOptions... options);
-
-   /**
-    * Update a router
-    *
-    * @param id the id of the router to update
-    * @param options the attributes to update
-    * @return true if update successful, false if not
-    */
-   @Named("router:update")
-   @PUT
-   @Path("/{id}")
-   @MapBinder(UpdateRouterOptions.class)
-   @Fallback(Fallbacks.FalseOnNotFoundOr404.class)
-   boolean update(@PathParam("id") String id, UpdateRouterOptions... options);
-
-   /**
-    * Deletes the specified router
-    *
-    * @param id the id of the router to delete
-    * @return true if delete successful, false if not
-    */
-   @Named("router:delete")
-   @DELETE
-   @Path("/{id}")
-   @Fallback(Fallbacks.FalseOnNotFoundOr404.class)
-   boolean delete(@PathParam("id") String id);
-
-   /**
-    * Add a interface to a router to connect to the specified subnet
-    *
-    * @param routerId the id of the router to create the interface at
-    * @param subnetId the id of the subnet to connect with the interface
-    * @return the newly-created router interface
-    */
-   @Named("router:addInterfaceForSubnet")
-   @PUT
-   @Path("/{id}/add_router_interface")
-   @MapBinder(EmptyOptions.class)
-   RouterInterface addInterfaceForSubnet(@PathParam("id") String routerId, @PayloadParam("subnet_id") String subnetId);
-
-   /**
-    * Add a interface to a router to connect to the specified port
-    *
-    * @param routerId the id of the router to create the interface at
-    * @param portId the id of the port to connect with the interface
-    * @return the newly-created router interface
-    */
-   @Named("router:addInterfaceForPort")
-   @PUT
-   @Path("{id}/add_router_interface")
-   @MapBinder(EmptyOptions.class)
-   RouterInterface addInterfaceForPort(@PathParam("id") String routerId, @PayloadParam("port_id") String portId);
-
-   /**
-    * Remove the interface where the specified subnet is connected to
-    *
-    * @param routerId the id of the router to remove the interface from
-    * @param subnetId the id of the subnet to disconnect from the interface
-    */
-   @Named("router:removeInterfaceForSubnet")
-   @PUT
-   @Path("/{id}/remove_router_interface")
-   @MapBinder(EmptyOptions.class)
-   boolean removeInterfaceForSubnet(@PathParam("id") String routerId, @PayloadParam("subnet_id") String subnetId);
-
-   /**
-    * Remove the interface where the specified port is connected to
-    *
-    * @param routerId the id of the router to remove the interface from
-    * @param portId the id of the port to disconnect from the interface
-    */
-   @Named("router:removeInterfaceForPort")
-   @PUT
-   @Path("{id}/remove_router_interface")
-   @MapBinder(EmptyOptions.class)
-   boolean removeInterfaceForPort(@PathParam("id") String routerId, @PayloadParam("port_id") String portId);
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/features/NetworkApi.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/features/NetworkApi.java
deleted file mode 100644
index dc7b005..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/features/NetworkApi.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.features;
-
-import com.google.common.collect.FluentIterable;
-import org.jclouds.Fallbacks;
-import org.jclouds.collect.PagedIterable;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.openstack.keystone.v2_0.filters.AuthenticateRequest;
-import org.jclouds.openstack.neutron.v2_0.domain.Network;
-import org.jclouds.openstack.neutron.v2_0.domain.ReferenceWithName;
-import org.jclouds.openstack.neutron.v2_0.functions.ParseNetworkDetails;
-import org.jclouds.openstack.neutron.v2_0.functions.ParseNetworks;
-import org.jclouds.openstack.neutron.v2_0.options.CreateNetworkBulkOptions;
-import org.jclouds.openstack.neutron.v2_0.options.CreateNetworkOptions;
-import org.jclouds.openstack.neutron.v2_0.options.UpdateNetworkOptions;
-import org.jclouds.openstack.v2_0.options.PaginationOptions;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.MapBinder;
-import org.jclouds.rest.annotations.QueryParams;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.annotations.ResponseParser;
-import org.jclouds.rest.annotations.SelectJson;
-import org.jclouds.rest.annotations.Transform;
-
-import javax.inject.Named;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.core.MediaType;
-
-import static org.jclouds.Fallbacks.EmptyPagedIterableOnNotFoundOr404;
-import static org.jclouds.openstack.keystone.v2_0.KeystoneFallbacks.EmptyPaginatedCollectionOnNotFoundOr404;
-
-/**
- * Provides access to Network operations for the OpenStack Networking (Neutron) v2 API.
- * <p/>
- * Each tenant can define one or more networks. A network is a virtual isolated layer-2 broadcast domain reserved to the
- * tenant. A tenant can create several ports for a network, and plug virtual interfaces into these ports.
- *
- * @see <a href=
- *      "http://docs.openstack.org/api/openstack-network/2.0/content/Networks.html">api doc</a>
- * @deprecated Please use {@link org.jclouds.openstack.neutron.v2.features.NetworkApi} instead.
- *             To be removed in jclouds 2.0.
- */
-@Deprecated
-@Path("/v2.0/networks")
-@RequestFilters(AuthenticateRequest.class)
-@Consumes(MediaType.APPLICATION_JSON)
-public interface NetworkApi {
-
-   /**
-    * Returns the list of all networks currently defined in Neutron for the current tenant. The list provides the unique
-    * identifier of each network configured for the tenant.
-    *
-    * @return the list of all network references configured for the tenant
-    */
-   @Named("network:list")
-   @GET
-   @ResponseParser(ParseNetworks.class)
-   @Transform(ParseNetworks.ToPagedIterable.class)
-   @Fallback(EmptyPagedIterableOnNotFoundOr404.class)
-   @QueryParams(keys = {"fields", "fields", "fields"}, values = {"id", "tenant_id", "name"})
-   PagedIterable<? extends ReferenceWithName> list();
-
-   /**
-    * @see <a href="http://docs.openstack.org/api/openstack-network/2.0/content/pagination.html">api doc</a>
-    */
-   @Named("network:list")
-   @GET
-   @ResponseParser(ParseNetworks.class)
-   @Fallback(EmptyPaginatedCollectionOnNotFoundOr404.class)
-   @QueryParams(keys = {"fields", "fields", "fields"}, values = {"id", "tenant_id", "name"})
-   PagedIterable<? extends ReferenceWithName> list(PaginationOptions options);
-
-   /**
-    * Returns all networks currently defined in Neutron for the current tenant.
-    *
-    * @return the list of all networks configured for the tenant
-    */
-   @Named("network:list")
-   @GET
-   @ResponseParser(ParseNetworkDetails.class)
-   @Transform(ParseNetworkDetails.ToPagedIterable.class)
-   @Fallback(EmptyPagedIterableOnNotFoundOr404.class)
-   PagedIterable<? extends Network> listInDetail();
-
-   /**
-    * @see <a href="http://docs.openstack.org/api/openstack-network/2.0/content/pagination.html">api doc</a>
-    */
-   @Named("network:list")
-   @GET
-   @ResponseParser(ParseNetworkDetails.class)
-   @Fallback(EmptyPaginatedCollectionOnNotFoundOr404.class)
-   PagedIterable<? extends Network> listInDetail(PaginationOptions options);
-
-   /**
-    * Return a specific network
-    *
-    * @param id the id of the network to return
-    * @return Network or null if not found
-    */
-   @Named("network:get")
-   @GET
-   @Path("/{id}")
-   @SelectJson("network")
-   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
-   @Nullable
-   Network get(@PathParam("id") String id);
-
-   /**
-    * Create a new network with the specified type
-    *
-    * @param options optional arguments
-    * @return a reference of the newly-created network
-    */
-   @Named("network:create")
-   @POST
-   @SelectJson("network")
-   @MapBinder(CreateNetworkOptions.class)
-   Network create(CreateNetworkOptions... options);
-
-   /**
-    * Create multiple networks
-    *
-    * @param networks the bulk of networks to create
-    * @return list of references of the newly-created networks
-    */
-   @Named("network:createBulk")
-   @POST
-   @SelectJson("networks")
-   @MapBinder(CreateNetworkBulkOptions.class)
-   FluentIterable<? extends Network> createBulk(CreateNetworkBulkOptions networks);
-
-   /**
-    * Update a network
-    *
-    * @param id the id of the network to update
-    * @param options the attributes to update
-    * @return true if update successful, false if not
-    */
-   @Named("network:update")
-   @PUT
-   @Path("/{id}")
-   @MapBinder(UpdateNetworkOptions.class)
-   @Fallback(Fallbacks.FalseOnNotFoundOr404.class)
-   boolean update(@PathParam("id") String id, UpdateNetworkOptions... options);
-
-   /**
-    * Deletes the specified network
-    *
-    * @param id the id of the network to delete
-    * @return true if delete was successful, false if not
-    */
-   @Named("network:delete")
-   @DELETE
-   @Path("/{id}")
-   @Fallback(Fallbacks.FalseOnNotFoundOr404.class)
-   boolean delete(@PathParam("id") String id);
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/features/PortApi.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/features/PortApi.java
deleted file mode 100644
index 4aef5cd..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/features/PortApi.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.features;
-
-import com.google.common.collect.FluentIterable;
-import org.jclouds.Fallbacks;
-import org.jclouds.collect.PagedIterable;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.openstack.keystone.v2_0.filters.AuthenticateRequest;
-import org.jclouds.openstack.neutron.v2_0.domain.Port;
-import org.jclouds.openstack.neutron.v2_0.domain.ReferenceWithName;
-import org.jclouds.openstack.neutron.v2_0.functions.ParsePortDetails;
-import org.jclouds.openstack.neutron.v2_0.functions.ParsePorts;
-import org.jclouds.openstack.neutron.v2_0.options.CreatePortBulkOptions;
-import org.jclouds.openstack.neutron.v2_0.options.CreatePortOptions;
-import org.jclouds.openstack.neutron.v2_0.options.UpdatePortOptions;
-import org.jclouds.openstack.v2_0.options.PaginationOptions;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.MapBinder;
-import org.jclouds.rest.annotations.PayloadParam;
-import org.jclouds.rest.annotations.QueryParams;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.annotations.ResponseParser;
-import org.jclouds.rest.annotations.SelectJson;
-import org.jclouds.rest.annotations.Transform;
-
-
-import javax.inject.Named;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.core.MediaType;
-
-import static org.jclouds.Fallbacks.EmptyPagedIterableOnNotFoundOr404;
-import static org.jclouds.openstack.keystone.v2_0.KeystoneFallbacks.EmptyPaginatedCollectionOnNotFoundOr404;
-
-/**
- * Provides access to Port operations for the OpenStack Networking (Neutron) v2 API.
- * <p/>
- * A port represents a virtual switch port on a logical network switch where all the interfaces attached to a given network are connected.
- * <p/>
- * A port has an administrative state which is either 'DOWN' or 'ACTIVE'. Ports which are administratively down will not be able to receive/send traffic.
-
- * @see <a href=
- *      "http://docs.openstack.org/api/openstack-network/2.0/content/Ports.html">api doc</a>
- * @deprecated Please use {@link org.jclouds.openstack.neutron.v2.features.PortApi} instead.
- *             To be removed in jclouds 2.0.
- */
-@Deprecated
-@Path("/v2.0/ports")
-@RequestFilters(AuthenticateRequest.class)
-@Consumes(MediaType.APPLICATION_JSON)
-public interface PortApi {
-
-   /**
-    * Returns the list of all ports currently defined in Neutron for the current tenant. The list provides the unique
-    * identifier of each network configured for the tenant.
-    *
-    * @return the list of all port references configured for the tenant
-    */
-   @Named("port:list")
-   @GET
-   @ResponseParser(ParsePorts.class)
-   @Transform(ParsePorts.ToPagedIterable.class)
-   @Fallback(EmptyPagedIterableOnNotFoundOr404.class)
-   @QueryParams(keys = {"fields", "fields", "fields"}, values = {"id", "tenant_id", "name"})
-   PagedIterable<? extends ReferenceWithName> list();
-
-   /**
-    * @see <a href="http://docs.openstack.org/api/openstack-network/2.0/content/pagination.html">api doc</a>
-    */
-   @Named("port:list")
-   @GET
-   @ResponseParser(ParsePorts.class)
-   @Fallback(EmptyPaginatedCollectionOnNotFoundOr404.class)
-   @QueryParams(keys = {"fields", "fields", "fields"}, values = {"id", "tenant_id", "name"})
-   PagedIterable<? extends ReferenceWithName> list(PaginationOptions options);
-
-   /**
-    * Returns the set of ports currently defined in Neutron for the requested network.
-    *
-    * @return the list of all ports configured for the tenant
-    */
-   @Named("port:list")
-   @GET
-   @ResponseParser(ParsePortDetails.class)
-   @Transform(ParsePortDetails.ToPagedIterable.class)
-   @Fallback(EmptyPagedIterableOnNotFoundOr404.class)
-   PagedIterable<? extends Port> listInDetail();
-
-   /**
-    * @see <a href="http://docs.openstack.org/api/openstack-network/2.0/content/pagination.html">api doc</a>
-    */
-   @Named("port:list")
-   @GET
-   @ResponseParser(ParsePortDetails.class)
-   @Fallback(EmptyPaginatedCollectionOnNotFoundOr404.class)
-   PagedIterable<? extends Port> listInDetail(PaginationOptions options);
-
-   /**
-    * Returns the specific port
-    *
-    * @param id the id of the port to return
-    * @return Port or null if not found
-    */
-   @Named("port:get")
-   @GET
-   @Path("/{id}")
-   @SelectJson("port")
-   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
-   @Nullable
-   Port get(@PathParam("id") String id);
-
-   /**
-    * Create a new port in the specified network
-    *
-    * @param networkId the id of the network to associate this port with
-    * @param options optional arguments
-    * @return a reference of the newly-created port
-    */
-   @Named("port:create")
-   @POST
-   @SelectJson("port")
-   @MapBinder(CreatePortOptions.class)
-   Port create(@PayloadParam("network_id") String networkId, CreatePortOptions... options);
-
-   /**
-    * Create multiple ports
-    *
-    * @param ports the bulk of ports to create
-    * @return list of references of the newly-created ports
-    */
-   @Named("port:createBulk")
-   @POST
-   @SelectJson("ports")
-   @MapBinder(CreatePortBulkOptions.class)
-   FluentIterable<? extends Port> createBulk(CreatePortBulkOptions ports);
-
-   /**
-    * Update a port
-    *
-    * @param id the id of the port to update
-    * @param options the attributes to update
-    * @return true if update successful, false if not
-    */
-   @Named("port:update")
-   @PUT
-   @Path("/{id}")
-   @MapBinder(UpdatePortOptions.class)
-   @Fallback(Fallbacks.FalseOnNotFoundOr404.class)
-   boolean update(@PathParam("id") String id, UpdatePortOptions... options);
-
-   /**
-    * Delete a port
-    *
-    * @param id the id of the port to delete
-    * @return true if delete successful, false if not
-    */
-   @Named("port:delete")
-   @DELETE
-   @Path("/{id}")
-   @Fallback(Fallbacks.FalseOnNotFoundOr404.class)
-   boolean delete(@PathParam("id") String id);
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/features/SubnetApi.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/features/SubnetApi.java
deleted file mode 100644
index 24ce4b3..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/features/SubnetApi.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.features;
-
-import com.google.common.collect.FluentIterable;
-import org.jclouds.Fallbacks;
-import org.jclouds.collect.PagedIterable;
-import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.openstack.keystone.v2_0.filters.AuthenticateRequest;
-import org.jclouds.openstack.neutron.v2_0.domain.ReferenceWithName;
-import org.jclouds.openstack.neutron.v2_0.domain.Subnet;
-import org.jclouds.openstack.neutron.v2_0.functions.ParseSubnetDetails;
-import org.jclouds.openstack.neutron.v2_0.functions.ParseSubnets;
-import org.jclouds.openstack.neutron.v2_0.options.CreateSubnetBulkOptions;
-import org.jclouds.openstack.neutron.v2_0.options.CreateSubnetOptions;
-import org.jclouds.openstack.neutron.v2_0.options.UpdateSubnetOptions;
-import org.jclouds.openstack.v2_0.options.PaginationOptions;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.MapBinder;
-import org.jclouds.rest.annotations.PayloadParam;
-import org.jclouds.rest.annotations.QueryParams;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.annotations.ResponseParser;
-import org.jclouds.rest.annotations.SelectJson;
-import org.jclouds.rest.annotations.Transform;
-
-import javax.inject.Named;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.core.MediaType;
-
-import static org.jclouds.Fallbacks.EmptyPagedIterableOnNotFoundOr404;
-import static org.jclouds.openstack.keystone.v2_0.KeystoneFallbacks.EmptyPaginatedCollectionOnNotFoundOr404;
-
-/**
- * Provides access to Subnet operations for the OpenStack Networking (Neutron) v2 API.
- *
-
- * @see <a href=
- *      "http://docs.openstack.org/api/openstack-network/2.0/content/Subnets.html">api doc</a>
- * @deprecated Please use {@link org.jclouds.openstack.neutron.v2.features.SubnetApi} instead.
- *             To be removed in jclouds 2.0.
- */
-@Deprecated
-@Path("/v2.0/subnets")
-@RequestFilters(AuthenticateRequest.class)
-@Consumes(MediaType.APPLICATION_JSON)
-public interface SubnetApi {
-
-   /**
-    * Returns the list of all subnets currently defined in Neutron for the current tenant. The list provides the unique
-    * identifier of each subnet configured for the tenant.
-    *
-    * @return the list of all subnet references configured for the tenant
-    */
-   @Named("subnet:list")
-   @GET
-   @ResponseParser(ParseSubnets.class)
-   @Transform(ParseSubnets.ToPagedIterable.class)
-   @Fallback(EmptyPagedIterableOnNotFoundOr404.class)
-   @QueryParams(keys = {"fields", "fields", "fields"}, values = {"id", "tenant_id", "name"})
-   PagedIterable<? extends ReferenceWithName> list();
-
-   /**
-    * @see <a href="http://docs.openstack.org/api/openstack-network/2.0/content/pagination.html">api doc</a>
-    */
-   @Named("subnet:list")
-   @GET
-   @ResponseParser(ParseSubnets.class)
-   @Fallback(EmptyPaginatedCollectionOnNotFoundOr404.class)
-   @QueryParams(keys = {"fields", "fields", "fields"}, values = {"id", "tenant_id", "name"})
-   PagedIterable<? extends ReferenceWithName> list(PaginationOptions options);
-
-   /**
-    * Returns all subnets currently defined in Neutron for the current tenant.
-    *
-    * @return the list of all subnets configured for the tenant
-    */
-   @Named("subnet:list")
-   @GET
-   @ResponseParser(ParseSubnetDetails.class)
-   @Transform(ParseSubnetDetails.ToPagedIterable.class)
-   @Fallback(EmptyPagedIterableOnNotFoundOr404.class)
-   PagedIterable<? extends Subnet> listInDetail();
-
-   /**
-    * @see <a href="http://docs.openstack.org/api/openstack-network/2.0/content/pagination.html">api doc</a>
-    */
-   @Named("subnet:list")
-   @GET
-   @ResponseParser(ParseSubnetDetails.class)
-   @Fallback(EmptyPaginatedCollectionOnNotFoundOr404.class)
-   PagedIterable<? extends Subnet> listInDetail(PaginationOptions options);
-
-   /**
-    * Returns the specific Subnet.
-    *
-    * @param id the id of the subnet to return
-    * @return Subnet or null if not found
-    */
-   @Named("subnet:get")
-   @GET
-   @Path("/{id}")
-   @SelectJson("subnet")
-   @Fallback(Fallbacks.NullOnNotFoundOr404.class)
-   @Nullable
-   Subnet get(@PathParam("id") String id);
-
-   /**
-    * Create a subnet within a specified network
-    *
-    * @param networkId the id of the network to associate the subnet with
-    * @param ipVersion the ip version of this subnet
-    * @param cidr the cidr for this subnet
-    * @param options optional arugments
-    * @return a reference of the newly-created subnet
-    */
-   @Named("subnet:create")
-   @POST
-   @SelectJson("subnet")
-   @MapBinder(CreateSubnetOptions.class)
-   Subnet create(@PayloadParam("network_id") String networkId, @PayloadParam("ip_version") Integer ipVersion,
-                            @PayloadParam("cidr") String cidr, CreateSubnetOptions... options);
-
-   /**
-    * Create multiple subnets
-    *
-    * @param subnets the bulk of subnets to create
-    * @return list of references of the newly-created subnets
-    */
-   @Named("subnet:createBulk")
-   @POST
-   @SelectJson("subnets")
-   @MapBinder(CreateSubnetBulkOptions.class)
-   FluentIterable<? extends Subnet> createBulk(CreateSubnetBulkOptions subnets);
-
-   /**
-    * Update a subnet
-    *
-    * @param id the id of the subnet to update
-    * @param options the attributes to update
-    * @return true if update was successful, false if not
-    */
-   @Named("subnet:update")
-   @PUT
-   @Path("/{id}")
-   @MapBinder(UpdateSubnetOptions.class)
-   @Fallback(Fallbacks.FalseOnNotFoundOr404.class)
-   boolean update(@PathParam("id") String id, UpdateSubnetOptions... options);
-
-   /**
-    * Delete a subnet
-    *
-    * @param id the id of the subnet to delete
-    * @return true if delete successful, false if not
-    */
-   @Named("subnet:delete")
-   @DELETE
-   @Path("/{id}")
-   @Fallback(Fallbacks.FalseOnNotFoundOr404.class)
-   boolean delete(@PathParam("id") String id);
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/functions/ParseNetworkDetails.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/functions/ParseNetworkDetails.java
deleted file mode 100644
index 421bf71..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/functions/ParseNetworkDetails.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.functions;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.beans.ConstructorProperties;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.collect.IterableWithMarker;
-import org.jclouds.collect.internal.Arg0ToPagedIterable;
-import org.jclouds.http.functions.ParseJson;
-import org.jclouds.json.Json;
-import org.jclouds.openstack.neutron.v2_0.NeutronApi;
-import org.jclouds.openstack.neutron.v2_0.domain.Network;
-import org.jclouds.openstack.neutron.v2_0.features.NetworkApi;
-import org.jclouds.openstack.neutron.v2_0.functions.ParseNetworkDetails.Networks;
-import org.jclouds.openstack.v2_0.domain.Link;
-import org.jclouds.openstack.v2_0.domain.PaginatedCollection;
-import org.jclouds.openstack.v2_0.options.PaginationOptions;
-
-import com.google.common.annotations.Beta;
-import com.google.common.base.Function;
-import com.google.common.base.Optional;
-import com.google.inject.TypeLiteral;
-
-/**
- */
-@Beta
-@Singleton
-public class ParseNetworkDetails extends ParseJson<Networks> {
-   static class Networks extends PaginatedCollection<Network> {
-
-      @ConstructorProperties({ "networks", "networks_links" })
-      protected Networks(Iterable<Network> networks, Iterable<Link> networksLinks) {
-         super(networks, networksLinks);
-      }
-
-   }
-
-   @Inject
-   public ParseNetworkDetails(Json json) {
-      super(json, TypeLiteral.get(Networks.class));
-   }
-
-   public static class ToPagedIterable extends Arg0ToPagedIterable.FromCaller<Network, ToPagedIterable> {
-
-      private final NeutronApi api;
-
-      @Inject
-      protected ToPagedIterable(NeutronApi api) {
-         this.api = checkNotNull(api, "api");
-      }
-
-      @Override
-      protected Function<Object, IterableWithMarker<Network>> markerToNextForArg0(Optional<Object> arg0) {
-         String zone = arg0.isPresent() ? arg0.get().toString() : null;
-         final NetworkApi networkApi = api.getNetworkApiForZone(zone);
-         return new Function<Object, IterableWithMarker<Network>>() {
-
-            @SuppressWarnings("unchecked")
-            @Override
-            public IterableWithMarker<Network> apply(Object input) {
-               PaginationOptions paginationOptions = PaginationOptions.class.cast(input);
-               return IterableWithMarker.class.cast(networkApi.listInDetail(paginationOptions));
-            }
-
-            @Override
-            public String toString() {
-               return "listNetworksInDetail()";
-            }
-         };
-      }
-
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/functions/ParseNetworks.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/functions/ParseNetworks.java
deleted file mode 100644
index a1c1448..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/functions/ParseNetworks.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.functions;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.beans.ConstructorProperties;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.collect.IterableWithMarker;
-import org.jclouds.collect.internal.Arg0ToPagedIterable;
-import org.jclouds.http.functions.ParseJson;
-import org.jclouds.json.Json;
-import org.jclouds.openstack.neutron.v2_0.NeutronApi;
-import org.jclouds.openstack.neutron.v2_0.domain.ReferenceWithName;
-import org.jclouds.openstack.neutron.v2_0.features.NetworkApi;
-import org.jclouds.openstack.neutron.v2_0.functions.ParseNetworks.Networks;
-import org.jclouds.openstack.v2_0.domain.Link;
-import org.jclouds.openstack.v2_0.domain.PaginatedCollection;
-import org.jclouds.openstack.v2_0.options.PaginationOptions;
-
-import com.google.common.annotations.Beta;
-import com.google.common.base.Function;
-import com.google.common.base.Optional;
-import com.google.inject.TypeLiteral;
-
-/**
- */
-@Beta
-@Singleton
-public class ParseNetworks extends ParseJson<Networks> {
-   static class Networks extends PaginatedCollection<ReferenceWithName> {
-
-      @ConstructorProperties({ "networks", "networks_links" })
-      protected Networks(Iterable<ReferenceWithName> networks, Iterable<Link> networksLinks) {
-         super(networks, networksLinks);
-      }
-
-   }
-
-   @Inject
-   public ParseNetworks(Json json) {
-      super(json, TypeLiteral.get(Networks.class));
-   }
-
-   public static class ToPagedIterable extends Arg0ToPagedIterable.FromCaller<ReferenceWithName, ToPagedIterable> {
-
-      private final NeutronApi api;
-
-      @Inject
-      protected ToPagedIterable(NeutronApi api) {
-         this.api = checkNotNull(api, "api");
-      }
-
-      @Override
-      protected Function<Object, IterableWithMarker<ReferenceWithName>> markerToNextForArg0(Optional<Object> arg0) {
-         String zone = arg0.isPresent() ? arg0.get().toString() : null;
-         final NetworkApi networkApi = api.getNetworkApiForZone(zone);
-         return new Function<Object, IterableWithMarker<ReferenceWithName>>() {
-
-            @SuppressWarnings("unchecked")
-            @Override
-            public IterableWithMarker<ReferenceWithName> apply(Object input) {
-               PaginationOptions paginationOptions = PaginationOptions.class.cast(input);
-               return IterableWithMarker.class.cast(networkApi.list(paginationOptions));
-            }
-
-            @Override
-            public String toString() {
-               return "listNetworks()";
-            }
-         };
-      }
-
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/functions/ParsePortDetails.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/functions/ParsePortDetails.java
deleted file mode 100644
index a4e461e..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/functions/ParsePortDetails.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.functions;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.beans.ConstructorProperties;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.collect.IterableWithMarker;
-import org.jclouds.collect.internal.Arg0ToPagedIterable;
-import org.jclouds.http.functions.ParseJson;
-import org.jclouds.json.Json;
-import org.jclouds.openstack.neutron.v2_0.NeutronApi;
-import org.jclouds.openstack.neutron.v2_0.domain.Port;
-import org.jclouds.openstack.neutron.v2_0.domain.ReferenceWithName;
-import org.jclouds.openstack.neutron.v2_0.features.PortApi;
-import org.jclouds.openstack.neutron.v2_0.functions.ParsePortDetails.Ports;
-import org.jclouds.openstack.v2_0.domain.Link;
-import org.jclouds.openstack.v2_0.domain.PaginatedCollection;
-import org.jclouds.openstack.v2_0.options.PaginationOptions;
-
-import com.google.common.annotations.Beta;
-import com.google.common.base.Function;
-import com.google.common.base.Optional;
-import com.google.inject.TypeLiteral;
-
-/**
- */
-@Beta
-@Singleton
-public class ParsePortDetails extends ParseJson<Ports> {
-   static class Ports extends PaginatedCollection<Port> {
-
-      @ConstructorProperties({ "ports", "ports_links" })
-      protected Ports(Iterable<Port> ports, Iterable<Link> portsLinks) {
-         super(ports, portsLinks);
-      }
-
-   }
-
-   @Inject
-   public ParsePortDetails(Json json) {
-      super(json, TypeLiteral.get(Ports.class));
-   }
-
-   public static class ToPagedIterable extends Arg0ToPagedIterable.FromCaller<ReferenceWithName, ToPagedIterable> {
-
-      private final NeutronApi api;
-
-      @Inject
-      protected ToPagedIterable(NeutronApi api) {
-         this.api = checkNotNull(api, "api");
-      }
-
-      @Override
-      protected Function<Object, IterableWithMarker<ReferenceWithName>> markerToNextForArg0(Optional<Object> arg0) {
-         String zone = arg0.isPresent() ? arg0.get().toString() : null;
-         final PortApi portApi = api.getPortApiForZone(zone);
-         return new Function<Object, IterableWithMarker<ReferenceWithName>>() {
-
-            @SuppressWarnings("unchecked")
-            @Override
-            public IterableWithMarker<ReferenceWithName> apply(Object input) {
-               PaginationOptions paginationOptions = PaginationOptions.class.cast(input);
-               return IterableWithMarker.class.cast(portApi.listInDetail(paginationOptions));
-            }
-
-            @Override
-            public String toString() {
-               return "listPortsInDetail()";
-            }
-         };
-      }
-
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/functions/ParsePorts.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/functions/ParsePorts.java
deleted file mode 100644
index 1a11231..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/functions/ParsePorts.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.functions;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.beans.ConstructorProperties;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.collect.IterableWithMarker;
-import org.jclouds.collect.internal.Arg0ToPagedIterable;
-import org.jclouds.http.functions.ParseJson;
-import org.jclouds.json.Json;
-import org.jclouds.openstack.neutron.v2_0.NeutronApi;
-import org.jclouds.openstack.neutron.v2_0.domain.ReferenceWithName;
-import org.jclouds.openstack.neutron.v2_0.features.PortApi;
-import org.jclouds.openstack.neutron.v2_0.functions.ParsePorts.Ports;
-import org.jclouds.openstack.v2_0.domain.Link;
-import org.jclouds.openstack.v2_0.domain.PaginatedCollection;
-import org.jclouds.openstack.v2_0.options.PaginationOptions;
-
-import com.google.common.annotations.Beta;
-import com.google.common.base.Function;
-import com.google.common.base.Optional;
-import com.google.inject.TypeLiteral;
-
-/**
- */
-@Beta
-@Singleton
-public class ParsePorts extends ParseJson<Ports> {
-   static class Ports extends PaginatedCollection<ReferenceWithName> {
-
-      @ConstructorProperties({ "ports", "ports_links" })
-      protected Ports(Iterable<ReferenceWithName> ports, Iterable<Link> portsLinks) {
-         super(ports, portsLinks);
-      }
-
-   }
-
-   @Inject
-   public ParsePorts(Json json) {
-      super(json, TypeLiteral.get(Ports.class));
-   }
-
-   public static class ToPagedIterable extends Arg0ToPagedIterable.FromCaller<ReferenceWithName, ToPagedIterable> {
-
-      private final NeutronApi api;
-
-      @Inject
-      protected ToPagedIterable(NeutronApi api) {
-         this.api = checkNotNull(api, "api");
-      }
-
-      @Override
-      protected Function<Object, IterableWithMarker<ReferenceWithName>> markerToNextForArg0(Optional<Object> arg0) {
-         String zone = arg0.isPresent() ? arg0.get().toString() : null;
-         final PortApi portApi = api.getPortApiForZone(zone);
-         return new Function<Object, IterableWithMarker<ReferenceWithName>>() {
-
-            @SuppressWarnings("unchecked")
-            @Override
-            public IterableWithMarker<ReferenceWithName> apply(Object input) {
-               PaginationOptions paginationOptions = PaginationOptions.class.cast(input);
-               return IterableWithMarker.class.cast(portApi.list(paginationOptions));
-            }
-
-            @Override
-            public String toString() {
-               return "listPorts()";
-            }
-         };
-      }
-
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/functions/ParseRouterDetails.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/functions/ParseRouterDetails.java
deleted file mode 100644
index 537cc97..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/functions/ParseRouterDetails.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.functions;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.jclouds.openstack.v2_0.options.PaginationOptions.Builder.marker;
-
-import java.beans.ConstructorProperties;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.collect.IterableWithMarker;
-import org.jclouds.collect.internal.Arg0ToPagedIterable;
-import org.jclouds.http.functions.ParseJson;
-import org.jclouds.json.Json;
-import org.jclouds.openstack.neutron.v2_0.NeutronApi;
-import org.jclouds.openstack.neutron.v2_0.domain.Router;
-import org.jclouds.openstack.neutron.v2_0.extensions.RouterApi;
-import org.jclouds.openstack.neutron.v2_0.functions.ParseRouterDetails.Routers;
-import org.jclouds.openstack.v2_0.domain.Link;
-import org.jclouds.openstack.v2_0.domain.PaginatedCollection;
-
-import com.google.common.annotations.Beta;
-import com.google.common.base.Function;
-import com.google.common.base.Optional;
-import com.google.inject.TypeLiteral;
-
-/**
- */
-@Beta
-@Singleton
-public class ParseRouterDetails extends ParseJson<Routers> {
-   static class Routers extends PaginatedCollection<Router> {
-
-      @ConstructorProperties({ "routers", "routers_links" })
-      protected Routers(Iterable<Router> routers, Iterable<Link> routersLinks) {
-         super(routers, routersLinks);
-      }
-
-   }
-
-   @Inject
-   public ParseRouterDetails(Json json) {
-      super(json, TypeLiteral.get(Routers.class));
-   }
-
-   public static class ToPagedIterable extends Arg0ToPagedIterable.FromCaller<Router, ToPagedIterable> {
-
-      private final NeutronApi api;
-
-      @Inject
-      protected ToPagedIterable(NeutronApi api) {
-         this.api = checkNotNull(api, "api");
-      }
-
-      @Override
-      protected Function<Object, IterableWithMarker<Router>> markerToNextForArg0(Optional<Object> arg0) {
-         String zone = arg0.isPresent() ? arg0.get().toString() : null;
-         final RouterApi routerApi = api.getRouterExtensionForZone(zone).get();
-         return new Function<Object, IterableWithMarker<Router>>() {
-
-            @SuppressWarnings("unchecked")
-            @Override
-            public IterableWithMarker<Router> apply(Object input) {
-               return IterableWithMarker.class.cast(routerApi.listInDetail(marker(input.toString())));
-            }
-
-            @Override
-            public String toString() {
-               return "listRoutersInDetail()";
-            }
-         };
-      }
-
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/functions/ParseRouters.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/functions/ParseRouters.java
deleted file mode 100644
index eb612f4..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/functions/ParseRouters.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.functions;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.jclouds.openstack.v2_0.options.PaginationOptions.Builder.marker;
-
-import java.beans.ConstructorProperties;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.collect.IterableWithMarker;
-import org.jclouds.collect.internal.Arg0ToPagedIterable;
-import org.jclouds.http.functions.ParseJson;
-import org.jclouds.json.Json;
-import org.jclouds.openstack.neutron.v2_0.NeutronApi;
-import org.jclouds.openstack.neutron.v2_0.domain.ReferenceWithName;
-import org.jclouds.openstack.neutron.v2_0.extensions.RouterApi;
-import org.jclouds.openstack.neutron.v2_0.functions.ParseRouters.Routers;
-import org.jclouds.openstack.v2_0.domain.Link;
-import org.jclouds.openstack.v2_0.domain.PaginatedCollection;
-
-import com.google.common.annotations.Beta;
-import com.google.common.base.Function;
-import com.google.common.base.Optional;
-import com.google.inject.TypeLiteral;
-
-/**
- */
-@Beta
-@Singleton
-public class ParseRouters extends ParseJson<Routers> {
-   static class Routers extends PaginatedCollection<ReferenceWithName> {
-
-      @ConstructorProperties({ "routers", "routers_links" })
-      protected Routers(Iterable<ReferenceWithName> routers, Iterable<Link> routersLinks) {
-         super(routers, routersLinks);
-      }
-
-   }
-
-   @Inject
-   public ParseRouters(Json json) {
-      super(json, TypeLiteral.get(Routers.class));
-   }
-
-   public static class ToPagedIterable extends Arg0ToPagedIterable.FromCaller<ReferenceWithName, ToPagedIterable> {
-
-      private final NeutronApi api;
-
-      @Inject
-      protected ToPagedIterable(NeutronApi api) {
-         this.api = checkNotNull(api, "api");
-      }
-
-      @Override
-      protected Function<Object, IterableWithMarker<ReferenceWithName>> markerToNextForArg0(Optional<Object> arg0) {
-         String zone = arg0.isPresent() ? arg0.get().toString() : null;
-         final RouterApi routerApi = api.getRouterExtensionForZone(zone).get();
-         return new Function<Object, IterableWithMarker<ReferenceWithName>>() {
-
-            @SuppressWarnings("unchecked")
-            @Override
-            public IterableWithMarker<ReferenceWithName> apply(Object input) {
-               return IterableWithMarker.class.cast(routerApi.list(marker(input.toString())));
-            }
-
-            @Override
-            public String toString() {
-               return "listRouters()";
-            }
-         };
-      }
-
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/functions/ParseSubnetDetails.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/functions/ParseSubnetDetails.java
deleted file mode 100644
index 17201f2..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/functions/ParseSubnetDetails.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.functions;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.beans.ConstructorProperties;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.collect.IterableWithMarker;
-import org.jclouds.collect.internal.Arg0ToPagedIterable;
-import org.jclouds.http.functions.ParseJson;
-import org.jclouds.json.Json;
-import org.jclouds.openstack.neutron.v2_0.NeutronApi;
-import org.jclouds.openstack.neutron.v2_0.domain.Subnet;
-import org.jclouds.openstack.neutron.v2_0.features.SubnetApi;
-import org.jclouds.openstack.neutron.v2_0.functions.ParseSubnetDetails.Subnets;
-import org.jclouds.openstack.v2_0.domain.Link;
-import org.jclouds.openstack.v2_0.domain.PaginatedCollection;
-import org.jclouds.openstack.v2_0.options.PaginationOptions;
-
-import com.google.common.annotations.Beta;
-import com.google.common.base.Function;
-import com.google.common.base.Optional;
-import com.google.inject.TypeLiteral;
-
-/**
- */
-@Beta
-@Singleton
-public class ParseSubnetDetails extends ParseJson<Subnets> {
-   static class Subnets extends PaginatedCollection<Subnet> {
-
-      @ConstructorProperties({ "subnets", "subnets_links" })
-      protected Subnets(Iterable<Subnet> subnets, Iterable<Link> subnetsLinks) {
-         super(subnets, subnetsLinks);
-      }
-
-   }
-
-   @Inject
-   public ParseSubnetDetails(Json json) {
-      super(json, TypeLiteral.get(Subnets.class));
-   }
-
-   public static class ToPagedIterable extends Arg0ToPagedIterable.FromCaller<Subnet, ToPagedIterable> {
-
-      private final NeutronApi api;
-
-      @Inject
-      protected ToPagedIterable(NeutronApi api) {
-         this.api = checkNotNull(api, "api");
-      }
-
-      @Override
-      protected Function<Object, IterableWithMarker<Subnet>> markerToNextForArg0(Optional<Object> arg0) {
-         String zone = arg0.isPresent() ? arg0.get().toString() : null;
-         final SubnetApi subnetApi = api.getSubnetApiForZone(zone);
-         return new Function<Object, IterableWithMarker<Subnet>>() {
-
-            @SuppressWarnings("unchecked")
-            @Override
-            public IterableWithMarker<Subnet> apply(Object input) {
-               PaginationOptions paginationOptions = PaginationOptions.class.cast(input);
-               return IterableWithMarker.class.cast(subnetApi.listInDetail(paginationOptions));
-            }
-
-            @Override
-            public String toString() {
-               return "listSubnetsInDetail()";
-            }
-         };
-      }
-
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/functions/ParseSubnets.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/functions/ParseSubnets.java
deleted file mode 100644
index bc7ef13..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/functions/ParseSubnets.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.functions;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.beans.ConstructorProperties;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.collect.IterableWithMarker;
-import org.jclouds.collect.internal.Arg0ToPagedIterable;
-import org.jclouds.http.functions.ParseJson;
-import org.jclouds.json.Json;
-import org.jclouds.openstack.neutron.v2_0.NeutronApi;
-import org.jclouds.openstack.neutron.v2_0.domain.ReferenceWithName;
-import org.jclouds.openstack.neutron.v2_0.features.SubnetApi;
-import org.jclouds.openstack.neutron.v2_0.functions.ParseSubnets.Subnets;
-import org.jclouds.openstack.v2_0.domain.Link;
-import org.jclouds.openstack.v2_0.domain.PaginatedCollection;
-import org.jclouds.openstack.v2_0.options.PaginationOptions;
-
-import com.google.common.annotations.Beta;
-import com.google.common.base.Function;
-import com.google.common.base.Optional;
-import com.google.inject.TypeLiteral;
-
-/**
- */
-@Beta
-@Singleton
-public class ParseSubnets extends ParseJson<Subnets> {
-   static class Subnets extends PaginatedCollection<ReferenceWithName> {
-
-      @ConstructorProperties({ "subnets", "subnets_links" })
-      protected Subnets(Iterable<ReferenceWithName> subnets, Iterable<Link> subnetsLinks) {
-         super(subnets, subnetsLinks);
-      }
-
-   }
-
-   @Inject
-   public ParseSubnets(Json json) {
-      super(json, TypeLiteral.get(Subnets.class));
-   }
-
-   public static class ToPagedIterable extends Arg0ToPagedIterable.FromCaller<ReferenceWithName, ToPagedIterable> {
-
-      private final NeutronApi api;
-
-      @Inject
-      protected ToPagedIterable(NeutronApi api) {
-         this.api = checkNotNull(api, "api");
-      }
-
-      @Override
-      protected Function<Object, IterableWithMarker<ReferenceWithName>> markerToNextForArg0(Optional<Object> arg0) {
-         String zone = arg0.isPresent() ? arg0.get().toString() : null;
-         final SubnetApi subnetApi = api.getSubnetApiForZone(zone);
-         return new Function<Object, IterableWithMarker<ReferenceWithName>>() {
-
-            @SuppressWarnings("unchecked")
-            @Override
-            public IterableWithMarker<ReferenceWithName> apply(Object input) {
-               PaginationOptions paginationOptions = PaginationOptions.class.cast(input);
-               return IterableWithMarker.class.cast(subnetApi.list(paginationOptions));
-            }
-
-            @Override
-            public String toString() {
-               return "listSubnets()";
-            }
-         };
-      }
-
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/handlers/NeutronErrorHandler.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/handlers/NeutronErrorHandler.java
deleted file mode 100644
index 87c28c5..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/handlers/NeutronErrorHandler.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.handlers;
-
-import static org.jclouds.http.HttpUtils.closeClientButKeepContentStream;
-
-import javax.inject.Singleton;
-
-import org.jclouds.http.HttpCommand;
-import org.jclouds.http.HttpErrorHandler;
-import org.jclouds.http.HttpResponse;
-import org.jclouds.http.HttpResponseException;
-import org.jclouds.rest.AuthorizationException;
-import org.jclouds.rest.ResourceNotFoundException;
-
-/**
- * This will parse and set an appropriate exception on the command object.
- */
-@Singleton
-public class NeutronErrorHandler implements HttpErrorHandler {
-   public void handleError(HttpCommand command, HttpResponse response) {
-      // it is important to always read fully and close streams
-      byte[] data = closeClientButKeepContentStream(response);
-      String message = data != null ? new String(data) : null;
-
-      Exception exception = message != null ? new HttpResponseException(command, response, message)
-            : new HttpResponseException(command, response);
-      message = message != null ? message : String.format("%s -> %s", command.getCurrentRequest().getRequestLine(),
-            response.getStatusLine());
-      switch (response.getStatusCode()) {
-         case 400:
-            break;
-         case 401:
-         case 403:
-            exception = new AuthorizationException(message, exception);
-            break;
-         case 404:
-            if (!command.getCurrentRequest().getMethod().equals("DELETE")) {
-               exception = new ResourceNotFoundException(message, exception);
-            }
-            break;
-      }
-      command.setException(exception);
-   }
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/CreateNetworkBulkOptions.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/CreateNetworkBulkOptions.java
deleted file mode 100644
index 7410839..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/CreateNetworkBulkOptions.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.options;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Lists;
-import org.jclouds.http.HttpRequest;
-import org.jclouds.openstack.neutron.v2_0.domain.BulkNetwork;
-import org.jclouds.openstack.neutron.v2_0.domain.NetworkType;
-import org.jclouds.rest.MapBinder;
-import org.jclouds.rest.binders.BindToJsonPayload;
-
-import javax.inject.Inject;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.jclouds.openstack.neutron.v2_0.options.CreateNetworkOptions.CreateNetworkRequest;
-
-public class CreateNetworkBulkOptions implements MapBinder {
-
-   @Inject
-   private BindToJsonPayload jsonBinder;
-
-   public static Builder<?> builder() {
-      return new ConcreteBuilder();
-   }
-
-   public Builder<?> toBuilder() {
-      return new ConcreteBuilder().fromCreateNetworkOptions(this);
-   }
-
-   public abstract static class Builder<T extends Builder<T>> {
-      protected abstract T self();
-
-      protected List<BulkNetwork> networks;
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.CreateNetworkBulkOptions#getNetworks()
-       */
-      public T networks(Collection<BulkNetwork> networks) {
-         this.networks = ImmutableList.copyOf(networks);
-         return self();
-      }
-
-      public CreateNetworkBulkOptions build() {
-         return new CreateNetworkBulkOptions(networks);
-      }
-
-      public T fromCreateNetworkOptions(CreateNetworkBulkOptions in) {
-         return this.networks(in.getNetworks());
-      }
-   }
-
-   private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
-      @Override
-      protected ConcreteBuilder self() {
-         return this;
-      }
-   }
-
-   private final List<BulkNetwork> networks;
-
-   protected CreateNetworkBulkOptions() {
-      this.networks = Lists.newArrayList();
-   }
-
-   public CreateNetworkBulkOptions(List<BulkNetwork> networks) {
-      this.networks = networks != null ? ImmutableList.copyOf(networks) : Lists.<BulkNetwork>newArrayList();
-   }
-
-   /**
-    * @return the list of networks to create
-    */
-   public List<BulkNetwork> getNetworks() {
-      return networks;
-   }
-
-   @Override
-   public <R extends HttpRequest> R bindToRequest(R request, Map<String, Object> postParams) {
-      List<CreateNetworkRequest> createNetworkRequests = Lists.newArrayList();
-
-      for (BulkNetwork network : this.networks) {
-         if (network.getNetworkType() != null) {
-            //Validations for each NetworkType
-            if (network.getNetworkType() == NetworkType.FLAT) {
-               checkNotNull(network.getPhysicalNetworkName(), "physicalNetworkName must be present when networkType=FLAT");
-            } else if (network.getNetworkType() == NetworkType.VLAN) {
-               checkNotNull(network.getPhysicalNetworkName(), "physicalNetworkName must be present when networkType=VLAN");
-               checkNotNull(network.getSegmentationId(), "segmentationId must be present when networkType=VLAN");
-            } else if (network.getNetworkType() == NetworkType.GRE) {
-               checkNotNull(network.getSegmentationId(), "segmentationId must be present when NetworkType=GRE");
-            }
-         }
-
-         CreateNetworkRequest createNetworkRequest = new CreateNetworkRequest();
-         if (network.getName() != null)
-            createNetworkRequest.name = network.getName();
-         if (network.getAdminStateUp() != null)
-            createNetworkRequest.admin_state_up = network.getAdminStateUp();
-         if (network.getExternal() != null)
-            createNetworkRequest.external = network.getExternal();
-         if (network.getNetworkType() != null)
-            createNetworkRequest.networkType = network.getNetworkType().getValue();
-         if (network.getPhysicalNetworkName() != null && (network.getNetworkType() == NetworkType.FLAT || network.getNetworkType() == NetworkType.VLAN))
-            createNetworkRequest.physicalNetworkName = network.getPhysicalNetworkName();
-         if (network.getSegmentationId() != null && (network.getNetworkType() == NetworkType.VLAN || network.getNetworkType() == NetworkType.GRE))
-            createNetworkRequest.segmentationId = network.getSegmentationId();
-
-         createNetworkRequests.add(createNetworkRequest);
-      }
-
-      return bindToRequest(request, ImmutableMap.of("networks", createNetworkRequests));
-   }
-
-   @Override
-   public <R extends HttpRequest> R bindToRequest(R request, Object input) {
-      return jsonBinder.bindToRequest(request, input);
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/CreateNetworkOptions.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/CreateNetworkOptions.java
deleted file mode 100644
index f4237f5..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/CreateNetworkOptions.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.options;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.gson.annotations.SerializedName;
-import org.jclouds.http.HttpRequest;
-import org.jclouds.openstack.neutron.v2_0.domain.NetworkType;
-import org.jclouds.rest.MapBinder;
-import org.jclouds.rest.binders.BindToJsonPayload;
-
-import javax.inject.Inject;
-import java.util.Map;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-public class CreateNetworkOptions implements MapBinder {
-
-   @Inject
-   private BindToJsonPayload jsonBinder;
-
-   public static Builder<?> builder() {
-      return new ConcreteBuilder();
-   }
-
-   public Builder<?> toBuilder() {
-      return new ConcreteBuilder().fromCreateNetworkOptions(this);
-   }
-
-   public abstract static class Builder<T extends Builder<T>> {
-      protected abstract T self();
-
-      protected String name;
-      protected Boolean adminStateUp;
-      protected Boolean external;
-      protected NetworkType networkType;
-      protected String physicalNetworkName;
-      protected Integer segmentationId;
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.CreateNetworkOptions#getName()
-       */
-      public T name(String name) {
-         this.name = name;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.CreateNetworkOptions#getAdminStateUp()
-       */
-      public T adminStateUp(Boolean adminStateUp) {
-         this.adminStateUp = adminStateUp;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.CreateNetworkOptions#getExternal()
-       */
-      public T external(Boolean external) {
-         this.external = external;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.CreateNetworkOptions#getNetworkType()
-       */
-      public T networkType(NetworkType networkType) {
-         this.networkType = networkType;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.CreateNetworkOptions#getPhysicalNetworkName()
-       */
-      public T physicalNetworkName(String physicalNetworkName) {
-         this.physicalNetworkName = physicalNetworkName;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.CreateNetworkOptions#getSegmentationId()
-       */
-      public T segmentationId(Integer segmentationId) {
-         this.segmentationId = segmentationId;
-         return self();
-      }
-
-      public CreateNetworkOptions build() {
-         return new CreateNetworkOptions(name, adminStateUp, external, networkType, physicalNetworkName, segmentationId);
-      }
-
-      public T fromCreateNetworkOptions(CreateNetworkOptions in) {
-         return this.name(in.getName())
-            .adminStateUp(in.getAdminStateUp())
-            .external(in.getExternal())
-            .networkType(in.getNetworkType())
-            .physicalNetworkName(in.getPhysicalNetworkName())
-            .segmentationId(in.getSegmentationId());
-      }
-   }
-
-   private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
-      @Override
-      protected ConcreteBuilder self() {
-         return this;
-      }
-   }
-
-   protected static class CreateNetworkRequest {
-      protected String name;
-      protected Boolean admin_state_up;
-      @SerializedName("router:external")
-      protected Boolean external;
-      @SerializedName("provider:network_type")
-      protected String networkType;
-      @SerializedName("provider:physical_network")
-      protected String physicalNetworkName;
-      @SerializedName("provider:segmentation_id")
-      protected Integer segmentationId;
-   }
-
-   private final String name;
-   private final Boolean adminStateUp;
-   private final Boolean external;
-   private final NetworkType networkType;
-   private final String physicalNetworkName;
-   private final Integer segmentationId;
-
-   protected CreateNetworkOptions() {
-      this.name = null;
-      this.adminStateUp = null;
-      this.external = null;
-      this.networkType = null;
-      this.physicalNetworkName = null;
-      this.segmentationId = null;
-   }
-
-   public CreateNetworkOptions(String name, Boolean adminStateUp, Boolean external, NetworkType networkType, String physicalNetworkName, Integer segmentationId) {
-      this.name = name;
-      this.adminStateUp = adminStateUp;
-      this.external = external;
-      this.networkType = networkType;
-      this.physicalNetworkName = physicalNetworkName;
-      this.segmentationId = segmentationId;
-   }
-
-   /**
-    * @return the name of the network
-    */
-   public String getName() {
-      return name;
-   }
-
-   /**
-    * @return the administrative state of network. If false, the network does not forward packets.
-    */
-   public Boolean getAdminStateUp() {
-      return adminStateUp;
-   }
-
-   /**
-    * @return true if network is external, false if not
-    */
-   public Boolean getExternal() {
-      return external;
-   }
-
-   /**
-    * @return the type of the network
-    */
-   public NetworkType getNetworkType() {
-      return networkType;
-   }
-
-   /**
-    * @return the physical network name
-    */
-   public String getPhysicalNetworkName() {
-      return physicalNetworkName;
-   }
-
-   /**
-    * @return the segmentation id of the network
-    */
-   public Integer getSegmentationId() {
-      return segmentationId;
-   }
-
-   @Override
-   public <R extends HttpRequest> R bindToRequest(R request, Map<String, Object> postParams) {
-      if (this.networkType != null) {
-         //Validations for each NetworkType
-         if (this.networkType == NetworkType.FLAT) {
-            checkNotNull(this.physicalNetworkName, "physicalNetworkName must be present when networkType=FLAT");
-         } else if (this.networkType == NetworkType.VLAN) {
-            checkNotNull(this.physicalNetworkName, "physicalNetworkName must be present when networkType=VLAN");
-            checkNotNull(this.segmentationId, "segmentationId must be present when networkType=VLAN");
-         } else if (this.networkType == NetworkType.GRE) {
-            checkNotNull(this.segmentationId, "segmentationId must be present when NetworkType=GRE");
-         }
-      }
-
-      CreateNetworkRequest createNetworkRequest = new CreateNetworkRequest();
-      if (this.name != null)
-         createNetworkRequest.name = this.name;
-      if (this.adminStateUp != null)
-         createNetworkRequest.admin_state_up = this.adminStateUp;
-      if (this.external != null)
-         createNetworkRequest.external = this.external;
-      if (this.networkType != null)
-         createNetworkRequest.networkType = this.networkType.getValue();
-      if (this.physicalNetworkName != null && (networkType == NetworkType.FLAT || networkType == NetworkType.VLAN))
-         createNetworkRequest.physicalNetworkName = this.physicalNetworkName;
-      if (this.segmentationId != null && (networkType == NetworkType.VLAN || networkType == NetworkType.GRE))
-         createNetworkRequest.segmentationId = this.segmentationId;
-
-      return bindToRequest(request, ImmutableMap.of("network", createNetworkRequest));
-   }
-
-   @Override
-   public <R extends HttpRequest> R bindToRequest(R request, Object input) {
-      return jsonBinder.bindToRequest(request, input);
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/CreatePortBulkOptions.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/CreatePortBulkOptions.java
deleted file mode 100644
index bbe473d..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/CreatePortBulkOptions.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.options;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
-import org.jclouds.http.HttpRequest;
-import org.jclouds.openstack.neutron.v2_0.domain.BulkPort;
-import org.jclouds.openstack.neutron.v2_0.domain.IP;
-import org.jclouds.rest.MapBinder;
-import org.jclouds.rest.binders.BindToJsonPayload;
-
-import javax.inject.Inject;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-public class CreatePortBulkOptions implements MapBinder {
-
-   @Inject
-   private BindToJsonPayload jsonBinder;
-
-   public static Builder<?> builder() {
-      return new ConcreteBuilder();
-   }
-
-   public Builder<?> toBuilder() {
-      return new ConcreteBuilder().fromCreatePortBulkOptions(this);
-   }
-
-   public abstract static class Builder<T extends Builder<T>> {
-      protected abstract T self();
-
-      protected List<BulkPort> ports;
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.CreatePortBulkOptions#getPorts()
-       */
-      public T ports(Collection<BulkPort> ports) {
-         this.ports = ImmutableList.copyOf(ports);
-         return self();
-      }
-
-      public CreatePortBulkOptions build() {
-         return new CreatePortBulkOptions(this.ports);
-      }
-
-      public T fromCreatePortBulkOptions(CreatePortBulkOptions in) {
-         return this.ports(in.getPorts());
-      }
-   }
-
-   private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
-      @Override
-      protected ConcreteBuilder self() {
-         return this;
-      }
-   }
-
-   private final List<BulkPort> ports;
-
-   protected CreatePortBulkOptions() {
-      this.ports = Lists.newArrayList();
-   }
-
-   public CreatePortBulkOptions(List<BulkPort> ports) {
-      this.ports = ports;
-   }
-
-   /**
-    * @return the list of ports to create
-    */
-   public List<BulkPort> getPorts() {
-      return ports;
-   }
-
-   @Override
-   public <R extends HttpRequest> R bindToRequest(R request, Map<String, Object> postParams) {
-      List<CreatePortOptions.CreatePortRequest> createPortRequests = Lists.newArrayList();
-
-      for (BulkPort port : this.ports) {
-         CreatePortOptions.CreatePortRequest createPortRequest = new CreatePortOptions.CreatePortRequest(checkNotNull(port.getNetworkId(), "network id parameter not present"));
-
-         if (port.getName() != null)
-            createPortRequest.name = port.getName();
-         if (port.getAdminStateUp() != null)
-            createPortRequest.admin_state_up = port.getAdminStateUp();
-         if (port.getDeviceId() != null)
-            createPortRequest.device_id = port.getDeviceId();
-         if (port.getDeviceOwner() != null)
-            createPortRequest.device_owner = port.getDeviceOwner();
-         if (port.getMacAddress() != null)
-            createPortRequest.mac_address = port.getMacAddress();
-         if (!port.getFixedIps().isEmpty()) {
-            createPortRequest.fixed_ips = Sets.newHashSet();
-            for (IP fixedIp : port.getFixedIps()) {
-               CreatePortOptions.CreatePortRequest.IP requestIp = new CreatePortOptions.CreatePortRequest.IP();
-               requestIp.subnet_id = fixedIp.getSubnetId();
-               requestIp.ip_address = fixedIp.getIpAddress();
-               createPortRequest.fixed_ips.add(requestIp);
-            }
-         }
-
-         createPortRequests.add(createPortRequest);
-      }
-
-      return bindToRequest(request, ImmutableMap.of("ports", createPortRequests));
-   }
-
-   @Override
-   public <R extends HttpRequest> R bindToRequest(R request, Object input) {
-      return jsonBinder.bindToRequest(request, input);
-   }
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/CreatePortOptions.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/CreatePortOptions.java
deleted file mode 100644
index 1903da2..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/CreatePortOptions.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.options;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Sets;
-import org.jclouds.http.HttpRequest;
-import org.jclouds.openstack.neutron.v2_0.domain.IP;
-import org.jclouds.rest.MapBinder;
-import org.jclouds.rest.binders.BindToJsonPayload;
-
-import javax.inject.Inject;
-import java.util.Map;
-import java.util.Set;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-public class CreatePortOptions implements MapBinder {
-
-   @Inject
-   private BindToJsonPayload jsonBinder;
-
-   public static Builder<?> builder() {
-      return new ConcreteBuilder();
-   }
-
-   public Builder<?> toBuilder() {
-      return new ConcreteBuilder().fromCreatePortOptions(this);
-   }
-
-   public abstract static class Builder<T extends Builder<T>> {
-      protected abstract T self();
-
-      protected String name;
-      protected String deviceId;
-      protected String deviceOwner;
-      protected String macAddress;
-      protected Set<IP> fixedIps;
-      protected Boolean adminStateUp;
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.CreatePortOptions#getName()
-       */
-      public T name(String name) {
-         this.name = name;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.CreatePortOptions#getDeviceId()
-       */
-      public T deviceId(String deviceId) {
-         this.deviceId = deviceId;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.CreatePortOptions#getDeviceOwner()
-       */
-      public T deviceOwner(String deviceOwner) {
-         this.deviceOwner = deviceOwner;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.CreatePortOptions#getMacAddress()
-       */
-      public T macAddress(String macAddress) {
-         this.macAddress = macAddress;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.CreatePortOptions#getFixedIps()
-       */
-      public T fixedIps(Set<IP> fixedIps) {
-         this.fixedIps = fixedIps;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.CreatePortOptions#getAdminStateUp()
-       */
-      public T adminStateUp(Boolean adminStateUp) {
-         this.adminStateUp = adminStateUp;
-         return self();
-      }
-
-      public CreatePortOptions build() {
-         return new CreatePortOptions(name, deviceId, deviceOwner, macAddress, fixedIps, adminStateUp);
-      }
-
-      public T fromCreatePortOptions(CreatePortOptions options) {
-         return this.name(options.getName())
-            .deviceId(options.getDeviceId())
-            .deviceOwner(options.getDeviceOwner())
-            .macAddress(options.getMacAddress())
-            .fixedIps(options.getFixedIps())
-            .adminStateUp(options.getAdminStateUp());
-      }
-   }
-
-   private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
-      @Override
-      protected ConcreteBuilder self() {
-         return this;
-      }
-   }
-
-   protected static class CreatePortRequest {
-      protected String network_id;
-      protected String name;
-      protected String device_id;
-      protected String device_owner;
-      protected String mac_address;
-      protected Set<IP> fixed_ips;
-      protected Boolean admin_state_up;
-
-      protected CreatePortRequest(String networkId) {
-         this.network_id = networkId;
-      }
-
-      protected static final class IP {
-         protected String ip_address;
-         protected String subnet_id;
-      }
-   }
-
-   private final String name;
-   private final String deviceId;
-   private final String deviceOwner;
-   private final String macAddress;
-   private final Set<IP> fixedIps;
-   private final Boolean adminStateUp;
-
-   protected CreatePortOptions() {
-      this.name = null;
-      this.deviceId = null;
-      this.deviceOwner = null;
-      this.macAddress = null;
-      this.fixedIps = Sets.newHashSet();
-      this.adminStateUp = null;
-   }
-
-   public CreatePortOptions(String name, String deviceId, String deviceOwner, String macAddress,
-                            Set<IP> fixedIps, Boolean adminStateUp) {
-      this.name = name;
-      this.deviceId = deviceId;
-      this.deviceOwner = deviceOwner;
-      this.macAddress = macAddress;
-      this.fixedIps = fixedIps != null ? ImmutableSet.copyOf(fixedIps) : Sets.<IP>newHashSet();
-      this.adminStateUp = adminStateUp;
-   }
-
-   public String getName() {
-      return name;
-   }
-
-   /**
-    * @return the id of the device (e.g. server) which will use this port.
-    */
-   public String getDeviceId() {
-      return deviceId;
-   }
-
-   /**
-    * @return the entity (e.g.: dhcp agent) who will be using this port.
-    */
-   public String getDeviceOwner() {
-      return deviceOwner;
-   }
-
-   /**
-    * @return the mac address of this port
-    */
-   public String getMacAddress() {
-      return macAddress;
-   }
-
-   /**
-    * @return the set of fixed ips this port will get assigned
-    */
-   public Set<IP> getFixedIps() {
-      return fixedIps;
-   }
-
-   /**
-    * @return the administrative state of port. If false, port does not forward packets.
-    */
-   public Boolean getAdminStateUp() {
-      return adminStateUp;
-   }
-
-   @Override
-   public <R extends HttpRequest> R bindToRequest(R request, Map<String, Object> postParams) {
-      CreatePortRequest createPortRequest = new CreatePortRequest(checkNotNull(postParams.get("network_id"), "networkId not present").toString());
-
-      if (this.name != null)
-         createPortRequest.name = this.name;
-      if (this.deviceId != null)
-         createPortRequest.device_id = this.deviceId;
-      if (this.deviceOwner != null)
-         createPortRequest.device_owner = this.deviceOwner;
-      if (this.macAddress != null)
-         createPortRequest.mac_address = this.macAddress;
-      if (!this.fixedIps.isEmpty()) {
-         createPortRequest.fixed_ips = Sets.newHashSet();
-         for (IP ip : this.fixedIps) {
-            CreatePortRequest.IP requestIp = new CreatePortRequest.IP();
-            requestIp.subnet_id = ip.getSubnetId();
-            requestIp.ip_address = ip.getIpAddress();
-            createPortRequest.fixed_ips.add(requestIp);
-         }
-      }
-      if (this.adminStateUp != null)
-         createPortRequest.admin_state_up = this.adminStateUp;
-
-      return bindToRequest(request, ImmutableMap.of("port", createPortRequest));
-   }
-
-   @Override
-   public <R extends HttpRequest> R bindToRequest(R request, Object input) {
-      return jsonBinder.bindToRequest(request, input);
-   }
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/CreateRouterOptions.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/CreateRouterOptions.java
deleted file mode 100644
index 7834953..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/CreateRouterOptions.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.options;
-
-import com.google.common.collect.ImmutableMap;
-import org.jclouds.http.HttpRequest;
-import org.jclouds.openstack.neutron.v2_0.domain.ExternalGatewayInfo;
-import org.jclouds.rest.MapBinder;
-import org.jclouds.rest.binders.BindToJsonPayload;
-
-import javax.inject.Inject;
-import java.util.Map;
-
-public class CreateRouterOptions implements MapBinder {
-
-   @Inject
-   private BindToJsonPayload jsonBinder;
-
-   public static Builder<?> builder() {
-      return new ConcreteBuilder();
-   }
-
-   public Builder<?> toBuilder() {
-      return new ConcreteBuilder().fromCreateRouterOptions(this);
-   }
-
-   public abstract static class Builder<T extends Builder<T>> {
-      protected abstract T self();
-
-      protected String name;
-      protected Boolean adminStateUp;
-      protected ExternalGatewayInfo externalGatewayInfo;
-
-      /**
-       * @see CreateRouterOptions#getName()
-       */
-      public T name(String name) {
-         this.name = name;
-         return self();
-      }
-
-      /**
-       * @see CreateRouterOptions#getAdminStateUp()
-       */
-      public T adminStateUp(Boolean adminStateUp) {
-         this.adminStateUp = adminStateUp;
-         return self();
-      }
-
-      /**
-       * @see CreateRouterOptions#getExternalGatewayInfo()
-       */
-      public T externalGatewayInfo(ExternalGatewayInfo externalGatewayInfo) {
-         this.externalGatewayInfo = externalGatewayInfo;
-         return self();
-      }
-
-      public CreateRouterOptions build() {
-         return new CreateRouterOptions(name, adminStateUp, externalGatewayInfo);
-      }
-
-      public T fromCreateRouterOptions(CreateRouterOptions options) {
-         return this.name(options.getName())
-            .adminStateUp(options.getAdminStateUp())
-            .externalGatewayInfo(options.getExternalGatewayInfo());
-      }
-   }
-
-   private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
-      @Override
-      protected ConcreteBuilder self() {
-         return this;
-      }
-   }
-
-   protected static class CreateRouterRequest {
-      protected String name;
-      protected Boolean admin_state_up;
-      protected ExternalGatewayInfo external_gateway_info;
-
-      protected CreateRouterRequest() {
-      }
-
-      protected static final class ExternalGatewayInfo {
-         protected String network_id;
-
-         protected ExternalGatewayInfo(String network_id) {
-            this.network_id = network_id;
-         }
-      }
-   }
-
-   protected String name;
-   protected Boolean adminStateUp;
-   protected ExternalGatewayInfo externalGatewayInfo;
-
-   protected CreateRouterOptions() {
-      this.name = null;
-      this.adminStateUp = null;
-      this.externalGatewayInfo = null;
-   }
-
-   public CreateRouterOptions(String name, Boolean adminStateUp, ExternalGatewayInfo externalGatewayInfo) {
-      this.name = name;
-      this.adminStateUp = adminStateUp;
-      this.externalGatewayInfo = externalGatewayInfo;
-   }
-
-   /**
-    * @return the name for the router
-    */
-   public String getName() {
-      return name;
-   }
-
-   /**
-    * @return the administrative state of the router
-    */
-   public Boolean getAdminStateUp() {
-      return adminStateUp;
-   }
-
-   /**
-    * @return the external gateway info for the router
-    */
-   public ExternalGatewayInfo getExternalGatewayInfo() {
-      return externalGatewayInfo;
-   }
-
-   @Override
-   public <R extends HttpRequest> R bindToRequest(R request, Map<String, Object> postParams) {
-      CreateRouterRequest createRouterRequest = new CreateRouterRequest();
-
-      if (this.name != null)
-         createRouterRequest.name = this.name;
-      if (this.adminStateUp != null)
-         createRouterRequest.admin_state_up = this.adminStateUp;
-      if (this.externalGatewayInfo != null)
-         createRouterRequest.external_gateway_info = new CreateRouterRequest.ExternalGatewayInfo(this.externalGatewayInfo.getNetworkId());
-
-      return bindToRequest(request, ImmutableMap.of("router", createRouterRequest));
-   }
-
-   @Override
-   public <R extends HttpRequest> R bindToRequest(R request, Object input) {
-      return jsonBinder.bindToRequest(request, input);
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/CreateSubnetBulkOptions.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/CreateSubnetBulkOptions.java
deleted file mode 100644
index ae85ad1..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/CreateSubnetBulkOptions.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.options;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
-import org.jclouds.http.HttpRequest;
-import org.jclouds.openstack.neutron.v2_0.domain.BulkSubnet;
-import org.jclouds.openstack.neutron.v2_0.domain.HostRoute;
-import org.jclouds.rest.MapBinder;
-import org.jclouds.rest.binders.BindToJsonPayload;
-
-import javax.inject.Inject;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-public class CreateSubnetBulkOptions implements MapBinder {
-
-   @Inject
-   private BindToJsonPayload jsonBinder;
-
-   public static Builder<?> builder() {
-      return new ConcreteBuilder();
-   }
-
-   public Builder<?> toBuilder() {
-      return new ConcreteBuilder().fromCreateSubnetBulkOptions(this);
-   }
-
-   public abstract static class Builder<T extends Builder<T>> {
-      protected abstract T self();
-
-      protected List<BulkSubnet> subnets;
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.CreateSubnetBulkOptions#getSubnets()
-       */
-      public T subnets(Collection<BulkSubnet> subnets) {
-         this.subnets = ImmutableList.copyOf(subnets);
-         return self();
-      }
-
-      public CreateSubnetBulkOptions build() {
-         return new CreateSubnetBulkOptions(this.subnets);
-      }
-
-      public T fromCreateSubnetBulkOptions(CreateSubnetBulkOptions in) {
-         return this.subnets(in.getSubnets());
-      }
-   }
-
-   private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
-      @Override
-      protected ConcreteBuilder self() {
-         return this;
-      }
-   }
-
-   private final List<BulkSubnet> subnets;
-
-   protected CreateSubnetBulkOptions() {
-      this.subnets = Lists.newArrayList();
-   }
-
-   public CreateSubnetBulkOptions(List<BulkSubnet> subnets) {
-      this.subnets = subnets != null ? ImmutableList.copyOf(subnets) : Lists.<BulkSubnet>newArrayList();
-   }
-
-   /**
-    * @return The list of subnets to create
-    */
-   public List<BulkSubnet> getSubnets() {
-      return subnets;
-   }
-
-   @Override
-   public <R extends HttpRequest> R bindToRequest(R request, Map<String, Object> postParams) {
-      List<CreateSubnetOptions.CreateSubnetRequest> createSubnetRequests = Lists.newArrayList();
-
-      for (BulkSubnet subnet : subnets) {
-         CreateSubnetOptions.CreateSubnetRequest createSubnetRequest =
-            new CreateSubnetOptions.CreateSubnetRequest(
-               checkNotNull(subnet.getNetworkId(), "network id parameter not present"),
-               checkNotNull(subnet.getIpVersion(), "ip version parameter not present"),
-               checkNotNull(subnet.getCidr(), "cidr parameter not present")
-            );
-
-         if (subnet.getName() != null)
-            createSubnetRequest.name = subnet.getName();
-         if (!subnet.getAllocationPools().isEmpty())
-            createSubnetRequest.allocation_pools = subnet.getAllocationPools();
-         if (subnet.getGatewayIp() != null)
-            createSubnetRequest.gateway_ip = subnet.getGatewayIp();
-         if (subnet.getEnableDhcp() != null)
-            createSubnetRequest.enable_dhcp = subnet.getEnableDhcp();
-         if (!subnet.getDnsNameServers().isEmpty())
-            createSubnetRequest.dns_nameservers = subnet.getDnsNameServers();
-         if (!subnet.getHostRoutes().isEmpty()) {
-            createSubnetRequest.host_routes = Sets.newHashSet();
-            for (HostRoute hostRoute : subnet.getHostRoutes()) {
-               CreateSubnetOptions.CreateSubnetRequest.HostRoute requestHostRoute = new CreateSubnetOptions.CreateSubnetRequest.HostRoute();
-               requestHostRoute.destination = hostRoute.getDestinationCidr();
-               requestHostRoute.nexthop = hostRoute.getNextHop();
-               createSubnetRequest.host_routes.add(requestHostRoute);
-            }
-         }
-
-         createSubnetRequests.add(createSubnetRequest);
-      }
-
-      return bindToRequest(request, ImmutableMap.of("subnets", createSubnetRequests));
-   }
-
-   @Override
-   public <R extends HttpRequest> R bindToRequest(R request, Object input) {
-      return jsonBinder.bindToRequest(request, input);
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/CreateSubnetOptions.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/CreateSubnetOptions.java
deleted file mode 100644
index c562e06..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/CreateSubnetOptions.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.options;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Sets;
-import org.jclouds.http.HttpRequest;
-import org.jclouds.openstack.neutron.v2_0.domain.AllocationPool;
-import org.jclouds.openstack.neutron.v2_0.domain.HostRoute;
-import org.jclouds.rest.MapBinder;
-import org.jclouds.rest.binders.BindToJsonPayload;
-
-import javax.inject.Inject;
-import java.util.Collection;
-import java.util.Map;
-import java.util.Set;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-public class CreateSubnetOptions implements MapBinder {
-
-   @Inject
-   private BindToJsonPayload jsonBinder;
-
-   public static Builder<?> builder() {
-      return new ConcreteBuilder();
-   }
-
-   public Builder<?> toBuilder() {
-      return new ConcreteBuilder().fromCreateSubnetOptions(this);
-   }
-
-   public abstract static class Builder<T extends Builder<T>> {
-      protected abstract T self();
-
-      protected String name;
-      protected Set<AllocationPool> allocationPools;
-      protected String gatewayIp;
-      protected Boolean enableDhcp;
-      protected Set<String> dnsNameServers;
-      protected Set<HostRoute> hostRoutes;
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.CreateSubnetOptions#getName()
-       */
-      public T name(String name) {
-         this.name = name;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.CreateSubnetOptions#getAllocationPools()
-       */
-      public T allocationPools(Collection<AllocationPool> allocationPools) {
-         this.allocationPools = ImmutableSet.copyOf(allocationPools);
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.CreateSubnetOptions#getGatewayIp()
-       */
-      public T gatewayIp(String gatewayIp) {
-         this.gatewayIp = gatewayIp;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.CreateSubnetOptions#getEnableDhcp()
-       */
-      public T enableDhcp(Boolean enableDhcp) {
-         this.enableDhcp = enableDhcp;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.CreateSubnetOptions#getDnsNameServers()
-       */
-      public T dnsNameServers(Collection<String> dnsNameServers) {
-         this.dnsNameServers = ImmutableSet.copyOf(dnsNameServers);
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.CreateSubnetOptions#getHostRoutes()
-       */
-      public T hostRoutes(Collection<HostRoute> hostRoutes) {
-         this.hostRoutes = ImmutableSet.copyOf(hostRoutes);
-         return self();
-      }
-
-      public CreateSubnetOptions build() {
-         return new CreateSubnetOptions(name, allocationPools, gatewayIp, enableDhcp, dnsNameServers, hostRoutes);
-      }
-
-      public T fromCreateSubnetOptions(CreateSubnetOptions in) {
-         return this.name(in.getName())
-            .allocationPools(in.getAllocationPools())
-            .gatewayIp(in.getGatewayIp())
-            .enableDhcp(in.getEnableDhcp())
-            .dnsNameServers(in.getDnsNameServers())
-            .hostRoutes(in.getHostRoutes());
-      }
-   }
-
-   private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
-      @Override
-      protected ConcreteBuilder self() {
-         return this;
-      }
-   }
-
-   protected static class CreateSubnetRequest {
-      protected String network_id;
-      protected Integer ip_version;
-      protected String cidr;
-      protected String name;
-      protected Set<AllocationPool> allocation_pools;
-      protected String gateway_ip;
-      protected Boolean enable_dhcp;
-      protected Set<String> dns_nameservers;
-      protected Set<HostRoute> host_routes;
-
-      protected CreateSubnetRequest(String networkId, Integer ipVersion, String cidr) {
-         this.network_id = networkId;
-         this.ip_version = ipVersion;
-         this.cidr = cidr;
-      }
-
-      protected static class HostRoute {
-         protected String destination;
-         protected String nexthop;
-      }
-   }
-
-   private final String name;
-   private final Set<AllocationPool> allocationPools;
-   private final String gatewayIp;
-   private final Boolean enableDhcp;
-   private final Set<String> dnsNameServers;
-   private final Set<HostRoute> hostRoutes;
-
-   protected CreateSubnetOptions() {
-      this.name = null;
-      this.allocationPools = Sets.newHashSet();
-      this.gatewayIp = null;
-      this.enableDhcp = null;
-      this.dnsNameServers = Sets.newHashSet();
-      this.hostRoutes = Sets.newHashSet();
-   }
-
-   public CreateSubnetOptions(String name, Set<AllocationPool> allocationPools, String gatewayIp,
-                              Boolean enableDhcp, Set<String> dnsNameServers, Set<HostRoute> hostRoutes) {
-      this.name = name;
-      this.allocationPools = allocationPools != null ? ImmutableSet.copyOf(allocationPools) : Sets.<AllocationPool>newHashSet();
-      this.gatewayIp = gatewayIp;
-      this.enableDhcp = enableDhcp;
-      this.dnsNameServers = dnsNameServers != null ? ImmutableSet.copyOf(dnsNameServers) : Sets.<String>newHashSet();
-      this.hostRoutes = hostRoutes != null ? ImmutableSet.copyOf(hostRoutes) : Sets.<HostRoute>newHashSet();
-   }
-
-   /**
-    * @return the name for the subnet
-    */
-   public String getName() {
-      return name;
-   }
-
-   /**
-    * @return the sub-ranges of cidr which will be available for dynamic allocation to ports
-    */
-   public Set<AllocationPool> getAllocationPools() {
-      return allocationPools;
-   }
-
-   /**
-    * @return the default gateway which will be used by devices in this subnet
-    */
-   public String getGatewayIp() {
-      return gatewayIp;
-   }
-
-   /**
-    * @return true to enable DHCP, false to disable
-    */
-   public Boolean getEnableDhcp() {
-      return enableDhcp;
-   }
-
-   /**
-    * @return the set of DNS name servers to be used by hosts in this subnet.
-    */
-   public Set<String> getDnsNameServers() {
-      return dnsNameServers;
-   }
-
-   /**
-    * @return the set of routes that should be used by devices with IPs from this subnet
-    */
-   public Set<HostRoute> getHostRoutes() {
-      return hostRoutes;
-   }
-
-   @Override
-   public <R extends HttpRequest> R bindToRequest(R request, Map<String, Object> postParams) {
-      CreateSubnetRequest createSubnetRequest =
-         new CreateSubnetRequest(
-            checkNotNull(postParams.get("network_id"), "networkId not present").toString(),
-            Integer.parseInt(checkNotNull(postParams.get("ip_version"), "ipVersion not present").toString()),
-            checkNotNull(postParams.get("cidr"), "cidr not present").toString()
-         );
-
-      if (this.name != null)
-         createSubnetRequest.name = this.name;
-      if (!this.allocationPools.isEmpty())
-         createSubnetRequest.allocation_pools = this.allocationPools;
-      if (this.gatewayIp != null)
-         createSubnetRequest.gateway_ip = this.gatewayIp;
-      if (this.enableDhcp != null)
-         createSubnetRequest.enable_dhcp = this.enableDhcp;
-      if (!this.dnsNameServers.isEmpty())
-         createSubnetRequest.dns_nameservers = this.dnsNameServers;
-      if (!this.hostRoutes.isEmpty()) {
-         createSubnetRequest.host_routes = Sets.newHashSet();
-         for (HostRoute hostRoute : this.hostRoutes) {
-            CreateSubnetRequest.HostRoute requestHostRoute = new CreateSubnetRequest.HostRoute();
-            requestHostRoute.destination = hostRoute.getDestinationCidr();
-            requestHostRoute.nexthop = hostRoute.getNextHop();
-            createSubnetRequest.host_routes.add(requestHostRoute);
-         }
-      }
-
-      return bindToRequest(request, ImmutableMap.of("subnet", createSubnetRequest));
-   }
-
-   @Override
-   public <R extends HttpRequest> R bindToRequest(R request, Object input) {
-      return jsonBinder.bindToRequest(request, input);
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/EmptyOptions.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/EmptyOptions.java
deleted file mode 100644
index b5a3d9d..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/EmptyOptions.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.options;
-
-import com.google.inject.Inject;
-import org.jclouds.http.HttpRequest;
-import org.jclouds.rest.MapBinder;
-import org.jclouds.rest.binders.BindToJsonPayload;
-
-import java.util.Map;
-
-/**
- * This class is used for methods who don't need a wrapper around their JSON body
- */
-public class EmptyOptions implements MapBinder {
-
-   @Inject
-   private BindToJsonPayload jsonBinder;
-
-   @Override
-   public <R extends HttpRequest> R bindToRequest(R request, Map<String, Object> postParams) {
-      return bindToRequest(request, (Object) postParams);
-   }
-
-   @Override
-   public <R extends HttpRequest> R bindToRequest(R request, Object input) {
-      return jsonBinder.bindToRequest(request, input);
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/UpdateNetworkOptions.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/UpdateNetworkOptions.java
deleted file mode 100644
index e794acf..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/UpdateNetworkOptions.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.options;
-
-import com.google.common.collect.ImmutableMap;
-import org.jclouds.http.HttpRequest;
-import org.jclouds.rest.MapBinder;
-import org.jclouds.rest.binders.BindToJsonPayload;
-
-import javax.inject.Inject;
-import java.util.Map;
-
-public class UpdateNetworkOptions implements MapBinder {
-
-   @Inject
-   private BindToJsonPayload jsonBinder;
-
-   public static Builder<?> builder() {
-      return new ConcreteBuilder();
-   }
-
-   public Builder<?> toBuilder() {
-      return new ConcreteBuilder().fromUpdateNetworkOptions(this);
-   }
-
-   public abstract static class Builder<T extends Builder<T>> {
-      protected abstract T self();
-
-      protected String name;
-      protected Boolean adminStateUp;
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.UpdateNetworkOptions#getName()
-       */
-      public T name(String name) {
-         this.name = name;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.UpdateNetworkOptions#getAdminStateUp()
-       */
-      public T adminStateUp(Boolean adminStateUp) {
-         this.adminStateUp = adminStateUp;
-         return self();
-      }
-
-      public UpdateNetworkOptions build() {
-         return new UpdateNetworkOptions(name, adminStateUp);
-      }
-
-      public T fromUpdateNetworkOptions(UpdateNetworkOptions options) {
-         return this.name(options.getName()).adminStateUp(options.getAdminStateUp());
-      }
-   }
-
-   private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
-      @Override
-      protected ConcreteBuilder self() {
-         return this;
-      }
-   }
-
-   private static class UpdateNetworkRequest {
-      protected String name;
-      protected Boolean admin_state_up;
-   }
-
-   private final String name;
-   private final Boolean adminStateUp;
-
-   protected UpdateNetworkOptions() {
-      this.name = null;
-      this.adminStateUp = null;
-   }
-
-   public UpdateNetworkOptions(String name, Boolean adminStateUp) {
-      this.name = name;
-      this.adminStateUp = adminStateUp;
-   }
-
-   /**
-    * @return the new name for the network
-    */
-   public String getName() {
-      return name;
-   }
-
-   /**
-    * @return the new administrative state for the network. If false, the network does not forward packets.
-    */
-   public boolean getAdminStateUp() {
-      return adminStateUp;
-   }
-
-   @Override
-   public <R extends HttpRequest> R bindToRequest(R request, Map<String, Object> postParams) {
-      UpdateNetworkRequest updateNetworkRequest = new UpdateNetworkRequest();
-
-      if (this.name != null)
-         updateNetworkRequest.name = this.name;
-      if (this.adminStateUp != null)
-         updateNetworkRequest.admin_state_up = this.adminStateUp;
-
-      return bindToRequest(request, ImmutableMap.of("network", updateNetworkRequest));
-   }
-
-   @Override
-   public <R extends HttpRequest> R bindToRequest(R request, Object input) {
-      return jsonBinder.bindToRequest(request, input);
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/UpdatePortOptions.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/UpdatePortOptions.java
deleted file mode 100644
index dfbc820..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/UpdatePortOptions.java
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.options;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Sets;
-import org.jclouds.http.HttpRequest;
-import org.jclouds.openstack.neutron.v2_0.domain.IP;
-import org.jclouds.rest.MapBinder;
-import org.jclouds.rest.binders.BindToJsonPayload;
-
-import javax.inject.Inject;
-import java.util.Collection;
-import java.util.Map;
-import java.util.Set;
-
-public class UpdatePortOptions implements MapBinder {
-
-   @Inject
-   private BindToJsonPayload jsonBinder;
-
-   public static Builder<?> builder() {
-      return new ConcreteBuilder();
-   }
-
-   public Builder<?> toBuilder() {
-      return new ConcreteBuilder().fromUpdatePortOptions(this);
-   }
-
-   public abstract static class Builder<T extends Builder<T>> {
-      protected abstract T self();
-
-      protected String name;
-      protected Boolean adminStateUp;
-      protected String deviceId;
-      protected String deviceOwner;
-      protected Set<IP> fixedIps;
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.UpdatePortOptions#getName()
-       */
-      public T name(String name) {
-         this.name = name;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.UpdatePortOptions#getAdminStateUp()
-       */
-      public T adminStateUp(Boolean adminStateUp) {
-         this.adminStateUp = adminStateUp;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.UpdatePortOptions#getDeviceId()
-       */
-      public T deviceId(String deviceId) {
-         this.deviceId = deviceId;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.UpdatePortOptions#getDeviceOwner()
-       */
-      public T deviceOwner(String deviceOwner) {
-         this.deviceOwner = deviceOwner;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.UpdatePortOptions#getFixedIps()
-       */
-      public T fixedIps(Collection<IP> fixedIps) {
-         this.fixedIps = ImmutableSet.copyOf(fixedIps);
-         return self();
-      }
-
-      public UpdatePortOptions build() {
-         return new UpdatePortOptions(name, adminStateUp, deviceId, deviceOwner, fixedIps);
-      }
-
-      public T fromUpdatePortOptions(UpdatePortOptions options) {
-         return this.name(options.getName())
-            .adminStateUp(options.getAdminStateUp())
-            .deviceId(options.getDeviceId())
-            .deviceOwner(options.getDeviceOwner())
-            .fixedIps(options.getFixedIps());
-      }
-   }
-
-   private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
-      @Override
-      protected ConcreteBuilder self() {
-         return this;
-      }
-   }
-
-   private static class UpdatePortRequest {
-      protected String name;
-      protected Boolean admin_state_up;
-      protected String device_id;
-      protected String device_owner;
-      protected Set<IP> fixed_ips;
-
-      private static class IP {
-         protected String ip_address;
-         protected String subnet_id;
-      }
-   }
-
-   private final String name;
-   private final Boolean adminStateUp;
-   private final String deviceId;
-   private final String deviceOwner;
-   private final Set<IP> fixedIps;
-
-   protected UpdatePortOptions() {
-      this.name = null;
-      this.adminStateUp = null;
-      this.deviceId = null;
-      this.deviceOwner = null;
-      this.fixedIps = Sets.newHashSet();
-   }
-
-   public UpdatePortOptions(String name, Boolean adminStateUp, String deviceId, String deviceOwner, Set<IP> fixedIps) {
-      this.name = name;
-      this.adminStateUp = adminStateUp;
-      this.deviceId = deviceId;
-      this.deviceOwner = deviceOwner;
-      this.fixedIps = fixedIps != null ? ImmutableSet.copyOf(fixedIps) : Sets.<IP>newHashSet();
-   }
-
-   /**
-    * @return the new name for the port
-    */
-   public String getName() {
-      return name;
-   }
-
-   /**
-    * @return the new administrative state for the port. If false, port does not forward packets.
-    */
-   public Boolean getAdminStateUp() {
-      return adminStateUp;
-   }
-
-   /**
-    * @return the new device id for the port
-    */
-   public String getDeviceId() {
-      return deviceId;
-   }
-
-   /**
-    * @return the new device owner for the port
-    */
-   public String getDeviceOwner() {
-      return deviceOwner;
-   }
-
-   /**
-    * @return a new set of fixed ips this port will get assigned
-    */
-   public Set<IP> getFixedIps() {
-      return fixedIps;
-   }
-
-   @Override
-   public <R extends HttpRequest> R bindToRequest(R request, Map<String, Object> postParams) {
-      UpdatePortRequest updatePortRequest = new UpdatePortRequest();
-
-      if (this.name != null)
-         updatePortRequest.name = this.name;
-      if (this.adminStateUp != null)
-         updatePortRequest.admin_state_up = this.adminStateUp;
-      if (this.deviceId != null)
-         updatePortRequest.device_id = this.deviceId;
-      if (this.deviceOwner != null)
-         updatePortRequest.device_owner = this.deviceOwner;
-      if (!this.fixedIps.isEmpty()) {
-         updatePortRequest.fixed_ips = Sets.newHashSet();
-         for (IP fixedIp : this.fixedIps) {
-            UpdatePortRequest.IP requestIp = new UpdatePortRequest.IP();
-            requestIp.ip_address = fixedIp.getIpAddress();
-            requestIp.subnet_id = fixedIp.getSubnetId();
-            updatePortRequest.fixed_ips.add(requestIp);
-         }
-      }
-
-      return bindToRequest(request, ImmutableMap.of("port", updatePortRequest));
-   }
-
-   @Override
-   public <R extends HttpRequest> R bindToRequest(R request, Object input) {
-      return jsonBinder.bindToRequest(request, input);
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/UpdateRouterOptions.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/UpdateRouterOptions.java
deleted file mode 100644
index c614e91..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/UpdateRouterOptions.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.options;
-
-import com.google.common.collect.ImmutableMap;
-import org.jclouds.http.HttpRequest;
-import org.jclouds.openstack.neutron.v2_0.domain.ExternalGatewayInfo;
-import org.jclouds.rest.MapBinder;
-import org.jclouds.rest.binders.BindToJsonPayload;
-
-import javax.inject.Inject;
-import java.util.Map;
-
-public class UpdateRouterOptions implements MapBinder {
-
-   @Inject
-   private BindToJsonPayload jsonBinder;
-
-   public static Builder<?> builder() {
-      return new ConcreteBuilder();
-   }
-
-   public Builder<?> toBuilder() {
-      return new ConcreteBuilder().fromUpdateRouterOptions(this);
-   }
-
-   public abstract static class Builder<T extends Builder<T>> {
-      protected abstract T self();
-
-      protected String name;
-      protected Boolean adminStateUp;
-      protected ExternalGatewayInfo externalGatewayInfo;
-
-      /**
-       * @see UpdateRouterOptions#getName()
-       */
-      public T name(String name) {
-         this.name = name;
-         return self();
-      }
-
-      /**
-       * @see UpdateRouterOptions#getAdminStateUp()
-       */
-      public T adminStateUp(Boolean adminStateUp) {
-         this.adminStateUp = adminStateUp;
-         return self();
-      }
-
-      /**
-       * @see UpdateRouterOptions#getExternalGatewayInfo()
-       */
-      public T externalGatewayInfo(ExternalGatewayInfo externalGatewayInfo) {
-         this.externalGatewayInfo = externalGatewayInfo;
-         return self();
-      }
-
-      public UpdateRouterOptions build() {
-         return new UpdateRouterOptions(name, adminStateUp, externalGatewayInfo);
-      }
-
-      public T fromUpdateRouterOptions(UpdateRouterOptions options) {
-         return this.name(options.getName())
-            .adminStateUp(options.getAdminStateUp())
-            .externalGatewayInfo(options.getExternalGatewayInfo());
-      }
-   }
-
-   private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
-      @Override
-      protected ConcreteBuilder self() {
-         return this;
-      }
-   }
-
-   protected static class UpdateRouterRequest {
-      protected String name;
-      protected Boolean admin_state_up;
-      protected ExternalGatewayInfo external_gateway_info;
-
-      protected UpdateRouterRequest() {
-      }
-
-      protected static final class ExternalGatewayInfo {
-         protected String network_id;
-
-         protected ExternalGatewayInfo(String network_id) {
-            this.network_id = network_id;
-         }
-      }
-   }
-
-   protected String name;
-   protected Boolean adminStateUp;
-   protected ExternalGatewayInfo externalGatewayInfo;
-
-   protected UpdateRouterOptions() {
-      this.name = null;
-      this.adminStateUp = null;
-      this.externalGatewayInfo = null;
-   }
-
-   public UpdateRouterOptions(String name, Boolean adminStateUp, ExternalGatewayInfo externalGatewayInfo) {
-      this.name = name;
-      this.adminStateUp = adminStateUp;
-      this.externalGatewayInfo = externalGatewayInfo;
-   }
-
-   /**
-    * @return the new name for the router
-    */
-   public String getName() {
-      return name;
-   }
-
-   /**
-    * @return the new administrative state for the router
-    */
-   public Boolean getAdminStateUp() {
-      return adminStateUp;
-   }
-
-   /**
-    * @return the new information on external gateway for the router
-    */
-   public ExternalGatewayInfo getExternalGatewayInfo() {
-      return externalGatewayInfo;
-   }
-
-   @Override
-   public <R extends HttpRequest> R bindToRequest(R request, Map<String, Object> postParams) {
-      UpdateRouterRequest updateRouterRequest = new UpdateRouterRequest();
-
-      if (this.name != null)
-         updateRouterRequest.name = this.name;
-      if (this.adminStateUp != null)
-         updateRouterRequest.admin_state_up = this.adminStateUp;
-      if (this.externalGatewayInfo != null)
-         updateRouterRequest.external_gateway_info = new UpdateRouterRequest.ExternalGatewayInfo(this.externalGatewayInfo.getNetworkId());
-
-      return bindToRequest(request, ImmutableMap.of("router", updateRouterRequest));
-   }
-
-   @Override
-   public <R extends HttpRequest> R bindToRequest(R request, Object input) {
-      return jsonBinder.bindToRequest(request, input);
-   }
-
-}
diff --git a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/UpdateSubnetOptions.java b/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/UpdateSubnetOptions.java
deleted file mode 100644
index 3f2ec26..0000000
--- a/openstack-neutron/src/main/java/org/jclouds/openstack/neutron/v2_0/options/UpdateSubnetOptions.java
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.options;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Sets;
-import org.jclouds.http.HttpRequest;
-import org.jclouds.openstack.neutron.v2_0.domain.HostRoute;
-import org.jclouds.rest.MapBinder;
-import org.jclouds.rest.binders.BindToJsonPayload;
-
-import javax.inject.Inject;
-import java.util.Collection;
-import java.util.Map;
-import java.util.Set;
-
-public class UpdateSubnetOptions implements MapBinder {
-
-   @Inject
-   private BindToJsonPayload jsonBinder;
-
-   public static Builder<?> builder() {
-      return new ConcreteBuilder();
-   }
-
-   public Builder<?> toBuilder() {
-      return new ConcreteBuilder().fromUpdateSubnetOptions(this);
-   }
-
-   public abstract static class Builder<T extends Builder<T>> {
-      protected abstract T self();
-
-      protected String name;
-      protected String gatewayIp;
-      protected Boolean enableDhcp;
-      protected Set<String> dnsNameServers;
-      protected Set<HostRoute> hostRoutes;
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.UpdateSubnetOptions#getName()
-       */
-      public T name(String name) {
-         this.name = name;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.UpdateSubnetOptions#getGatewayIp()
-       */
-      public T gatewayIp(String gatewayIp) {
-         this.gatewayIp = gatewayIp;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.UpdateSubnetOptions#getEnableDhcp()
-       */
-      public T enableDhcp(Boolean enableDhcp) {
-         this.enableDhcp = enableDhcp;
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.UpdateSubnetOptions#getDnsNameServers()
-       */
-      public T dnsNameServers(Collection<String> dnsNameServers) {
-         this.dnsNameServers = ImmutableSet.copyOf(dnsNameServers);
-         return self();
-      }
-
-      /**
-       * @see org.jclouds.openstack.neutron.v2_0.options.UpdateSubnetOptions#getHostRoutes()
-       */
-      public T hostRoutes(Collection<HostRoute> hostRoutes) {
-         this.hostRoutes = ImmutableSet.copyOf(hostRoutes);
-         return self();
-      }
-
-      public UpdateSubnetOptions build() {
-         return new UpdateSubnetOptions(name, gatewayIp, enableDhcp, dnsNameServers, hostRoutes);
-      }
-
-      public T fromUpdateSubnetOptions(UpdateSubnetOptions in) {
-         return this.name(in.getName())
-            .gatewayIp(in.getGatewayIp())
-            .enableDhcp(in.getEnableDhcp())
-            .dnsNameServers(in.getDnsNameServers())
-            .hostRoutes(in.getHostRoutes());
-      }
-   }
-
-   private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
-      @Override
-      protected ConcreteBuilder self() {
-         return this;
-      }
-   }
-
-   private static class UpdateSubnetRequest {
-      protected String name;
-      protected String gateway_ip;
-      protected Boolean enable_dhcp;
-      protected Set<String> dns_nameservers;
-      protected Set<HostRoute> host_routes;
-
-      private static class HostRoute {
-         protected String destination;
-         protected String nexthop;
-      }
-   }
-
-   private final String name;
-   private final String gatewayIp;
-   private final Boolean enableDhcp;
-   private final Set<String> dnsNameServers;
-   private final Set<HostRoute> hostRoutes;
-
-   protected UpdateSubnetOptions() {
-      this.name = null;
-      this.gatewayIp = null;
-      this.enableDhcp = null;
-      this.dnsNameServers = Sets.newHashSet();
-      this.hostRoutes = Sets.newHashSet();
-   }
-
-   public UpdateSubnetOptions(String name, String gatewayIp, Boolean enableDhcp, Set<String> dnsNameServers, Set<HostRoute> hostRoutes) {
-      this.name = name;
-      this.gatewayIp = gatewayIp;
-      this.enableDhcp = enableDhcp;
-      this.dnsNameServers = dnsNameServers != null ? ImmutableSet.copyOf(dnsNameServers) : Sets.<String>newHashSet();
-      this.hostRoutes = hostRoutes != null ? ImmutableSet.copyOf(hostRoutes) : Sets.<HostRoute>newHashSet();
-   }
-
-   /**
-    * @return the new name for the subnet
-    */
-   public String getName() {
-      return name;
-   }
-
-   /**
-    * @return the new default gateway used by devices in this subnet
-    */
-   public String getGatewayIp() {
-      return gatewayIp;
-   }
-
-   /**
-    * @return true if DHCP is enabled for this subnet, false if not
-    */
-   public Boolean getEnableDhcp() {
-      return enableDhcp;
-   }
-
-   /**
-    * @return the new set of DNS name servers used by hosts in this subnet
-    */
-   public Set<String> getDnsNameServers() {
-      return dnsNameServers;
-   }
-
-   /**
-    * @return the new set of routes that should be used by devices with IPs from this subnet
-    */
-   public Set<HostRoute> getHostRoutes() {
-      return hostRoutes;
-   }
-
-   @Override
-   public <R extends HttpRequest> R bindToRequest(R request, Map<String, Object> postParams) {
-      UpdateSubnetRequest updateSubnetRequest = new UpdateSubnetRequest();
-
-      if (this.name != null)
-         updateSubnetRequest.name = this.name;
-      if (this.gatewayIp != null)
-         updateSubnetRequest.gateway_ip = this.gatewayIp;
-      if (this.enableDhcp != null)
-         updateSubnetRequest.enable_dhcp = this.enableDhcp;
-      if (!this.dnsNameServers.isEmpty())
-         updateSubnetRequest.dns_nameservers = this.dnsNameServers;
-      if (!this.hostRoutes.isEmpty()) {
-         updateSubnetRequest.host_routes = Sets.newHashSet();
-         for (HostRoute hostRoute : this.hostRoutes) {
-            UpdateSubnetRequest.HostRoute requestHostRoute = new UpdateSubnetRequest.HostRoute();
-            requestHostRoute.destination = hostRoute.getDestinationCidr();
-            requestHostRoute.nexthop = hostRoute.getNextHop();
-            updateSubnetRequest.host_routes.add(requestHostRoute);
-         }
-      }
-
-      return bindToRequest(request, ImmutableMap.of("subnet", updateSubnetRequest));
-   }
-
-   @Override
-   public <R extends HttpRequest> R bindToRequest(R request, Object input) {
-      return jsonBinder.bindToRequest(request, input);
-   }
-
-}
diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/NeutronApiMetadataTest.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/NeutronApiMetadataTest.java
deleted file mode 100644
index db3019c..0000000
--- a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/NeutronApiMetadataTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0;
-
-import com.google.common.collect.ImmutableSet;
-import com.google.common.reflect.TypeToken;
-import org.jclouds.View;
-import org.jclouds.apis.internal.BaseApiMetadataTest;
-import org.testng.annotations.Test;
-
-@Test(groups = "unit", testName = "NeutronApiMetadataTest")
-public class NeutronApiMetadataTest extends BaseApiMetadataTest {
-   public NeutronApiMetadataTest() {
-      super(new NeutronApiMetadata(), ImmutableSet.<TypeToken<? extends View>>of());
-   }
-}
diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/extensions/RouterApiExpectTest.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/extensions/RouterApiExpectTest.java
deleted file mode 100644
index c3f04cc..0000000
--- a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/extensions/RouterApiExpectTest.java
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.extensions;
-
-import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertNull;
-import static org.testng.Assert.assertTrue;
-
-import java.util.Set;
-
-import javax.ws.rs.core.MediaType;
-
-import org.jclouds.http.HttpResponse;
-import org.jclouds.openstack.neutron.v2_0.domain.ExternalGatewayInfo;
-import org.jclouds.openstack.neutron.v2_0.domain.ReferenceWithName;
-import org.jclouds.openstack.neutron.v2_0.domain.Router;
-import org.jclouds.openstack.neutron.v2_0.domain.RouterInterface;
-import org.jclouds.openstack.neutron.v2_0.domain.State;
-import org.jclouds.openstack.neutron.v2_0.internal.BaseNeutronApiExpectTest;
-import org.jclouds.openstack.neutron.v2_0.options.CreateRouterOptions;
-import org.jclouds.openstack.neutron.v2_0.options.UpdateRouterOptions;
-import org.jclouds.openstack.neutron.v2_0.parse.ParseRouterTest;
-import org.jclouds.rest.AuthorizationException;
-import org.testng.annotations.Test;
-
-import com.google.common.collect.ImmutableSet;
-
-/**
- * Tests parsing and Guice wiring of RouterApi
- *
- */
-@Test(groups = "unit", testName = "RouterApiExpectTest")
-public class RouterApiExpectTest extends BaseNeutronApiExpectTest {
-
-   private static final String ZONE = "region-a.geo-1";
-
-   public void testListReferencesReturns2xx() {
-      RouterApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/routers").addQueryParam("fields", "id", "tenant_id", "name").build(),
-         HttpResponse.builder().statusCode(200).payload(payloadFromResourceWithContentType("/list_routers.json", APPLICATION_JSON)).build())
-         .getRouterExtensionForZone(ZONE).get();
-
-      Set<? extends ReferenceWithName> references = api.list().concat().toSet();
-      assertEquals(references, listOfReferencesWithNames());
-   }
-
-   public void testListReferencesReturns4xx() {
-      RouterApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/routers").addQueryParam("fields", "id", "tenant_id", "name").build(),
-         HttpResponse.builder().statusCode(404).build())
-         .getRouterExtensionForZone(ZONE).get();
-
-      assertTrue(api.list().concat().isEmpty());
-   }
-
-   public void testListReturns2xx() {
-      RouterApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/routers").build(),
-         HttpResponse.builder().statusCode(200).payload(payloadFromResourceWithContentType("/list_routers.json", APPLICATION_JSON)).build())
-         .getRouterExtensionForZone(ZONE).get();
-
-      Set<? extends Router> routers = api.listInDetail().concat().toSet();
-      assertEquals(routers, listOfRouters());
-   }
-
-   public void testListReturns4xx() {
-      RouterApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/routers").build(),
-         HttpResponse.builder().statusCode(404).build())
-         .getRouterExtensionForZone(ZONE).get();
-
-      assertTrue(api.listInDetail().concat().isEmpty());
-   }
-
-   public void testGetReturns2xx() {
-      RouterApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/routers/16dba3bc-f3fa-4775-afdc-237e12c72f6a").build(),
-         HttpResponse.builder().statusCode(200).payload(payloadFromResourceWithContentType("/router.json", APPLICATION_JSON)).build())
-         .getRouterExtensionForZone(ZONE).get();
-
-      Router router = api.get("16dba3bc-f3fa-4775-afdc-237e12c72f6a");
-      assertEquals(router, new ParseRouterTest().expected());
-   }
-
-   public void testGetReturns4xx() {
-      RouterApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/routers/16dba3bc-f3fa-4775-afdc-237e12c72f6a").build(),
-         HttpResponse.builder().statusCode(404).build())
-         .getRouterExtensionForZone(ZONE).get();
-
-      assertNull(api.get("16dba3bc-f3fa-4775-afdc-237e12c72f6a"));
-   }
-
-   public void testCreateReturns2xx() {
-      RouterApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/routers").method("POST")
-            .payload(payloadFromStringWithContentType("{\"router\":{\"name\":\"test\",\"external_gateway_info\":{\"network_id\":\"1234567890\"}}}", MediaType.APPLICATION_JSON)).build(),
-         HttpResponse.builder().statusCode(200).payload(payloadFromStringWithContentType("{\"router\":{\"id\":\"12345\",\"tenant_id\":\"6789\",\"external_gateway_info\":{\"network_id\":\"1234567890\"}}}", APPLICATION_JSON)).build())
-         .getRouterExtensionForZone(ZONE).get();
-
-      Router router = api.create(CreateRouterOptions.builder().name("test").externalGatewayInfo(ExternalGatewayInfo.builder().networkId("1234567890").build()).build());
-      assertEquals(router, Router.builder().id("12345").tenantId("6789").externalGatewayInfo(ExternalGatewayInfo.builder().networkId("1234567890").build()).build());
-   }
-
-   @Test(expectedExceptions = AuthorizationException.class)
-   public void testCreateReturns4xx() {
-      RouterApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/routers").method("POST")
-            .payload(payloadFromStringWithContentType("{\"router\":{\"name\":\"another-test\",\"external_gateway_info\":{\"network_id\":\"1234567890\"}}}", MediaType.APPLICATION_JSON)).build(),
-         HttpResponse.builder().statusCode(401).build())
-         .getRouterExtensionForZone(ZONE).get();
-
-      api.create(CreateRouterOptions.builder().name("another-test").externalGatewayInfo(ExternalGatewayInfo.builder().networkId("1234567890").build()).build());
-   }
-
-   public void testUpdateReturns2xx() {
-      RouterApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/routers/12345").method("PUT")
-            .payload(payloadFromStringWithContentType("{\"router\":{\"name\":\"another-test\",\"admin_state_up\":true}}", MediaType.APPLICATION_JSON)).build(),
-         HttpResponse.builder().statusCode(200).build())
-         .getRouterExtensionForZone(ZONE).get();
-
-      assertTrue(api.update("12345", UpdateRouterOptions.builder().name("another-test").adminStateUp(true).build()));
-   }
-
-   public void testUpdateReturns4xx() {
-      RouterApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/routers/12345").method("PUT")
-            .payload(payloadFromStringWithContentType("{\"router\":{\"name\":\"another-test\",\"admin_state_up\":true}}", MediaType.APPLICATION_JSON)).build(),
-         HttpResponse.builder().statusCode(404).build())
-         .getRouterExtensionForZone(ZONE).get();
-
-      assertFalse(api.update("12345", UpdateRouterOptions.builder().name("another-test").adminStateUp(true).build()));
-   }
-
-   public void testDeleteReturns2xx() {
-      RouterApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/routers/12345").method("DELETE").build(),
-         HttpResponse.builder().statusCode(200).build())
-         .getRouterExtensionForZone(ZONE).get();
-
-      assertTrue(api.delete("12345"));
-   }
-
-   @Test(expectedExceptions = AuthorizationException.class)
-   public void testDeleteReturns4xx() {
-      RouterApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/routers/12345").method("DELETE").build(),
-         HttpResponse.builder().statusCode(403).build())
-         .getRouterExtensionForZone(ZONE).get();
-
-      api.delete("12345");
-   }
-
-   public void testAddInterfaceForSubnetReturns2xx() {
-      RouterApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/routers/12345/add_router_interface").method("PUT")
-            .payload(payloadFromStringWithContentType("{\"subnet_id\":\"1234567890\"}", MediaType.APPLICATION_JSON)).build(),
-         HttpResponse.builder().statusCode(200).payload(payloadFromStringWithContentType("{\"subnet_id\":\"1234567890\",\"port_id\":\"987654321\"}", MediaType.APPLICATION_JSON)).build())
-         .getRouterExtensionForZone(ZONE).get();
-
-      RouterInterface routerInterface = api.addInterfaceForSubnet("12345", "1234567890");
-      assertEquals(routerInterface, RouterInterface.builder().subnetId("1234567890").portId("987654321").build());
-   }
-
-   @Test(expectedExceptions = AuthorizationException.class)
-   public void testAddInterfaceForSubnetReturns4xx() {
-      RouterApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/routers/12345/add_router_interface").method("PUT")
-            .payload(payloadFromStringWithContentType("{\"subnet_id\":\"1234567890\"}", MediaType.APPLICATION_JSON)).build(),
-         HttpResponse.builder().statusCode(403).build())
-         .getRouterExtensionForZone(ZONE).get();
-
-      api.addInterfaceForSubnet("12345", "1234567890");
-   }
-
-   public void testAddInterfaceForPortReturns2xx() {
-      RouterApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/routers/12345/add_router_interface").method("PUT")
-            .payload(payloadFromStringWithContentType("{\"port_id\":\"987654321\"}", MediaType.APPLICATION_JSON)).build(),
-         HttpResponse.builder().statusCode(200).payload(payloadFromStringWithContentType("{\"subnet_id\":\"1234567890\",\"port_id\":\"987654321\"}", MediaType.APPLICATION_JSON)).build())
-         .getRouterExtensionForZone(ZONE).get();
-
-      RouterInterface routerInterface = api.addInterfaceForPort("12345", "987654321");
-      assertEquals(routerInterface, RouterInterface.builder().subnetId("1234567890").portId("987654321").build());
-   }
-
-   @Test(expectedExceptions = AuthorizationException.class)
-   public void testAddInterfaceForPortReturns4xx() {
-      RouterApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/routers/12345/add_router_interface").method("PUT")
-            .payload(payloadFromStringWithContentType("{\"port_id\":\"1234567890\"}", MediaType.APPLICATION_JSON)).build(),
-         HttpResponse.builder().statusCode(403).build())
-         .getRouterExtensionForZone(ZONE).get();
-
-      api.addInterfaceForPort("12345", "1234567890");
-   }
-
-   public void testRemoveInterfaceForSubnetReturns2xx() {
-      RouterApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/routers/12345/remove_router_interface").method("PUT")
-            .payload(payloadFromStringWithContentType("{\"subnet_id\":\"1234567890\"}", MediaType.APPLICATION_JSON)).build(),
-         HttpResponse.builder().statusCode(200).build())
-         .getRouterExtensionForZone(ZONE).get();
-
-      api.removeInterfaceForSubnet("12345", "1234567890");
-   }
-
-   @Test(expectedExceptions = AuthorizationException.class)
-   public void testRemoveInterfaceForSubnetReturns4xx() {
-      RouterApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/routers/12345/remove_router_interface").method("PUT")
-            .payload(payloadFromStringWithContentType("{\"subnet_id\":\"1234567890\"}", MediaType.APPLICATION_JSON)).build(),
-         HttpResponse.builder().statusCode(403).build())
-         .getRouterExtensionForZone(ZONE).get();
-
-      api.removeInterfaceForSubnet("12345", "1234567890");
-   }
-
-   public void testRemoveInterfaceForPortReturns2xx() {
-      RouterApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/routers/12345/remove_router_interface").method("PUT")
-            .payload(payloadFromStringWithContentType("{\"port_id\":\"1234567890\"}", MediaType.APPLICATION_JSON)).build(),
-         HttpResponse.builder().statusCode(200).build())
-         .getRouterExtensionForZone(ZONE).get();
-
-      api.removeInterfaceForPort("12345", "1234567890");
-   }
-
-   @Test(expectedExceptions = AuthorizationException.class)
-   public void testRemoveInterfaceForPortReturns4xx() {
-      RouterApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/routers/12345/remove_router_interface").method("PUT")
-            .payload(payloadFromStringWithContentType("{\"port_id\":\"1234567890\"}", MediaType.APPLICATION_JSON)).build(),
-         HttpResponse.builder().statusCode(403).build())
-         .getRouterExtensionForZone(ZONE).get();
-
-      api.removeInterfaceForPort("12345", "1234567890");
-   }
-
-   protected Set<Router> listOfRouters() {
-      return ImmutableSet.of(
-         Router.builder().state(State.ACTIVE).name("jclouds-test").tenantId("1234567890").id("16dba3bc-f3fa-4775-afdc-237e12c72f6a").build(),
-         Router.builder().state(State.ACTIVE).name("wibble").tenantId("1234567890").id("1a104cf5-cb18-4d35-9407-2fd2646d9d0b").build(),
-         Router.builder().state(State.ACTIVE).name("jclouds-test").tenantId("1234567890").id("31083ae2-420d-48b2-ac98-9f7a4fd8dbdc").build(),
-         Router.builder().state(State.ACTIVE).name("jclouds-test").tenantId("1234567890").id("49c6d6fa-ff2a-459d-b975-75a8d31c9a89").build(),
-         Router.builder().state(State.ACTIVE).name("wibble").tenantId("1234567890").id("5cb3d6f4-62cb-41c9-b964-ba7d9df79e4e").build(),
-         Router.builder().state(State.ACTIVE).name("jclouds-test").tenantId("1234567890").id("5d51d012-3491-4db7-b1b5-6f254015015d").build(),
-         Router.builder().state(State.ACTIVE).name("wibble").tenantId("1234567890").id("5f9cf7dc-22ca-4097-8e49-1cc8b23faf17").build(),
-         Router.builder().state(State.ACTIVE).name("jclouds-test").tenantId("1234567890").id("6319ecad-6bff-48b2-9b53-02ede8cb7588").build(),
-         Router.builder().state(State.ACTIVE).name("jclouds-test").tenantId("1234567890").id("6ba4c788-661f-49ab-9bf8-5f10cbbb2f57").build(),
-         Router.builder().state(State.ACTIVE).name("jclouds-test").tenantId("1234567890").id("74ed170b-5069-4353-ab38-9719766dc57e").build(),
-         Router.builder().state(State.ACTIVE).name("wibble").tenantId("1234567890").id("b71fcac1-e864-4031-8c5b-edbecd9ece36").build(),
-         Router.builder().state(State.ACTIVE).name("jclouds-test").tenantId("1234567890").id("c7681895-d84d-4650-9ca0-82c72036b855").build()
-      );
-   }
-
-}
diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/extensions/RouterApiLiveTest.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/extensions/RouterApiLiveTest.java
deleted file mode 100644
index e51a8c4..0000000
--- a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/extensions/RouterApiLiveTest.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.extensions;
-
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
-
-import java.util.Set;
-
-import org.jclouds.openstack.neutron.v2_0.domain.ExternalGatewayInfo;
-import org.jclouds.openstack.neutron.v2_0.domain.Network;
-import org.jclouds.openstack.neutron.v2_0.domain.NetworkType;
-import org.jclouds.openstack.neutron.v2_0.domain.Port;
-import org.jclouds.openstack.neutron.v2_0.domain.ReferenceWithName;
-import org.jclouds.openstack.neutron.v2_0.domain.Router;
-import org.jclouds.openstack.neutron.v2_0.domain.RouterInterface;
-import org.jclouds.openstack.neutron.v2_0.domain.Subnet;
-import org.jclouds.openstack.neutron.v2_0.features.NetworkApi;
-import org.jclouds.openstack.neutron.v2_0.features.PortApi;
-import org.jclouds.openstack.neutron.v2_0.features.SubnetApi;
-import org.jclouds.openstack.neutron.v2_0.internal.BaseNeutronApiLiveTest;
-import org.jclouds.openstack.neutron.v2_0.options.CreateNetworkOptions;
-import org.jclouds.openstack.neutron.v2_0.options.CreateRouterOptions;
-import org.jclouds.openstack.neutron.v2_0.options.UpdateRouterOptions;
-import org.testng.annotations.Test;
-
-/**
- * Tests parsing and Guice wiring of RouterApi
- *
- */
-@Test(groups = "live", testName = "RouterApiLiveTest")
-public class RouterApiLiveTest extends BaseNeutronApiLiveTest {
-
-   public void testGetAndListRouters() {
-      for (String zone : api.getConfiguredZones()) {
-         Set<? extends ReferenceWithName> references = api.getRouterExtensionForZone(zone).get().list().concat().toSet();
-         Set<? extends Router> routers = api.getRouterExtensionForZone(zone).get().listInDetail().concat().toSet();
-
-         assertNotNull(references);
-         assertNotNull(routers);
-         assertEquals(references.size(), routers.size());
-
-         for (Router router : routers) {
-            assertNotNull(router.getName());
-            assertTrue(references.contains(ReferenceWithName.builder().id(router.getId()).tenantId(router.getTenantId()).name(router.getName()).build()));
-
-            Router retrievedRouter = api.getRouterExtensionForZone(zone).get().get(router.getId());
-            assertEquals(router, retrievedRouter);
-         }
-      }
-   }
-
-   public void testCreateUpdateAndDeleteRouter() {
-      for (String zone : api.getConfiguredZones()) {
-         RouterApi routerApi = api.getRouterExtensionForZone(zone).get();
-         NetworkApi networkApi = api.getNetworkApiForZone(zone);
-         SubnetApi subnetApi = api.getSubnetApiForZone(zone);
-
-         Network network = networkApi.create(CreateNetworkOptions.builder().name("jclouds-network-test").external(true).networkType(NetworkType.LOCAL).build());
-         assertNotNull(network);
-
-         Subnet subnet = subnetApi.create(network.getId(), 4, "192.168.0.0/16");
-         assertNotNull(subnet);
-
-         Router ref = routerApi.create(CreateRouterOptions.builder().name("jclouds-router-test")
-            .externalGatewayInfo(ExternalGatewayInfo.builder().networkId(network.getId()).build()).build());
-         assertNotNull(ref);
-
-         Router router = routerApi.get(ref.getId());
-
-         assertEquals(router.getId(), ref.getId());
-         assertEquals(router.getName(), "jclouds-router-test");
-         assertEquals(router.getExternalGatewayInfo().getNetworkId(), network.getId());
-         assertTrue(routerApi.update(router.getId(), UpdateRouterOptions.builder().name("jclouds-router-test-rename").build()));
-
-         router = routerApi.get(ref.getId());
-
-         assertEquals(router.getId(), ref.getId());
-         assertEquals(router.getName(), "jclouds-router-test-rename");
-
-         ReferenceWithName ref2 = routerApi.create(CreateRouterOptions.builder().name("jclouds-router-test2")
-            .externalGatewayInfo(ExternalGatewayInfo.builder().networkId(network.getId()).build()).build());
-         assertNotNull(ref2);
-
-         assertTrue(routerApi.delete(ref.getId()));
-         assertTrue(routerApi.delete(ref2.getId()));
-         assertTrue(subnetApi.delete(subnet.getId()));
-         assertTrue(networkApi.delete(network.getId()));
-      }
-   }
-
-   public void testCreateAndDeleteRouterInterfaceForSubnet() {
-      for (String zone : api.getConfiguredZones()) {
-         RouterApi routerApi = api.getRouterExtensionForZone(zone).get();
-         NetworkApi networkApi = api.getNetworkApiForZone(zone);
-         SubnetApi subnetApi = api.getSubnetApiForZone(zone);
-
-         Network network = networkApi.create(CreateNetworkOptions.builder().name("jclouds-network-test").external(true).networkType(NetworkType.LOCAL).build());
-         assertNotNull(network);
-
-         Subnet subnet = subnetApi.create(network.getId(), 4, "192.168.0.0/16");
-         assertNotNull(subnet);
-
-         Network network2 = networkApi.create(CreateNetworkOptions.builder().name("jclouds-network-test2").external(true).networkType(NetworkType.LOCAL).build());
-         assertNotNull(network2);
-
-         Subnet subnet2 = subnetApi.create(network2.getId(), 4, "192.169.0.0/16");
-         assertNotNull(subnet2);
-
-         Router router = routerApi.create(CreateRouterOptions.builder().name("jclouds-router-test").build());
-         assertNotNull(router);
-
-         RouterInterface routerInterface = routerApi.addInterfaceForSubnet(router.getId(), subnet.getId());
-         assertNotNull(routerInterface);
-
-         RouterInterface routerInterface2 = routerApi.addInterfaceForSubnet(router.getId(), subnet2.getId());
-         assertNotNull(routerInterface2);
-
-         assertTrue(routerApi.removeInterfaceForSubnet(router.getId(), subnet.getId()));
-         assertTrue(routerApi.removeInterfaceForSubnet(router.getId(), subnet2.getId()));
-         assertTrue(routerApi.delete(router.getId()));
-         assertTrue(subnetApi.delete(subnet.getId()));
-         assertTrue(networkApi.delete(network.getId()));
-         assertTrue(subnetApi.delete(subnet2.getId()));
-         assertTrue(networkApi.delete(network2.getId()));
-      }
-   }
-
-   public void testCreateAndDeleteRouterInterfaceForPort() {
-      for (String zone : api.getConfiguredZones()) {
-         RouterApi routerApi = api.getRouterExtensionForZone(zone).get();
-         NetworkApi networkApi = api.getNetworkApiForZone(zone);
-         SubnetApi subnetApi = api.getSubnetApiForZone(zone);
-         PortApi portApi = api.getPortApiForZone(zone);
-
-         Network network = networkApi.create(CreateNetworkOptions.builder().name("jclouds-network-test").external(true).networkType(NetworkType.LOCAL).build());
-         assertNotNull(network);
-
-         Subnet subnet = subnetApi.create(network.getId(), 4, "192.168.0.0/16");
-         assertNotNull(subnet);
-
-         Network network2 = networkApi.create(CreateNetworkOptions.builder().name("jclouds-network-test2").external(true).networkType(NetworkType.LOCAL).build());
-         assertNotNull(network2);
-
-         Subnet subnet2 = subnetApi.create(network2.getId(), 4, "192.169.0.0/16");
-         assertNotNull(subnet2);
-
-         Port port = portApi.create(network.getId());
-         assertNotNull(port);
-
-         Port port2 = portApi.create(network2.getId());
-         assertNotNull(port2);
-
-         Router router = routerApi.create(CreateRouterOptions.builder().name("jclouds-router-test").build());
-         assertNotNull(router);
-
-         RouterInterface routerInterface = routerApi.addInterfaceForPort(router.getId(), port.getId());
-         assertNotNull(routerInterface);
-
-         RouterInterface routerInterface2 = routerApi.addInterfaceForPort(router.getId(), port2.getId());
-         assertNotNull(routerInterface2);
-
-         assertTrue(routerApi.removeInterfaceForPort(router.getId(), port.getId()));
-         assertTrue(routerApi.removeInterfaceForPort(router.getId(), port2.getId()));
-         assertTrue(routerApi.delete(router.getId()));
-         assertTrue(subnetApi.delete(subnet.getId()));
-         assertTrue(networkApi.delete(network.getId()));
-         assertTrue(subnetApi.delete(subnet2.getId()));
-         assertTrue(networkApi.delete(network2.getId()));
-
-      }
-   }
-
-}
diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/NetworkApiExpectTest.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/NetworkApiExpectTest.java
deleted file mode 100644
index 2d2b09c..0000000
--- a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/NetworkApiExpectTest.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.features;
-
-import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertNull;
-import static org.testng.Assert.assertTrue;
-
-import java.util.Set;
-
-import javax.ws.rs.core.MediaType;
-
-import org.jclouds.http.HttpResponse;
-import org.jclouds.openstack.neutron.v2_0.domain.BulkNetwork;
-import org.jclouds.openstack.neutron.v2_0.domain.Network;
-import org.jclouds.openstack.neutron.v2_0.domain.NetworkType;
-import org.jclouds.openstack.neutron.v2_0.domain.ReferenceWithName;
-import org.jclouds.openstack.neutron.v2_0.internal.BaseNeutronApiExpectTest;
-import org.jclouds.openstack.neutron.v2_0.options.CreateNetworkBulkOptions;
-import org.jclouds.openstack.neutron.v2_0.options.CreateNetworkOptions;
-import org.jclouds.openstack.neutron.v2_0.options.UpdateNetworkOptions;
-import org.jclouds.openstack.neutron.v2_0.parse.ParseNetworkTest;
-import org.jclouds.rest.AuthorizationException;
-import org.testng.annotations.Test;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-
-/**
- * Tests parsing and Guice wiring of NetworkApi
- *
- */
-@Test(groups = "unit", testName = "NetworkApiExpectTest")
-public class NetworkApiExpectTest extends BaseNeutronApiExpectTest {
-
-   private static final String ZONE = "region-a.geo-1";
-
-   public void testListReferencesReturns2xx() {
-      NetworkApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/networks").addQueryParam("fields", "id", "tenant_id", "name").build(),
-         HttpResponse.builder().statusCode(200).payload(payloadFromResourceWithContentType("/list_networks.json", APPLICATION_JSON)).build())
-         .getNetworkApiForZone(ZONE);
-
-      Set<? extends ReferenceWithName> references = api.list().concat().toSet();
-      assertEquals(references, listOfReferencesWithNames());
-   }
-
-   public void testListReferencesReturns4xx() {
-      NetworkApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/networks").addQueryParam("fields", "id", "tenant_id", "name").build(),
-         HttpResponse.builder().statusCode(404).build())
-         .getNetworkApiForZone(ZONE);
-
-      assertTrue(api.list().concat().isEmpty());
-   }
-
-   public void testListReturns2xx() {
-      NetworkApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/networks").build(),
-         HttpResponse.builder().statusCode(200).payload(payloadFromResourceWithContentType("/list_networks.json", APPLICATION_JSON)).build())
-         .getNetworkApiForZone(ZONE);
-
-      Set<? extends Network> nets = api.listInDetail().concat().toSet();
-      assertEquals(nets, listOfNetworks());
-   }
-
-   public void testListReturns4xx() {
-      NetworkApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/networks").build(),
-         HttpResponse.builder().statusCode(404).build())
-         .getNetworkApiForZone(ZONE);
-
-      assertTrue(api.listInDetail().concat().isEmpty());
-   }
-
-   public void testGetReturns2xx() {
-      NetworkApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/networks/16dba3bc-f3fa-4775-afdc-237e12c72f6a").build(),
-         HttpResponse.builder().statusCode(200).payload(payloadFromResourceWithContentType("/network.json", APPLICATION_JSON)).build())
-         .getNetworkApiForZone(ZONE);
-
-      Network net = api.get("16dba3bc-f3fa-4775-afdc-237e12c72f6a");
-      assertEquals(net, new ParseNetworkTest().expected());
-   }
-
-   public void testGetReturns4xx() {
-      NetworkApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/networks/16dba3bc-f3fa-4775-afdc-237e12c72f6a").build(),
-         HttpResponse.builder().statusCode(404).build())
-         .getNetworkApiForZone(ZONE);
-
-      assertNull(api.get("16dba3bc-f3fa-4775-afdc-237e12c72f6a"));
-   }
-
-   public void testCreateReturns2xx() {
-      NetworkApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/networks").method("POST")
-            .payload(payloadFromStringWithContentType("{\"network\":{\"name\":\"another-test\",\"router:external\":true,\"provider:network_type\":\"local\"}}", MediaType.APPLICATION_JSON)).build(),
-         HttpResponse.builder().statusCode(200).payload(payloadFromStringWithContentType("{\"network\":{\"id\":\"12345\",\"tenant_id\":\"6789\",\"router:external\":true,\"provider:network_type\":\"local\"}}", APPLICATION_JSON)).build())
-         .getNetworkApiForZone(ZONE);
-
-      Network net = api.create(CreateNetworkOptions.builder().name("another-test").external(true).networkType(NetworkType.LOCAL).build());
-      assertEquals(net, Network.builder().id("12345").tenantId("6789").external(true).networkType(NetworkType.LOCAL).build());
-   }
-
-   @Test(expectedExceptions = AuthorizationException.class)
-   public void testCreateReturns4xx() {
-      NetworkApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/networks").method("POST")
-            .payload(payloadFromStringWithContentType("{\"network\":{\"name\":\"another-test\",\"provider:network_type\":\"local\"}}", MediaType.APPLICATION_JSON)).build(),
-         HttpResponse.builder().statusCode(401).build())
-         .getNetworkApiForZone(ZONE);
-
-      api.create(CreateNetworkOptions.builder().name("another-test").networkType(NetworkType.LOCAL).build());
-   }
-
-   public void testCreateBulkReturns2xx() {
-      NetworkApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/networks").method("POST")
-            .payload(payloadFromStringWithContentType("{\"networks\":[{\"name\":\"test\",\"provider:network_type\":\"local\"},{\"name\":\"test-2\",\"provider:network_type\":\"local\"}]}", MediaType.APPLICATION_JSON)).build(),
-         HttpResponse.builder().statusCode(200).payload(payloadFromStringWithContentType("{\"networks\":[{\"id\":\"1\",\"tenant_id\":\"1\",\"name\":\"test\",\"provider:network_type\":\"local\"},{\"id\":\"2\",\"tenant_id\":\"1\",\"name\":\"test-2\",\"provider:network_type\":\"local\"}]}", APPLICATION_JSON)).build())
-         .getNetworkApiForZone(ZONE);
-
-      Set<? extends ReferenceWithName> nets = api.createBulk(
-         CreateNetworkBulkOptions.builder().networks(
-            ImmutableList.of(
-               BulkNetwork.builder().networkType(NetworkType.LOCAL).name("test").build(),
-               BulkNetwork.builder().networkType(NetworkType.LOCAL).name("test-2").build()
-            )
-         ).build()
-      ).toSet();
-      assertEquals(nets, createBulkReturns2xxResponse());
-   }
-
-   @Test(expectedExceptions = AuthorizationException.class)
-   public void testCreateBulkReturns4xx() {
-      NetworkApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/networks").method("POST")
-            .payload(payloadFromStringWithContentType("{\"networks\":[{\"name\":\"test\",\"provider:network_type\":\"local\"},{\"name\":\"test-2\",\"provider:network_type\":\"local\"}]}", MediaType.APPLICATION_JSON)).build(),
-         HttpResponse.builder().statusCode(401).build())
-         .getNetworkApiForZone(ZONE);
-
-      api.createBulk(
-         CreateNetworkBulkOptions.builder().networks(
-            ImmutableList.of(
-               BulkNetwork.builder().networkType(NetworkType.LOCAL).name("test").build(),
-               BulkNetwork.builder().networkType(NetworkType.LOCAL).name("test-2").build()
-            )
-         ).build()
-      );
-   }
-
-   public void testUpdateReturns2xx() {
-      NetworkApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/networks/12345").method("PUT")
-            .payload(payloadFromStringWithContentType("{\"network\":{\"name\":\"another-test\",\"admin_state_up\":true}}", MediaType.APPLICATION_JSON)).build(),
-         HttpResponse.builder().statusCode(200).build())
-         .getNetworkApiForZone(ZONE);
-
-      assertTrue(api.update("12345", UpdateNetworkOptions.builder().name("another-test").adminStateUp(true).build()));
-   }
-
-   public void testUpdateReturns4xx() {
-      NetworkApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/networks/12345").method("PUT")
-            .payload(payloadFromStringWithContentType("{\"network\":{\"name\":\"another-test\",\"admin_state_up\":true}}", MediaType.APPLICATION_JSON)).build(),
-         HttpResponse.builder().statusCode(404).build())
-         .getNetworkApiForZone(ZONE);
-
-      assertFalse(api.update("12345", UpdateNetworkOptions.builder().name("another-test").adminStateUp(true).build()));
-   }
-
-   public void testDeleteReturns2xx() {
-      NetworkApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/networks/12345").method("DELETE").build(),
-         HttpResponse.builder().statusCode(200).build())
-         .getNetworkApiForZone(ZONE);
-
-      assertTrue(api.delete("12345"));
-   }
-
-   @Test(expectedExceptions = AuthorizationException.class)
-   public void testDeleteReturns4xx() {
-      NetworkApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/networks/12345").method("DELETE").build(),
-         HttpResponse.builder().statusCode(403).build())
-         .getNetworkApiForZone(ZONE);
-
-      api.delete("12345");
-   }
-
-   protected Set<Network> listOfNetworks() {
-      return ImmutableSet.of(
-         Network.builder().name("jclouds-test").tenantId("1234567890").id("16dba3bc-f3fa-4775-afdc-237e12c72f6a").build(),
-         Network.builder().name("wibble").tenantId("1234567890").id("1a104cf5-cb18-4d35-9407-2fd2646d9d0b").build(),
-         Network.builder().name("jclouds-test").tenantId("1234567890").id("31083ae2-420d-48b2-ac98-9f7a4fd8dbdc").build(),
-         Network.builder().name("jclouds-test").tenantId("1234567890").id("49c6d6fa-ff2a-459d-b975-75a8d31c9a89").build(),
-         Network.builder().name("wibble").tenantId("1234567890").id("5cb3d6f4-62cb-41c9-b964-ba7d9df79e4e").build(),
-         Network.builder().name("jclouds-test").tenantId("1234567890").id("5d51d012-3491-4db7-b1b5-6f254015015d").build(),
-         Network.builder().name("wibble").tenantId("1234567890").id("5f9cf7dc-22ca-4097-8e49-1cc8b23faf17").build(),
-         Network.builder().name("jclouds-test").tenantId("1234567890").id("6319ecad-6bff-48b2-9b53-02ede8cb7588").build(),
-         Network.builder().name("jclouds-test").tenantId("1234567890").id("6ba4c788-661f-49ab-9bf8-5f10cbbb2f57").build(),
-         Network.builder().name("jclouds-test").tenantId("1234567890").id("74ed170b-5069-4353-ab38-9719766dc57e").build(),
-         Network.builder().name("wibble").tenantId("1234567890").id("b71fcac1-e864-4031-8c5b-edbecd9ece36").build(),
-         Network.builder().name("jclouds-test").tenantId("1234567890").id("c7681895-d84d-4650-9ca0-82c72036b855").build()
-      );
-   }
-
-   protected Set<Network> createBulkReturns2xxResponse() {
-      return ImmutableSet.of(
-         Network.builder().id("1").tenantId("1").name("test").networkType(NetworkType.LOCAL).build(),
-         Network.builder().id("2").tenantId("1").name("test-2").networkType(NetworkType.LOCAL).build()
-      );
-   }
-}
diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/NetworkApiLiveTest.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/NetworkApiLiveTest.java
deleted file mode 100644
index 938e353..0000000
--- a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/NetworkApiLiveTest.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.features;
-
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
-
-import java.util.Set;
-
-import org.jclouds.openstack.neutron.v2_0.domain.BulkNetwork;
-import org.jclouds.openstack.neutron.v2_0.domain.Network;
-import org.jclouds.openstack.neutron.v2_0.domain.NetworkType;
-import org.jclouds.openstack.neutron.v2_0.domain.ReferenceWithName;
-import org.jclouds.openstack.neutron.v2_0.internal.BaseNeutronApiLiveTest;
-import org.jclouds.openstack.neutron.v2_0.options.CreateNetworkBulkOptions;
-import org.jclouds.openstack.neutron.v2_0.options.CreateNetworkOptions;
-import org.jclouds.openstack.neutron.v2_0.options.UpdateNetworkOptions;
-import org.jclouds.openstack.neutron.v2_0.util.PredicateUtil;
-import org.testng.annotations.Test;
-
-import com.google.common.base.Predicate;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Sets;
-
-/**
- * Tests parsing and Guice wiring of NetworkApi
- *
- */
-@Test(groups = "live", testName = "NetworkApiLiveTest", singleThreaded = true)
-public class NetworkApiLiveTest extends BaseNeutronApiLiveTest {
-
-   public void testGetAndListNetworks() {
-      for (String zone : api.getConfiguredZones()) {
-         Set<? extends ReferenceWithName> references = api.getNetworkApiForZone(zone).list().concat().toSet();
-         Set<? extends Network> networks = api.getNetworkApiForZone(zone).listInDetail().concat().toSet();
-
-         assertNotNull(references);
-         assertNotNull(networks);
-         assertEquals(references.size(), networks.size());
-
-         for (Network network : networks) {
-            assertNotNull(network.getName());
-            assertTrue(references.contains(ReferenceWithName.builder().id(network.getId()).tenantId(network.getTenantId()).name(network.getName()).build()));
-
-            Network retrievedNetwork = api.getNetworkApiForZone(zone).get(network.getId());
-            assertEquals(network, retrievedNetwork);
-         }
-      }
-   }
-
-   public void testCreateUpdateAndDeleteNetwork() {
-      for (String zone : api.getConfiguredZones()) {
-         NetworkApi networkApi = api.getNetworkApiForZone(zone);
-         Network net = networkApi.create(CreateNetworkOptions.builder().name("jclouds-test").networkType(NetworkType.LOCAL).build());
-         Network test = networkApi.create();
-         assertNotNull(net);
-
-         Network network = networkApi.get(net.getId());
-
-         assertEquals(network.getId(), net.getId());
-         assertEquals(network.getName(), "jclouds-test");
-         assertEquals(network.getNetworkType(), NetworkType.LOCAL);
-         assertTrue(network.getSubnets().isEmpty());
-         assertTrue(networkApi.update(net.getId(), UpdateNetworkOptions.builder().name("jclouds-live-test").build()));
-
-         network = networkApi.get(net.getId());
-
-         assertEquals(network.getId(), net.getId());
-         assertEquals(network.getName(), "jclouds-live-test");
-         assertTrue(network.getSubnets().isEmpty());
-
-         Network net2 = networkApi.create(CreateNetworkOptions.builder().name("jclouds-test2").networkType(NetworkType.LOCAL).build());
-         assertNotNull(net2);
-
-         assertTrue(networkApi.delete(net.getId()));
-         assertTrue(networkApi.delete(net2.getId()));
-         assertTrue(networkApi.delete(test.getId()));
-      }
-   }
-
-   public void testBulkCreateNetwork() {
-      for (String zone : api.getConfiguredZones()) {
-         NetworkApi networkApi = api.getNetworkApiForZone(zone);
-         Set<? extends Network> nets = networkApi.createBulk(
-            CreateNetworkBulkOptions.builder().networks(
-               ImmutableList.of(
-                  BulkNetwork.builder().networkType(NetworkType.LOCAL).name("jclouds-live-test-1").adminStateUp(true).build(),
-                  BulkNetwork.builder().networkType(NetworkType.LOCAL).name("jclouds-live-test-2").adminStateUp(false).build(),
-                  BulkNetwork.builder().networkType(NetworkType.LOCAL).name("jclouds-live-test-3").adminStateUp(false).build()
-               )
-            ).build()
-         ).toSet();
-         Set<? extends Network> existingNets = networkApi.listInDetail().concat().toSet();
-
-         assertNotNull(nets);
-         assertTrue(!nets.isEmpty());
-         assertEquals(nets.size(), 3);
-
-         for (Network net : nets) {
-            Predicate<Network> idEqualsPredicate = PredicateUtil.createIdEqualsPredicate(net.getId());
-            assertEquals(1, Sets.filter(existingNets, idEqualsPredicate).size());
-            assertTrue(networkApi.delete(net.getId()));
-         }
-      }
-   }
-}
diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/PortApiExpectTest.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/PortApiExpectTest.java
deleted file mode 100644
index 7f5338d..0000000
--- a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/PortApiExpectTest.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.features;
-
-import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertNull;
-import static org.testng.Assert.assertTrue;
-
-import java.util.Set;
-
-import org.jclouds.http.HttpResponse;
-import org.jclouds.openstack.neutron.v2_0.domain.BulkPort;
-import org.jclouds.openstack.neutron.v2_0.domain.Port;
-import org.jclouds.openstack.neutron.v2_0.domain.ReferenceWithName;
-import org.jclouds.openstack.neutron.v2_0.domain.State;
-import org.jclouds.openstack.neutron.v2_0.internal.BaseNeutronApiExpectTest;
-import org.jclouds.openstack.neutron.v2_0.options.CreatePortBulkOptions;
-import org.jclouds.openstack.neutron.v2_0.options.CreatePortOptions;
-import org.jclouds.openstack.neutron.v2_0.options.UpdatePortOptions;
-import org.jclouds.openstack.neutron.v2_0.parse.ParsePortTest;
-import org.jclouds.rest.AuthorizationException;
-import org.testng.annotations.Test;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-
-/**
- * Tests parsing and Guice wiring of PortApi
- *
- */
-@Test(groups = "unit", testName = "PortApiExpectTest")
-public class PortApiExpectTest extends BaseNeutronApiExpectTest {
-
-   private static final String ZONE = "region-a.geo-1";
-
-   public void testListReferencesReturns2xx() {
-      PortApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/ports").addQueryParam("fields", "id", "tenant_id", "name").build(),
-         HttpResponse.builder().statusCode(200).payload(payloadFromResourceWithContentType("/list_ports.json", APPLICATION_JSON)).build())
-         .getPortApiForZone(ZONE);
-
-      Set<? extends ReferenceWithName> references = api.list().concat().toSet();
-      assertEquals(references, listOfReferencesWithNames());
-   }
-
-   public void testListReferencesReturns4xx() {
-      PortApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/ports").addQueryParam("fields", "id", "tenant_id", "name").build(),
-         HttpResponse.builder().statusCode(404).build())
-         .getPortApiForZone(ZONE);
-
-      assertTrue(api.list().concat().isEmpty());
-   }
-
-   public void testListReturns2xx() {
-      PortApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/ports").build(),
-         HttpResponse.builder().statusCode(200).payload(payloadFromResourceWithContentType("/list_ports.json", APPLICATION_JSON)).build())
-         .getPortApiForZone(ZONE);
-
-      Set<? extends Port> ports = api.listInDetail().concat().toSet();
-      assertEquals(ports, listOfPorts());
-   }
-
-   public void testListReturns4xx() {
-      PortApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/ports").build(),
-         HttpResponse.builder().statusCode(404).build())
-         .getPortApiForZone(ZONE);
-
-      assertTrue(api.listInDetail().concat().isEmpty());
-   }
-
-   public void testGetReturns2xx() {
-      PortApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/ports/624312ff-d14b-4ba3-9834-1c78d23d574d").build(),
-         HttpResponse.builder().statusCode(200).payload(payloadFromResourceWithContentType("/port.json", APPLICATION_JSON)).build())
-         .getPortApiForZone(ZONE);
-
-      Port port = api.get("624312ff-d14b-4ba3-9834-1c78d23d574d");
-      assertEquals(port, new ParsePortTest().expected());
-   }
-
-   public void testGetReturns4xx() {
-      PortApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/ports/624312ff-d14b-4ba3-9834-1c78d23d574d").build(),
-         HttpResponse.builder().statusCode(404).build())
-         .getPortApiForZone(ZONE);
-
-      assertNull(api.get("624312ff-d14b-4ba3-9834-1c78d23d574d"));
-   }
-
-   public void testCreateReturns2xx() {
-      PortApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/ports").method("POST")
-            .payload(payloadFromStringWithContentType("{\"port\":{\"network_id\":\"1\",\"name\":\"test-port\"}}", APPLICATION_JSON)).build(),
-         HttpResponse.builder().statusCode(200).payload(payloadFromStringWithContentType("{\"port\":{\"id\":\"1\",\"tenant_id\":\"1\",\"network_id\":\"1\",\"name\":\"test-port\"}}", APPLICATION_JSON)).build())
-         .getPortApiForZone(ZONE);
-
-      Port port = api.create("1", CreatePortOptions.builder().name("test-port").build());
-      assertEquals(port, Port.builder().id("1").tenantId("1").name("test-port").networkId("1").build());
-   }
-
-   @Test(expectedExceptions = AuthorizationException.class)
-   public void testCreateReturns4xx() {
-      PortApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/ports").method("POST")
-            .payload(payloadFromStringWithContentType("{\"port\":{\"network_id\":\"1\",\"name\":\"test-port\"}}", APPLICATION_JSON)).build(),
-         HttpResponse.builder().statusCode(401).build())
-         .getPortApiForZone(ZONE);
-
-      api.create("1", CreatePortOptions.builder().name("test-port").build());
-   }
-
-   public void testCreateBulkReturns2xx() {
-      PortApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/ports").method("POST")
-            .payload(payloadFromStringWithContentType("{\"ports\":[{\"network_id\":\"1\",\"name\":\"test-port-1\"},{\"network_id\":\"2\",\"name\":\"test-port-2\"}]}", APPLICATION_JSON)).build(),
-         HttpResponse.builder().statusCode(200)
-            .payload(payloadFromStringWithContentType("{\"ports\":[{\"id\":\"1\",\"tenant_id\":\"1\",\"network_id\":\"1\",\"name\":\"test-port-1\"},{\"id\":\"2\",\"tenant_id\":\"1\",\"network_id\":\"2\",\"name\":\"test-port-2\"}]}", APPLICATION_JSON)).build())
-         .getPortApiForZone(ZONE);
-
-      Set<? extends ReferenceWithName> ports = api.createBulk(
-         CreatePortBulkOptions.builder().ports(
-            ImmutableList.of(
-               BulkPort.builder().networkId("1").name("test-port-1").build(),
-               BulkPort.builder().networkId("2").name("test-port-2").build()
-            )
-         ).build()
-      ).toSet();
-      assertEquals(ports, createBulkReturns2xxResponse());
-   }
-
-   @Test(expectedExceptions = AuthorizationException.class)
-   public void testCreateBulkReturns4xx() {
-      PortApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/ports").method("POST")
-            .payload(payloadFromStringWithContentType("{\"ports\":[{\"network_id\":\"1\",\"name\":\"test-port-1\"},{\"network_id\":\"2\",\"name\":\"test-port-2\"}]}", APPLICATION_JSON)).build(),
-         HttpResponse.builder().statusCode(401).build())
-         .getPortApiForZone(ZONE);
-
-      api.createBulk(
-         CreatePortBulkOptions.builder().ports(
-            ImmutableList.of(
-               BulkPort.builder().networkId("1").name("test-port-1").build(),
-               BulkPort.builder().networkId("2").name("test-port-2").build()
-            )
-         ).build()
-      );
-   }
-
-   public void testUpdateReturns2xx() {
-      PortApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/ports/12345").method("PUT")
-            .payload(payloadFromStringWithContentType("{\"port\":{\"name\":\"another-test\",\"admin_state_up\":true}}", APPLICATION_JSON)).build(),
-         HttpResponse.builder().statusCode(200).build())
-         .getPortApiForZone(ZONE);
-
-      assertTrue(api.update("12345", UpdatePortOptions.builder().name("another-test").adminStateUp(true).build()));
-   }
-
-   public void testUpdateReturns4xx() {
-      PortApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/ports/12345").method("PUT")
-            .payload(payloadFromStringWithContentType("{\"port\":{\"name\":\"another-test\",\"admin_state_up\":true}}", APPLICATION_JSON)).build(),
-         HttpResponse.builder().statusCode(404).build())
-         .getPortApiForZone(ZONE);
-
-      assertFalse(api.update("12345", UpdatePortOptions.builder().name("another-test").adminStateUp(true).build()));
-   }
-
-   public void testDeleteReturns2xx() {
-      PortApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/ports/12345").method("DELETE").build(),
-         HttpResponse.builder().statusCode(200).build())
-         .getPortApiForZone(ZONE);
-
-      assertTrue(api.delete("12345"));
-   }
-
-   @Test(expectedExceptions = AuthorizationException.class)
-   public void testDeleteReturns4xx() {
-      PortApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/ports/12345").method("DELETE").build(),
-         HttpResponse.builder().statusCode(403).build())
-         .getPortApiForZone(ZONE);
-
-      api.delete("12345");
-   }
-
-   protected Set<Port> listOfPorts() {
-      return ImmutableSet.of(
-         Port.builder().state(State.ACTIVE).networkId("1234567890").name("jclouds-test").tenantId("1234567890").id("16dba3bc-f3fa-4775-afdc-237e12c72f6a").build(),
-         Port.builder().state(State.ACTIVE).networkId("1234567890").name("wibble").tenantId("1234567890").id("1a104cf5-cb18-4d35-9407-2fd2646d9d0b").build(),
-         Port.builder().state(State.ACTIVE).networkId("1234567890").name("jclouds-test").tenantId("1234567890").id("31083ae2-420d-48b2-ac98-9f7a4fd8dbdc").build(),
-         Port.builder().state(State.ACTIVE).networkId("1234567890").name("jclouds-test").tenantId("1234567890").id("49c6d6fa-ff2a-459d-b975-75a8d31c9a89").build(),
-         Port.builder().state(State.ACTIVE).networkId("1234567890").name("wibble").tenantId("1234567890").id("5cb3d6f4-62cb-41c9-b964-ba7d9df79e4e").build(),
-         Port.builder().state(State.ACTIVE).networkId("1234567890").name("jclouds-test").tenantId("1234567890").id("5d51d012-3491-4db7-b1b5-6f254015015d").build(),
-         Port.builder().state(State.ACTIVE).networkId("1234567890").name("wibble").tenantId("1234567890").id("5f9cf7dc-22ca-4097-8e49-1cc8b23faf17").build(),
-         Port.builder().state(State.ACTIVE).networkId("1234567890").name("jclouds-test").tenantId("1234567890").id("6319ecad-6bff-48b2-9b53-02ede8cb7588").build(),
-         Port.builder().state(State.ACTIVE).networkId("1234567890").name("jclouds-test").tenantId("1234567890").id("6ba4c788-661f-49ab-9bf8-5f10cbbb2f57").build(),
-         Port.builder().state(State.ACTIVE).networkId("1234567890").name("jclouds-test").tenantId("1234567890").id("74ed170b-5069-4353-ab38-9719766dc57e").build(),
-         Port.builder().state(State.ACTIVE).networkId("1234567890").name("wibble").tenantId("1234567890").id("b71fcac1-e864-4031-8c5b-edbecd9ece36").build(),
-         Port.builder().state(State.ACTIVE).networkId("1234567890").name("jclouds-test").tenantId("1234567890").id("c7681895-d84d-4650-9ca0-82c72036b855").build()
-      );
-   }
-
-   protected Set<Port> createBulkReturns2xxResponse() {
-      return ImmutableSet.of(
-         Port.builder().id("1").tenantId("1").name("test-port-1").networkId("1").build(),
-         Port.builder().id("2").tenantId("1").name("test-port-2").networkId("2").build()
-      );
-   }
-
-}
diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/PortApiLiveTest.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/PortApiLiveTest.java
deleted file mode 100644
index 3b6f93a..0000000
--- a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/PortApiLiveTest.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.features;
-
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
-
-import java.util.Set;
-
-import org.jclouds.openstack.neutron.v2_0.domain.BulkPort;
-import org.jclouds.openstack.neutron.v2_0.domain.IP;
-import org.jclouds.openstack.neutron.v2_0.domain.NetworkType;
-import org.jclouds.openstack.neutron.v2_0.domain.Port;
-import org.jclouds.openstack.neutron.v2_0.domain.ReferenceWithName;
-import org.jclouds.openstack.neutron.v2_0.internal.BaseNeutronApiLiveTest;
-import org.jclouds.openstack.neutron.v2_0.options.CreateNetworkOptions;
-import org.jclouds.openstack.neutron.v2_0.options.CreatePortBulkOptions;
-import org.jclouds.openstack.neutron.v2_0.options.CreatePortOptions;
-import org.jclouds.openstack.neutron.v2_0.options.CreateSubnetOptions;
-import org.jclouds.openstack.neutron.v2_0.options.UpdatePortOptions;
-import org.jclouds.openstack.neutron.v2_0.util.PredicateUtil;
-import org.testng.annotations.Test;
-
-import com.google.common.base.Predicate;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Sets;
-
-/**
- * Tests PortApi in combination with the Network & SubnetApi
- *
- */
-@Test(groups = "live", testName = "PortApiLiveTest", singleThreaded = true)
-public class PortApiLiveTest extends BaseNeutronApiLiveTest {
-
-   public void testGetAndListPorts() {
-      for (String zone : api.getConfiguredZones()) {
-         Set<? extends ReferenceWithName> references = api.getPortApiForZone(zone).list().concat().toSet();
-         Set<? extends Port> ports = api.getPortApiForZone(zone).listInDetail().concat().toSet();
-
-         assertNotNull(references);
-         assertNotNull(ports);
-         assertEquals(references.size(), ports.size());
-
-         for (Port port : ports) {
-            assertNotNull(port.getName());
-            assertTrue(references.contains(ReferenceWithName.builder().id(port.getId()).tenantId(port.getTenantId()).name(port.getName()).build()));
-
-            Port retrievedPort = api.getPortApiForZone(zone).get(port.getId());
-            assertEquals(port, retrievedPort);
-         }
-      }
-   }
-
-   public void testCreateUpdateAndDeletePort() {
-      for (String zone : api.getConfiguredZones()) {
-         NetworkApi networkApi = api.getNetworkApiForZone(zone);
-         SubnetApi subnetApi = api.getSubnetApiForZone(zone);
-         PortApi portApi = api.getPortApiForZone(zone);
-         String networkId = networkApi.create(CreateNetworkOptions.builder().name("JClouds-Live-Network").networkType(NetworkType.LOCAL).build()).getId();
-         String ipv4SubnetId = subnetApi.create(networkId, 4, "198.51.100.0/24", CreateSubnetOptions.builder().name("JClouds-Live-IPv4-Subnet").build()).getId();
-         String ipv6SubnetId = subnetApi.create(networkId, 6, "a1ca:1e1:c:107d::/96", CreateSubnetOptions.builder().name("JClouds-Live-IPv6-Subnet").build()).getId();
-
-         assertNotNull(networkId);
-         assertNotNull(ipv4SubnetId);
-         assertNotNull(ipv6SubnetId);
-
-         String ipv4PortId = portApi.create(networkId, CreatePortOptions.builder().name("JClouds-Live-IPv4-Port").fixedIps(getFixedAddresses(ipv4SubnetId)).build()).getId();
-         String ipv6PortId = portApi.create(networkId, CreatePortOptions.builder().name("JClouds-Live-IPv6-Port").fixedIps(getFixedAddresses(ipv6SubnetId)).build()).getId();
-
-         assertNotNull(ipv4PortId);
-         assertNotNull(ipv6PortId);
-
-         Port ipv4Port = portApi.get(ipv4PortId);
-         assertNotNull(ipv4Port);
-         assertEquals(ipv4Port.getId(), ipv4PortId);
-         assertEquals(ipv4Port.getName(), "JClouds-Live-IPv4-Port");
-
-         Port ipv6Port = portApi.get(ipv6PortId);
-         assertNotNull(ipv6Port);
-         assertEquals(ipv6Port.getId(), ipv6PortId);
-         assertEquals(ipv6Port.getName(), "JClouds-Live-IPv6-Port");
-
-         assertTrue(portApi.update(ipv4PortId, UpdatePortOptions.builder().name("Updated").build()));
-         Port updatedIpv4Port = portApi.get(ipv4PortId);
-         assertEquals(updatedIpv4Port.getName(), "Updated");
-
-         assertTrue(portApi.delete(ipv4PortId));
-         assertTrue(portApi.delete(ipv6PortId));
-         assertTrue(subnetApi.delete(ipv4SubnetId));
-         assertTrue(subnetApi.delete(ipv6SubnetId));
-         assertTrue(networkApi.delete(networkId));
-      }
-   }
-
-   public void testBulkCreatePort() {
-      for (String zone : api.getConfiguredZones()) {
-         NetworkApi networkApi = api.getNetworkApiForZone(zone);
-         SubnetApi subnetApi = api.getSubnetApiForZone(zone);
-         PortApi portApi = api.getPortApiForZone(zone);
-
-         String networkId = networkApi.create(CreateNetworkOptions.builder().name("JClouds-Live-Network").networkType(NetworkType.LOCAL).build()).getId();
-         String ipv4SubnetId = subnetApi.create(networkId, 4, "198.51.100.0/24", CreateSubnetOptions.builder().name("JClouds-Live-IPv4-Subnet").build()).getId();
-         String ipv6SubnetId = subnetApi.create(networkId, 6, "a1ca:1e1:c:107d::/96", CreateSubnetOptions.builder().name("JClouds-Live-IPv6-Subnet").build()).getId();
-
-         assertNotNull(networkId);
-         assertNotNull(ipv4SubnetId);
-         assertNotNull(ipv6SubnetId);
-
-         Set<? extends Port> ports = portApi.createBulk(
-            CreatePortBulkOptions.builder().ports(
-               ImmutableSet.of(
-                  BulkPort.builder().networkId(networkId).name("JClouds-Live-IPv4-Subnet-1").fixedIps(getFixedAddresses(ipv4SubnetId)).build(),
-                  BulkPort.builder().networkId(networkId).name("JClouds-Live-IPv4-Subnet-2").fixedIps(getFixedAddresses(ipv4SubnetId)).build(),
-                  BulkPort.builder().networkId(networkId).name("JClouds-Live-IPv6-Subnet-1").fixedIps(getFixedAddresses(ipv6SubnetId)).build(),
-                  BulkPort.builder().networkId(networkId).name("JClouds-Live-IPv6-Subnet-2").fixedIps(getFixedAddresses(ipv6SubnetId)).build()
-               )
-            ).build()
-         ).toSet();
-         Set<? extends Port> existingPorts = portApi.listInDetail().concat().toSet();
-
-         assertNotNull(ports);
-         assertFalse(ports.isEmpty());
-         assertEquals(ports.size(), 4);
-
-         for (Port port : ports) {
-            Predicate<Port> idEqualsPredicate = PredicateUtil.createIdEqualsPredicate(port.getId());
-            assertEquals(1, Sets.filter(existingPorts, idEqualsPredicate).size());
-            assertTrue(portApi.delete(port.getId()));
-         }
-         assertTrue(subnetApi.delete(ipv4SubnetId));
-         assertTrue(subnetApi.delete(ipv6SubnetId));
-         assertTrue(networkApi.delete(networkId));
-      }
-   }
-
-   public Set<IP> getFixedAddresses(String subnetId) {
-      return ImmutableSet.of(
-         IP.builder().subnetId(subnetId).build()
-      );
-   }
-}
diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/SubnetApiExpectTest.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/SubnetApiExpectTest.java
deleted file mode 100644
index bb40fc3..0000000
--- a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/SubnetApiExpectTest.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.features;
-
-import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertNull;
-import static org.testng.Assert.assertTrue;
-
-import java.util.Set;
-
-import org.jclouds.http.HttpResponse;
-import org.jclouds.openstack.neutron.v2_0.domain.BulkSubnet;
-import org.jclouds.openstack.neutron.v2_0.domain.ReferenceWithName;
-import org.jclouds.openstack.neutron.v2_0.domain.Subnet;
-import org.jclouds.openstack.neutron.v2_0.internal.BaseNeutronApiExpectTest;
-import org.jclouds.openstack.neutron.v2_0.options.CreateSubnetBulkOptions;
-import org.jclouds.openstack.neutron.v2_0.options.CreateSubnetOptions;
-import org.jclouds.openstack.neutron.v2_0.options.UpdateSubnetOptions;
-import org.jclouds.openstack.neutron.v2_0.parse.ParseSubnetTest;
-import org.jclouds.rest.AuthorizationException;
-import org.testng.annotations.Test;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-
-/**
- * Tests parsing and Guice wiring of SubnetApi
- */
-@Test(groups = "unit", testName = "SubnetApiExpectTest")
-public class SubnetApiExpectTest extends BaseNeutronApiExpectTest {
-
-   private static final String ZONE = "region-a.geo-1";
-
-   public void testListReferencesReturns2xx() {
-      SubnetApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/subnets").addQueryParam("fields", "id", "tenant_id", "name").build(),
-         HttpResponse.builder().statusCode(200).payload(payloadFromResourceWithContentType("/list_subnets.json", APPLICATION_JSON)).build())
-         .getSubnetApiForZone(ZONE);
-
-      Set<? extends ReferenceWithName> references = api.list().concat().toSet();
-      assertEquals(references, listOfReferencesWithNames());
-   }
-
-   public void testListReferencesReturns4xx() {
-      SubnetApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/subnets").addQueryParam("fields", "id", "tenant_id", "name").build(),
-         HttpResponse.builder().statusCode(404).build())
-         .getSubnetApiForZone(ZONE);
-
-      assertTrue(api.list().concat().isEmpty());
-   }
-
-   public void testListReturns2xx() {
-      SubnetApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/subnets").build(),
-         HttpResponse.builder().statusCode(200).payload(payloadFromResourceWithContentType("/list_subnets.json", APPLICATION_JSON)).build())
-         .getSubnetApiForZone(ZONE);
-
-      Set<? extends Subnet> subnets = api.listInDetail().concat().toSet();
-      assertEquals(subnets, listOfSubnets());
-   }
-
-   public void testListReturns4xx() {
-      SubnetApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/subnets").build(),
-         HttpResponse.builder().statusCode(404).build())
-         .getSubnetApiForZone(ZONE);
-
-      assertTrue(api.listInDetail().concat().isEmpty());
-   }
-
-   public void testGetReturns2xx() {
-      SubnetApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/subnets/624312ff-d14b-4ba3-9834-1c78d23d574d").build(),
-         HttpResponse.builder().statusCode(200).payload(payloadFromResourceWithContentType("/subnet.json", APPLICATION_JSON)).build())
-         .getSubnetApiForZone(ZONE);
-
-      Subnet subnet = api.get("624312ff-d14b-4ba3-9834-1c78d23d574d");
-      assertEquals(subnet, new ParseSubnetTest().expected());
-   }
-
-   public void testGetReturns4xx() {
-      SubnetApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/subnets/624312ff-d14b-4ba3-9834-1c78d23d574d").build(),
-         HttpResponse.builder().statusCode(404).build())
-         .getSubnetApiForZone(ZONE);
-
-      assertNull(api.get("624312ff-d14b-4ba3-9834-1c78d23d574d"));
-   }
-
-   public void testCreateReturns2xx() {
-      SubnetApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/subnets").method("POST")
-            .payload(payloadFromStringWithContentType("{\"subnet\":{\"network_id\":\"1234567890\",\"ip_version\":4,\"cidr\":\"10.0.3.0/24\",\"name\":\"subnet-test\"}}", APPLICATION_JSON)).build(),
-         HttpResponse.builder().statusCode(200).payload(payloadFromStringWithContentType("{\"subnet\":{\"id\":\"12345\",\"tenant_id\":\"6789\",\"network_id\":\"1234567890\",\"ip_version\":4,\"cidr\":\"10.0.3.0/24\",\"name\":\"subnet-test\"}}", APPLICATION_JSON)).build())
-         .getSubnetApiForZone(ZONE);
-
-      Subnet net = api.create("1234567890", 4, "10.0.3.0/24", CreateSubnetOptions.builder().name("subnet-test").build());
-      assertEquals(net, Subnet.builder().id("12345").tenantId("6789").name("subnet-test").networkId("1234567890").ipVersion(4).cidr("10.0.3.0/24").build());
-   }
-
-   @Test(expectedExceptions = AuthorizationException.class)
-   public void testCreateReturns4xx() {
-      SubnetApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/subnets").method("POST")
-            .payload(payloadFromStringWithContentType("{\"subnet\":{\"network_id\":\"1234567890\",\"ip_version\":4,\"cidr\":\"10.0.3.0/24\",\"name\":\"subnet-test\"}}", APPLICATION_JSON)).build(),
-         HttpResponse.builder().statusCode(401).build())
-         .getSubnetApiForZone(ZONE);
-
-      api.create("1234567890", 4, "10.0.3.0/24", CreateSubnetOptions.builder().name("subnet-test").build());
-   }
-
-   public void testCreateBulkReturns2xx() {
-      SubnetApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/subnets").method("POST")
-            .payload(payloadFromStringWithContentType(
-               "{\"subnets\":[" +
-                  "{\"network_id\":\"1234567890\",\"ip_version\":4,\"cidr\":\"10.0.3.0/24\",\"name\":\"subnet-test\"}," +
-                  "{\"network_id\":\"9876543210\",\"ip_version\":4,\"cidr\":\"192.168.3.0/24\",\"name\":\"subnet-test-2\"}" +
-                  "]}", APPLICATION_JSON)).build(),
-         HttpResponse.builder().statusCode(200).payload(payloadFromStringWithContentType(
-            "{\"subnets\":[" +
-               "{\"id\":\"1\",\"tenant_id\":\"1\",\"network_id\":\"1234567890\",\"ip_version\":4,\"cidr\":\"10.0.3.0/24\",\"name\":\"subnet-test\"}," +
-               "{\"id\":\"2\",\"tenant_id\":\"1\",\"network_id\":\"9876543210\",\"ip_version\":4,\"cidr\":\"192.168.3.0/24\",\"name\":\"subnet-test-2\"}" +
-               "]}", APPLICATION_JSON)).build())
-         .getSubnetApiForZone(ZONE);
-
-      Set<? extends Subnet> nets = api.createBulk(
-         CreateSubnetBulkOptions.builder().subnets(
-            ImmutableList.of(
-               BulkSubnet.builder().networkId("1234567890").ipVersion(4).cidr("10.0.3.0/24").name("subnet-test").build(),
-               BulkSubnet.builder().networkId("9876543210").ipVersion(4).cidr("192.168.3.0/24").name("subnet-test-2").build()
-            )
-         ).build()
-      ).toSet();
-      assertEquals(nets, createBulkReturns2xxResponse());
-   }
-
-   @Test(expectedExceptions = AuthorizationException.class)
-   public void testCreateBulkReturns4xx() {
-      SubnetApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/subnets").method("POST")
-            .payload(payloadFromStringWithContentType(
-               "{\"subnets\":[" +
-                  "{\"network_id\":\"1234567890\",\"ip_version\":4,\"cidr\":\"10.0.3.0/24\",\"name\":\"subnet-test\"}," +
-                  "{\"network_id\":\"9876543210\",\"ip_version\":4,\"cidr\":\"192.168.3.0/24\",\"name\":\"subnet-test-2\"}" +
-                  "]}", APPLICATION_JSON)).build(),
-         HttpResponse.builder().statusCode(401).build())
-         .getSubnetApiForZone(ZONE);
-
-      api.createBulk(
-         CreateSubnetBulkOptions.builder().subnets(
-            ImmutableList.of(
-               BulkSubnet.builder().networkId("1234567890").ipVersion(4).cidr("10.0.3.0/24").name("subnet-test").build(),
-               BulkSubnet.builder().networkId("9876543210").ipVersion(4).cidr("192.168.3.0/24").name("subnet-test-2").build()
-            )
-         ).build()
-      );
-   }
-
-   public void testUpdateReturns2xx() {
-      SubnetApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/subnets/12345").method("PUT")
-            .payload(payloadFromStringWithContentType("{\"subnet\":{\"name\":\"another-test\",\"gateway_ip\":\"13.13.13.13\"}}", APPLICATION_JSON)).build(),
-         HttpResponse.builder().statusCode(200).build())
-         .getSubnetApiForZone(ZONE);
-
-      assertTrue(api.update("12345", UpdateSubnetOptions.builder().name("another-test").gatewayIp("13.13.13.13").build()));
-   }
-
-   public void testUpdateReturns4xx() {
-      SubnetApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/subnets/12345").method("PUT")
-            .payload(payloadFromStringWithContentType("{\"subnet\":{\"name\":\"another-test\",\"gateway_ip\":\"13.13.13.13\"}}", APPLICATION_JSON)).build(),
-         HttpResponse.builder().statusCode(404).build())
-         .getSubnetApiForZone(ZONE);
-
-      assertFalse(api.update("12345", UpdateSubnetOptions.builder().name("another-test").gatewayIp("13.13.13.13").build()));
-   }
-
-   public void testDeleteReturns2xx() {
-      SubnetApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/subnets/12345").method("DELETE").build(),
-         HttpResponse.builder().statusCode(200).build())
-         .getSubnetApiForZone(ZONE);
-
-      assertTrue(api.delete("12345"));
-   }
-
-   @Test(expectedExceptions = AuthorizationException.class)
-   public void testDeleteReturns4xx() {
-      SubnetApi api = requestsSendResponses(
-         keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
-         authenticatedGET().endpoint(endpoint + "/subnets/12345").method("DELETE").build(),
-         HttpResponse.builder().statusCode(403).build())
-         .getSubnetApiForZone(ZONE);
-
-      api.delete("12345");
-   }
-
-   protected Set<Subnet> listOfSubnets() {
-      return ImmutableSet.of(
-         Subnet.builder().ipVersion(4).cidr("10.0.3.0/24").networkId("1234567890").name("jclouds-test").tenantId("1234567890").id("16dba3bc-f3fa-4775-afdc-237e12c72f6a").build(),
-         Subnet.builder().ipVersion(4).cidr("10.0.3.0/24").networkId("1234567890").name("wibble").tenantId("1234567890").id("1a104cf5-cb18-4d35-9407-2fd2646d9d0b").build(),
-         Subnet.builder().ipVersion(4).cidr("10.0.3.0/24").networkId("1234567890").name("jclouds-test").tenantId("1234567890").id("31083ae2-420d-48b2-ac98-9f7a4fd8dbdc").build(),
-         Subnet.builder().ipVersion(4).cidr("10.0.3.0/24").networkId("1234567890").name("jclouds-test").tenantId("1234567890").id("49c6d6fa-ff2a-459d-b975-75a8d31c9a89").build(),
-         Subnet.builder().ipVersion(4).cidr("10.0.3.0/24").networkId("1234567890").name("wibble").tenantId("1234567890").id("5cb3d6f4-62cb-41c9-b964-ba7d9df79e4e").build(),
-         Subnet.builder().ipVersion(4).cidr("10.0.3.0/24").networkId("1234567890").name("jclouds-test").tenantId("1234567890").id("5d51d012-3491-4db7-b1b5-6f254015015d").build(),
-         Subnet.builder().ipVersion(4).cidr("10.0.3.0/24").networkId("1234567890").name("wibble").tenantId("1234567890").id("5f9cf7dc-22ca-4097-8e49-1cc8b23faf17").build(),
-         Subnet.builder().ipVersion(4).cidr("10.0.3.0/24").networkId("1234567890").name("jclouds-test").tenantId("1234567890").id("6319ecad-6bff-48b2-9b53-02ede8cb7588").build(),
-         Subnet.builder().ipVersion(4).cidr("10.0.3.0/24").networkId("1234567890").name("jclouds-test").tenantId("1234567890").id("6ba4c788-661f-49ab-9bf8-5f10cbbb2f57").build(),
-         Subnet.builder().ipVersion(4).cidr("10.0.3.0/24").networkId("1234567890").name("jclouds-test").tenantId("1234567890").id("74ed170b-5069-4353-ab38-9719766dc57e").build(),
-         Subnet.builder().ipVersion(4).cidr("10.0.3.0/24").networkId("1234567890").name("wibble").tenantId("1234567890").id("b71fcac1-e864-4031-8c5b-edbecd9ece36").build(),
-         Subnet.builder().ipVersion(4).cidr("10.0.3.0/24").networkId("1234567890").name("jclouds-test").tenantId("1234567890").id("c7681895-d84d-4650-9ca0-82c72036b855").build()
-      );
-   }
-
-   protected Set<Subnet> createBulkReturns2xxResponse() {
-      return ImmutableSet.of(
-         Subnet.builder().id("1").tenantId("1").name("subnet-test").networkId("1234567890").ipVersion(4).cidr("10.0.3.0/24").build(),
-         Subnet.builder().id("2").tenantId("1").name("subnet-test-2").networkId("9876543210").ipVersion(4).cidr("192.168.3.0/24").build()
-      );
-   }
-}
diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/SubnetApiLiveTest.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/SubnetApiLiveTest.java
deleted file mode 100644
index a2bf3ec..0000000
--- a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/features/SubnetApiLiveTest.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.features;
-
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
-
-import java.util.Set;
-
-import org.jclouds.openstack.neutron.v2_0.domain.AllocationPool;
-import org.jclouds.openstack.neutron.v2_0.domain.BulkSubnet;
-import org.jclouds.openstack.neutron.v2_0.domain.HostRoute;
-import org.jclouds.openstack.neutron.v2_0.domain.NetworkType;
-import org.jclouds.openstack.neutron.v2_0.domain.ReferenceWithName;
-import org.jclouds.openstack.neutron.v2_0.domain.Subnet;
-import org.jclouds.openstack.neutron.v2_0.internal.BaseNeutronApiLiveTest;
-import org.jclouds.openstack.neutron.v2_0.options.CreateNetworkOptions;
-import org.jclouds.openstack.neutron.v2_0.options.CreateSubnetBulkOptions;
-import org.jclouds.openstack.neutron.v2_0.options.CreateSubnetOptions;
-import org.jclouds.openstack.neutron.v2_0.options.UpdateSubnetOptions;
-import org.jclouds.openstack.neutron.v2_0.util.PredicateUtil;
-import org.testng.annotations.Test;
-
-import com.google.common.base.Predicate;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Sets;
-
-/**
- * Tests subnet api in combination with the network api
- *
- */
-@Test(groups = "live", testName = "SubnetApiLiveTest", singleThreaded = true)
-public class SubnetApiLiveTest extends BaseNeutronApiLiveTest {
-
-   public void testGetAndListSubnets() {
-      for (String zone : api.getConfiguredZones()) {
-         Set<? extends ReferenceWithName> references = api.getSubnetApiForZone(zone).list().concat().toSet();
-         Set<? extends Subnet> subnets = api.getSubnetApiForZone(zone).listInDetail().concat().toSet();
-
-         assertNotNull(references);
-         assertNotNull(subnets);
-         assertEquals(references.size(), subnets.size());
-
-         for (Subnet subnet : subnets) {
-            assertNotNull(subnet.getNetworkId());
-            assertTrue(references.contains(ReferenceWithName.builder().id(subnet.getId()).tenantId(subnet.getTenantId()).name(subnet.getName()).build()));
-
-            Subnet retrievedSubnet = api.getSubnetApiForZone(zone).get(subnet.getId());
-            assertEquals(retrievedSubnet, subnet);
-         }
-      }
-   }
-
-   public void testCreateUpdateAndDeleteSubnet() {
-      for (String zone : api.getConfiguredZones()) {
-         NetworkApi networkApi = api.getNetworkApiForZone(zone);
-         String networkId = networkApi.create(CreateNetworkOptions.builder().name("jclouds-live-test").networkType(NetworkType.LOCAL).build()).getId();
-
-         SubnetApi subnetApi = api.getSubnetApiForZone(zone);
-         Set<AllocationPool> allocationPools = ImmutableSet.of(
-            AllocationPool.builder().start("a3:bc00::10").end("a3:bc00::20").build(),
-            AllocationPool.builder().start("a3:bc00::50").end("a3:bc00::90").build()
-         );
-         Set<HostRoute> hostRoutes = ImmutableSet.of(
-            HostRoute.builder().destinationCidr("a3:bc00::/48").nextHop("a3:bc00::0004").build()
-         );
-         Subnet subnet = subnetApi.create(networkId, 6, "a3:bc00::/48", CreateSubnetOptions.builder().allocationPools(allocationPools).hostRoutes(hostRoutes).build());
-         assertNotNull(subnet);
-
-         Subnet retrievedSubnet = subnetApi.get(subnet.getId());
-
-         assertEquals(retrievedSubnet.getId(), subnet.getId());
-         assertEquals(retrievedSubnet.getCidr(), "a3:bc00::/48");
-         assertTrue(retrievedSubnet.getDnsNameServers().isEmpty());
-         assertEquals(retrievedSubnet.getAllocationPools().size(), 2);
-         assertEquals(retrievedSubnet.getHostRoutes().size(), 1);
-         assertTrue(subnetApi.update(retrievedSubnet.getId(), UpdateSubnetOptions.builder().name("jclouds-live-test-update").build()));
-
-         retrievedSubnet = subnetApi.get(retrievedSubnet.getId());
-
-         assertEquals(retrievedSubnet.getId(), subnet.getId());
-         assertEquals(retrievedSubnet.getName(), "jclouds-live-test-update");
-         assertTrue(retrievedSubnet.getDnsNameServers().isEmpty());
-
-         Subnet subnet2 = subnetApi.create(networkId, 6, "a3:bd01::/48");
-         assertNotNull(subnet2);
-
-         assertTrue(subnetApi.delete(subnet.getId()));
-         assertTrue(subnetApi.delete(subnet2.getId()));
-         assertTrue(networkApi.delete(networkId));
-      }
-   }
-
-   public void testBulkCreateSubnet() {
-      for (String zone : api.getConfiguredZones()) {
-         NetworkApi networkApi = api.getNetworkApiForZone(zone);
-         String networkId = networkApi.create(CreateNetworkOptions.builder().name("jclouds-live-test").networkType(NetworkType.LOCAL).build()).getId();
-
-         SubnetApi subnetApi = api.getSubnetApiForZone(zone);
-         Set<? extends Subnet> subnets = subnetApi.createBulk(
-            CreateSubnetBulkOptions.builder().subnets(
-               ImmutableList.of(
-                  BulkSubnet.builder().name("jclouds-live-test-1").cidr("a3:bd01::/48").ipVersion(6).networkId(networkId).build(),
-                  BulkSubnet.builder().name("jclouds-live-test-2").cidr("a3:bd02::/48").ipVersion(6).networkId(networkId).build(),
-                  BulkSubnet.builder().name("jclouds-live-test-3").cidr("a3:bd03::/48").ipVersion(6).networkId(networkId).build()
-               )
-            ).build()
-         ).toSet();
-         Set<? extends Subnet> existingSubnets = subnetApi.listInDetail().concat().toSet();
-
-         assertNotNull(subnets);
-         assertTrue(!subnets.isEmpty());
-         assertEquals(subnets.size(), 3);
-
-         for (Subnet net : subnets) {
-            Predicate<Subnet> idEqualsPredicate = PredicateUtil.createIdEqualsPredicate(net.getId());
-            assertEquals(1, Sets.filter(existingSubnets, idEqualsPredicate).size());
-            assertTrue(subnetApi.delete(net.getId()));
-         }
-         assertTrue(networkApi.delete(networkId));
-      }
-   }
-}
diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/internal/BaseNeutronApiExpectTest.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/internal/BaseNeutronApiExpectTest.java
deleted file mode 100644
index ff9ffa7..0000000
--- a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/internal/BaseNeutronApiExpectTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.internal;
-
-import com.google.common.collect.ImmutableSet;
-import org.jclouds.openstack.neutron.v2_0.NeutronApi;
-import org.jclouds.openstack.neutron.v2_0.domain.Reference;
-import org.jclouds.openstack.neutron.v2_0.domain.ReferenceWithName;
-
-import java.util.Set;
-
-/**
- * Base class for writing Neutron Rest Api Expect tests
- */
-public class BaseNeutronApiExpectTest extends BaseNeutronExpectTest<NeutronApi> {
-
-   protected Set<Reference> listOfReferences() {
-      return ImmutableSet.of(
-         Reference.builder().tenantId("1234567890").id("16dba3bc-f3fa-4775-afdc-237e12c72f6a").build(),
-         Reference.builder().tenantId("1234567890").id("1a104cf5-cb18-4d35-9407-2fd2646d9d0b").build(),
-         Reference.builder().tenantId("1234567890").id("31083ae2-420d-48b2-ac98-9f7a4fd8dbdc").build(),
-         Reference.builder().tenantId("1234567890").id("49c6d6fa-ff2a-459d-b975-75a8d31c9a89").build(),
-         Reference.builder().tenantId("1234567890").id("5cb3d6f4-62cb-41c9-b964-ba7d9df79e4e").build(),
-         Reference.builder().tenantId("1234567890").id("5d51d012-3491-4db7-b1b5-6f254015015d").build(),
-         Reference.builder().tenantId("1234567890").id("5f9cf7dc-22ca-4097-8e49-1cc8b23faf17").build(),
-         Reference.builder().tenantId("1234567890").id("6319ecad-6bff-48b2-9b53-02ede8cb7588").build(),
-         Reference.builder().tenantId("1234567890").id("6ba4c788-661f-49ab-9bf8-5f10cbbb2f57").build(),
-         Reference.builder().tenantId("1234567890").id("74ed170b-5069-4353-ab38-9719766dc57e").build(),
-         Reference.builder().tenantId("1234567890").id("b71fcac1-e864-4031-8c5b-edbecd9ece36").build(),
-         Reference.builder().tenantId("1234567890").id("c7681895-d84d-4650-9ca0-82c72036b855").build()
-      );
-   }
-
-   protected Set<ReferenceWithName> listOfReferencesWithNames() {
-      return ImmutableSet.of(
-         ReferenceWithName.builder().name("jclouds-test").tenantId("1234567890").id("16dba3bc-f3fa-4775-afdc-237e12c72f6a").build(),
-         ReferenceWithName.builder().name("wibble").tenantId("1234567890").id("1a104cf5-cb18-4d35-9407-2fd2646d9d0b").build(),
-         ReferenceWithName.builder().name("jclouds-test").tenantId("1234567890").id("31083ae2-420d-48b2-ac98-9f7a4fd8dbdc").build(),
-         ReferenceWithName.builder().name("jclouds-test").tenantId("1234567890").id("49c6d6fa-ff2a-459d-b975-75a8d31c9a89").build(),
-         ReferenceWithName.builder().name("wibble").tenantId("1234567890").id("5cb3d6f4-62cb-41c9-b964-ba7d9df79e4e").build(),
-         ReferenceWithName.builder().name("jclouds-test").tenantId("1234567890").id("5d51d012-3491-4db7-b1b5-6f254015015d").build(),
-         ReferenceWithName.builder().name("wibble").tenantId("1234567890").id("5f9cf7dc-22ca-4097-8e49-1cc8b23faf17").build(),
-         ReferenceWithName.builder().name("jclouds-test").tenantId("1234567890").id("6319ecad-6bff-48b2-9b53-02ede8cb7588").build(),
-         ReferenceWithName.builder().name("jclouds-test").tenantId("1234567890").id("6ba4c788-661f-49ab-9bf8-5f10cbbb2f57").build(),
-         ReferenceWithName.builder().name("jclouds-test").tenantId("1234567890").id("74ed170b-5069-4353-ab38-9719766dc57e").build(),
-         ReferenceWithName.builder().name("wibble").tenantId("1234567890").id("b71fcac1-e864-4031-8c5b-edbecd9ece36").build(),
-         ReferenceWithName.builder().name("jclouds-test").tenantId("1234567890").id("c7681895-d84d-4650-9ca0-82c72036b855").build()
-      );
-   }
-
-}
diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/internal/BaseNeutronApiLiveTest.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/internal/BaseNeutronApiLiveTest.java
deleted file mode 100644
index de5755e..0000000
--- a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/internal/BaseNeutronApiLiveTest.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.internal;
-
-import org.jclouds.apis.BaseApiLiveTest;
-import org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties;
-import org.jclouds.openstack.neutron.v2_0.NeutronApi;
-import org.testng.annotations.Test;
-
-import java.util.Properties;
-
-/**
- * Tests behavior of {@code NeutronApi}
- */
-@Test(groups = "live")
-public class BaseNeutronApiLiveTest extends BaseApiLiveTest<NeutronApi> {
-
-   public BaseNeutronApiLiveTest() {
-      provider = "openstack-neutron-legacy";
-   }
-
-   @Override
-   protected Properties setupProperties() {
-      Properties props = super.setupProperties();
-      setIfTestSystemPropertyPresent(props, KeystoneProperties.CREDENTIAL_TYPE);
-      return props;
-   }
-
-}
diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/internal/BaseNeutronExpectTest.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/internal/BaseNeutronExpectTest.java
deleted file mode 100644
index d8c024c..0000000
--- a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/internal/BaseNeutronExpectTest.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.internal;
-
-import org.jclouds.http.HttpRequest;
-import org.jclouds.http.HttpResponse;
-import org.jclouds.openstack.keystone.v2_0.internal.KeystoneFixture;
-import org.jclouds.rest.internal.BaseRestApiExpectTest;
-
-import javax.ws.rs.core.MediaType;
-
-/**
- * Base class for writing Neutron Expect tests
- */
-public class BaseNeutronExpectTest<T> extends BaseRestApiExpectTest<T> {
-   protected HttpRequest keystoneAuthWithUsernameAndPassword;
-   protected HttpRequest keystoneAuthWithUsernameAndPasswordAndTenantName;
-   protected HttpRequest keystoneAuthWithAccessKeyAndSecretKeyAndTenantName;
-   protected String authToken;
-   protected HttpResponse responseWithKeystoneAccess;
-   protected HttpRequest keystoneAuthWithAccessKeyAndSecretKeyAndTenantId;
-   protected String identityWithTenantId;
-   protected String endpoint = "https://csnode.jclouds.org:9696/v2.0";
-
-   public BaseNeutronExpectTest() {
-      provider = "openstack-neutron-legacy";
-      keystoneAuthWithUsernameAndPassword = KeystoneFixture.INSTANCE.initialAuthWithUsernameAndPassword(identity,
-              credential);
-      keystoneAuthWithUsernameAndPasswordAndTenantName = KeystoneFixture.INSTANCE.initialAuthWithUsernameAndPasswordAndTenantName(identity,
-              credential);
-      keystoneAuthWithAccessKeyAndSecretKeyAndTenantName = KeystoneFixture.INSTANCE.initialAuthWithAccessKeyAndSecretKeyAndTenantName(identity,
-              credential);
-      keystoneAuthWithAccessKeyAndSecretKeyAndTenantId = KeystoneFixture.INSTANCE.initialAuthWithAccessKeyAndSecretKeyAndTenantId(identity,
-              credential);
-
-      authToken = KeystoneFixture.INSTANCE.getAuthToken();
-      responseWithKeystoneAccess = KeystoneFixture.INSTANCE.responseWithAccess();
-      // now, createContext arg will need tenant prefix
-      identityWithTenantId = KeystoneFixture.INSTANCE.getTenantId() + ":" + identity;
-      identity = KeystoneFixture.INSTANCE.getTenantName() + ":" + identity;
-   }
-
-   protected HttpRequest.Builder<?> authenticatedGET() {
-      return HttpRequest.builder()
-         .method("GET")
-         .addHeader("Accept", MediaType.APPLICATION_JSON)
-         .addHeader("X-Auth-Token", authToken);
-   }
-}
diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/parse/ParseNetworkTest.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/parse/ParseNetworkTest.java
deleted file mode 100644
index 9509ba3..0000000
--- a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/parse/ParseNetworkTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.parse;
-
-import org.jclouds.json.BaseItemParserTest;
-import org.jclouds.openstack.neutron.v2_0.domain.Network;
-import org.jclouds.openstack.neutron.v2_0.domain.NetworkType;
-import org.jclouds.openstack.neutron.v2_0.domain.State;
-import org.jclouds.rest.annotations.SelectJson;
-import org.testng.annotations.Test;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.core.MediaType;
-
-@Test(groups = "unit", testName = "ParseNetworkTest")
-public class ParseNetworkTest extends BaseItemParserTest<Network> {
-
-   @Override
-   public String resource() {
-      return "/network.json";
-   }
-
-   @Override
-   @SelectJson("network")
-   @Consumes(MediaType.APPLICATION_JSON)
-   public Network expected() {
-      return Network.builder()
-         .networkType(NetworkType.LOCAL)
-         .state(State.ACTIVE)
-         .name("jclouds-wibble")
-         .tenantId("1234567890")
-         .id("624312ff-d14b-4ba3-9834-1c78d23d574d")
-         .build();
-   }
-}
diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/parse/ParsePortTest.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/parse/ParsePortTest.java
deleted file mode 100644
index b029299..0000000
--- a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/parse/ParsePortTest.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.parse;
-
-import org.jclouds.json.BaseItemParserTest;
-import org.jclouds.openstack.neutron.v2_0.domain.Port;
-import org.jclouds.openstack.neutron.v2_0.domain.State;
-import org.jclouds.rest.annotations.SelectJson;
-import org.testng.annotations.Test;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.core.MediaType;
-
-@Test(groups = "unit", testName = "ParsePortTest")
-public class ParsePortTest extends BaseItemParserTest<Port> {
-
-   @Override
-   public String resource() {
-      return "/port.json";
-   }
-
-   @Override
-   @SelectJson("port")
-   @Consumes(MediaType.APPLICATION_JSON)
-   public Port expected() {
-      return Port.builder()
-         .state(State.ACTIVE)
-         .networkId("1234567890")
-         .name("jclouds-wibble")
-         .tenantId("1234567890")
-         .id("624312ff-d14b-4ba3-9834-1c78d23d574d")
-         .build();
-   }
-}
diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/parse/ParseRouterTest.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/parse/ParseRouterTest.java
deleted file mode 100644
index 1787129..0000000
--- a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/parse/ParseRouterTest.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.parse;
-
-import org.jclouds.json.BaseItemParserTest;
-import org.jclouds.openstack.neutron.v2_0.domain.ExternalGatewayInfo;
-import org.jclouds.openstack.neutron.v2_0.domain.Router;
-import org.jclouds.openstack.neutron.v2_0.domain.State;
-import org.jclouds.rest.annotations.SelectJson;
-import org.testng.annotations.Test;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.core.MediaType;
-
-@Test(groups = "unit", testName = "ParseRouterTest")
-public class ParseRouterTest extends BaseItemParserTest<Router> {
-
-   @Override
-   public String resource() {
-      return "/router.json";
-   }
-
-   @Override
-   @SelectJson("router")
-   @Consumes(MediaType.APPLICATION_JSON)
-   public Router expected() {
-      return Router.builder()
-         .externalGatewayInfo(ExternalGatewayInfo.builder().networkId("624312ff-d14b-4ba3-9834-1c78d23d574d").build())
-         .state(State.ACTIVE)
-         .name("jclouds-wibble")
-         .tenantId("1234567890")
-         .id("16dba3bc-f3fa-4775-afdc-237e12c72f6a")
-         .build();
-   }
-
-}
diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/parse/ParseSubnetTest.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/parse/ParseSubnetTest.java
deleted file mode 100644
index afe84b4..0000000
--- a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/parse/ParseSubnetTest.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.parse;
-
-import org.jclouds.json.BaseItemParserTest;
-import org.jclouds.openstack.neutron.v2_0.domain.Subnet;
-import org.jclouds.rest.annotations.SelectJson;
-import org.testng.annotations.Test;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.core.MediaType;
-
-@Test(groups = "unit", testName = "ParseSubnetTest")
-public class ParseSubnetTest extends BaseItemParserTest<Subnet> {
-
-   @Override
-   public String resource() {
-      return "/subnet.json";
-   }
-
-   @Override
-   @SelectJson("subnet")
-   @Consumes(MediaType.APPLICATION_JSON)
-   public Subnet expected() {
-      return Subnet.builder()
-         .ipVersion(4)
-         .cidr("10.0.3.0/24")
-         .networkId("1234567890")
-         .name("jclouds-wibble")
-         .tenantId("1234567890")
-         .id("624312ff-d14b-4ba3-9834-1c78d23d574d")
-         .build();
-   }
-}
diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/util/ClassUtil.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/util/ClassUtil.java
deleted file mode 100644
index 1797fb3..0000000
--- a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/util/ClassUtil.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.util;
-
-import java.lang.reflect.Field;
-
-public class ClassUtil {
-
-    public static Field findField(Class clazz, String fieldName) {
-        Field fieldToFind = null;
-        if (clazz.getSuperclass() != null)
-            fieldToFind = findField(clazz.getSuperclass(), fieldName);
-
-        if (fieldToFind != null)
-            return fieldToFind;
-
-        for (Field field : clazz.getDeclaredFields()) {
-            if (field.getName().equals(fieldName))
-                return field;
-        }
-        return null;
-    }
-
-}
diff --git a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/util/PredicateUtil.java b/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/util/PredicateUtil.java
deleted file mode 100644
index 95ede8f..0000000
--- a/openstack-neutron/src/test/java/org/jclouds/openstack/neutron/v2_0/util/PredicateUtil.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * 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.openstack.neutron.v2_0.util;
-
-import com.google.common.base.Predicate;
-import org.jclouds.javax.annotation.Nullable;
-
-import java.lang.reflect.Field;
-
-public class PredicateUtil {
-
-    public static <T> Predicate<T> createIdEqualsPredicate(final String id) {
-        return new Predicate<T>() {
-            @Override
-            public boolean apply(@Nullable T input) {
-                if (input == null) return false;
-
-                try {
-                    Class clazz = input.getClass();
-                    Field field = ClassUtil.findField(clazz, "id");
-                    field.setAccessible(true);
-                    String value = (String) field.get(input);
-                    field.setAccessible(false);
-                    return value != null && value.equals(id);
-                } catch (IllegalAccessException iae) {
-                    return false;
-                }
-            }
-        };
-    }
-
-}