diff --git a/openstack-reddwarf/src/main/java/org/jclouds/openstack/reddwarf/v1/binders/BindCreateUserToJson.java b/openstack-reddwarf/src/main/java/org/jclouds/openstack/reddwarf/v1/binders/BindCreateUserToJson.java
index d03d5e4..a7934ac 100644
--- a/openstack-reddwarf/src/main/java/org/jclouds/openstack/reddwarf/v1/binders/BindCreateUserToJson.java
+++ b/openstack-reddwarf/src/main/java/org/jclouds/openstack/reddwarf/v1/binders/BindCreateUserToJson.java
@@ -21,6 +21,7 @@
 
 import org.jclouds.http.HttpRequest;
 import org.jclouds.openstack.reddwarf.v1.domain.User;
+import org.jclouds.openstack.reddwarf.v1.domain.User.Builder;
 import org.jclouds.rest.MapBinder;
 import org.jclouds.rest.binders.BindToJsonPayload;
 
@@ -42,12 +43,17 @@
       Set<User> users = Sets.newHashSet();
       if( postParams.get("name") != null ) {
          Set<String> databases = Sets.newHashSet();
-         databases.add((String) postParams.get("databaseName"));
-         User user = User.builder()
-               .name((String) postParams.get("name"))
-               .password((String) postParams.get("password"))
-               .databases(databases)
-               .build();
+         if(postParams.get("databaseName")!=null)
+            databases.add((String) postParams.get("databaseName"));
+         
+         Builder builder = User.builder();
+         builder.name((String) postParams.get("name"))
+                .password((String) postParams.get("password"));
+         
+         builder.host((String) postParams.get("host"));
+         builder.databases(databases);
+         
+         User user = builder.build();
          users.add(user);
       }
       else if( postParams.get("users") != null ) {
diff --git a/openstack-reddwarf/src/main/java/org/jclouds/openstack/reddwarf/v1/domain/User.java b/openstack-reddwarf/src/main/java/org/jclouds/openstack/reddwarf/v1/domain/User.java
index 9d9d9f4..27aeef1 100644
--- a/openstack-reddwarf/src/main/java/org/jclouds/openstack/reddwarf/v1/domain/User.java
+++ b/openstack-reddwarf/src/main/java/org/jclouds/openstack/reddwarf/v1/domain/User.java
@@ -36,25 +36,36 @@
 public class User implements Comparable<User>{
    private final String name;
    private final String password;
+   private final String host;
    private final List<Map<String,String>> databases;
 
    @ConstructorProperties({
-      "name", "password", "databases"
+      "name", "password", "host", "databases"
    })
-   protected User(String name, String password, List<Map<String,String>> databases) {
+   protected User(String name, String password, String host, List<Map<String,String>> databases) {
       this.name = checkNotNull(name, "name required");
       this.password = password;
-      if(databases == null)this.databases = Lists.newArrayList();
+      this.host = host;
+      // Set databases to an empty list instead of null
+      if(databases == null) {
+         this.databases = Lists.newArrayList();
+      }
       else {
          this.databases = databases;
       }
    }    
 
-   protected User(String name, String password, Set<String> databases) {
+   protected User(String name, String password, String host, Set<String> databases) {
       this.name = checkNotNull(name, "name required");
       this.password = password;
-      if(databases == null)this.databases = Lists.newArrayList();
+      this.host = host;
+      // Set databases to an empty list instead of null
+      if(databases == null) {
+         this.databases = Lists.newArrayList();
+      }
       else {
+         // Using List<Map<String,String>> as the internal representation makes it easy to serialize properly
+         // with less code; this code is to present databases as List<String> to the user
          List<Map<String,String>> databaseList = Lists.newArrayList();
          for(String databaseName : databases) {
             Map<String,String> singleDatabase = Maps.newHashMap();
@@ -66,13 +77,14 @@
    }   
 
    /**
-    * @return the name of this user
+    * @return the name of this user. The name is not a unique or even sufficient identifier in some cases.
+    * @see User#getIdentifier()
     * @see User.Builder#name(String)
     */
    public String getName() {
       return this.name;
-   }
-
+   }   
+   
    /**
     * @return the password for this user
     * @see User.Builder#password(String)
@@ -80,6 +92,24 @@
    public String getPassword() {
       return this.password;
    }
+   
+   /**
+    * @return the host for this user
+    * @see User.Builder#host(String)
+    */
+   public String getHost() {
+      return this.host;
+   }
+   
+   /**
+    * @return a unique identifier for this user. In most cases, this is just the name. If the user is restricted to connections from a specific host, the hostname must be appended to the user name with a "@"
+    */
+   public String getIdentifier() {
+      if(host==null || "%".equals(host))
+         return name;
+      else 
+         return name + "@" + host;
+   }
 
    /**
     * @return the databases for this user
@@ -105,6 +135,7 @@
       User that = User.class.cast(obj);
       return Objects.equal(this.name, that.name) && 
             Objects.equal(this.password, that.password) &&
+            Objects.equal(this.host, that.host) &&
             Objects.equal(this.databases, that.databases);
    }
 
@@ -112,6 +143,7 @@
       return Objects.toStringHelper(this)
             .add("name", name)
             .add("password", password)
+            .add("host", host)
             .add("databases", databases);
    }
 
@@ -131,8 +163,9 @@
    public static class Builder {
       protected String name;
       protected String password;
+      protected String host;
       protected Set<String> databases;
-
+      
       /** 
        * @param name The name of this user
        * @return The builder object
@@ -152,6 +185,16 @@
          this.password = password;
          return this;
       }
+      
+      /** 
+       * @param host Specifies the host from which a user is allowed to connect to the database. Possible values are a string containing an IPv4 address or "%" to allow connecting from any host. Refer to Section 3.11.1, “User Access Restriction by Host” for details. If host is not specified, it defaults to "%".
+       * @return The builder object
+       * @see User#getHost()
+       */
+      public Builder host(String host) {
+         this.host = host;
+         return this;
+      }
 
       /** 
        * @param name The databases for this user
@@ -168,13 +211,14 @@
        * @return A new User object
        */
       public User build() {
-         return new User(name, password, databases);
+         return new User(name, password, host, databases);
       }
 
       public Builder fromUser(User in) {
          return this
                .name(in.getName())
                .password(in.getPassword())
+               .host(in.getHost())
                .databases(ImmutableSet.copyOf( in.getDatabases() ));
       }        
    }
diff --git a/openstack-reddwarf/src/main/java/org/jclouds/openstack/reddwarf/v1/features/UserApi.java b/openstack-reddwarf/src/main/java/org/jclouds/openstack/reddwarf/v1/features/UserApi.java
index 4a91457..9fd9a95 100644
--- a/openstack-reddwarf/src/main/java/org/jclouds/openstack/reddwarf/v1/features/UserApi.java
+++ b/openstack-reddwarf/src/main/java/org/jclouds/openstack/reddwarf/v1/features/UserApi.java
@@ -92,6 +92,23 @@
    @Fallback(FalseOnNotFoundOr404.class)
    @MapBinder(BindCreateUserToJson.class)
    boolean create(@PayloadParam("name") String userName, @PayloadParam("password") String password, @PayloadParam("databaseName") String databaseName);
+   
+   /**
+    * Create a database user by name, password, and database name. Simpler overload for {@link #create(String, Set)} 
+    *
+    * @param userName Name of the user for the database.
+    * @param password User password for database access.
+    * @param host Specifies the host from which a user is allowed to connect to the database. Possible values are a string containing an IPv4 address or "%" to allow connecting from any host. Refer to Section 3.11.1, “User Access Restriction by Host” for details. If host is not specified, it defaults to "%".
+    * @param databaseName Name of the database that the user can access.
+    * @return true if successful
+    */
+   @Named("user:create")
+   @POST
+   @Path("/users")
+   @Consumes(MediaType.APPLICATION_JSON)
+   @Fallback(FalseOnNotFoundOr404.class)
+   @MapBinder(BindCreateUserToJson.class)
+   boolean create(@PayloadParam("name") String userName, @PayloadParam("password") String password, @PayloadParam("host") String host, @PayloadParam("databaseName") String databaseName);
 
    /**
     * This operation grants access for the specified user to a database for the specified instance.
@@ -174,7 +191,7 @@
     * @param userName The name for the specified user.
     * @return The list of Users
     */
-   @Named("user:getDatabaseList/{instanceId}/{name}")
+   @Named("user:getDatabaseList/{name}")
    @GET
    @Path("/users/{name}/databases")
    @ResponseParser(ParseDatabaseListForUser.class)
@@ -183,18 +200,33 @@
    FluentIterable<String> getDatabaseList(@PathParam("name") String userName);
       
    /**
-    * Returns a User by name
+    * Returns a User by identifier
     *
-    * @param instanceId The instance ID for the specified database instance.
-    * @param userName The name for the specified user.
+    * @param name The name or identifier for the specified user.
     * @return User or Null on not found
     */
-   @Named("user:list/{instanceId}/{userName}")
+   @Named("user:get/{name}")
    @GET
    @Path("/users/{name}")
    @SelectJson("user")
    @Consumes(MediaType.APPLICATION_JSON)
    @Fallback(NullOnNotFoundOr404.class)
    @Nullable
-   User get(@PathParam("name") String userName);
+   User get(@PathParam("name") String name);
+   
+   /**
+    * Returns a User by name and allowed host
+    *
+    * @param name The name for the specified user.
+    * @param host The associated hostname
+    * @return User or Null on not found
+    */
+   @Named("user:get/{name}@{hostname}")
+   @GET
+   @Path("/users/{name}@{hostname}")
+   @SelectJson("user")
+   @Consumes(MediaType.APPLICATION_JSON)
+   @Fallback(NullOnNotFoundOr404.class)
+   @Nullable
+   User get(@PathParam("name") String name, @PathParam("hostname") String hostname);
 }
diff --git a/openstack-reddwarf/src/test/java/org/jclouds/openstack/reddwarf/v1/features/DatabaseApiExpectTest.java b/openstack-reddwarf/src/test/java/org/jclouds/openstack/reddwarf/v1/features/DatabaseApiExpectTest.java
index 8e308e7..a971a2f 100644
--- a/openstack-reddwarf/src/test/java/org/jclouds/openstack/reddwarf/v1/features/DatabaseApiExpectTest.java
+++ b/openstack-reddwarf/src/test/java/org/jclouds/openstack/reddwarf/v1/features/DatabaseApiExpectTest.java
@@ -156,6 +156,6 @@
       ).getDatabaseApiForInstanceInZone("instanceId-1234-5678","RegionOne");
 
       Set<String> databases = api.list().toSet();
-      assertEquals(databases.size(), 0);
+      assertTrue(databases.isEmpty());
    }
 }
diff --git a/openstack-reddwarf/src/test/java/org/jclouds/openstack/reddwarf/v1/features/DatabaseApiLiveTest.java b/openstack-reddwarf/src/test/java/org/jclouds/openstack/reddwarf/v1/features/DatabaseApiLiveTest.java
index 8aa7dac..d319f4b 100644
--- a/openstack-reddwarf/src/test/java/org/jclouds/openstack/reddwarf/v1/features/DatabaseApiLiveTest.java
+++ b/openstack-reddwarf/src/test/java/org/jclouds/openstack/reddwarf/v1/features/DatabaseApiLiveTest.java
@@ -51,8 +51,8 @@
          // create instances
          List<Instance> instanceList = Lists.newArrayList();
          InstanceApi instanceApi = api.getInstanceApiForZone(zone);
-         Instance first = instanceApi.create("1", 1, "first_database_testing");
-         Instance second = instanceApi.create("1", 1, "second_database_testing");
+         Instance first = instanceApi.create("1", 1, "first_database_testing_" + zone);
+         Instance second = instanceApi.create("1", 1, "second_database_testing_" + zone);
          instanceList.add(first);
          instanceList.add(second);
          InstancePredicates.awaitAvailable(instanceApi).apply(first);
diff --git a/openstack-reddwarf/src/test/java/org/jclouds/openstack/reddwarf/v1/features/InstanceApiLiveTest.java b/openstack-reddwarf/src/test/java/org/jclouds/openstack/reddwarf/v1/features/InstanceApiLiveTest.java
index 9d05956..18bbcec 100644
--- a/openstack-reddwarf/src/test/java/org/jclouds/openstack/reddwarf/v1/features/InstanceApiLiveTest.java
+++ b/openstack-reddwarf/src/test/java/org/jclouds/openstack/reddwarf/v1/features/InstanceApiLiveTest.java
@@ -21,6 +21,7 @@
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertNull;
 import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.assertFalse;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -37,7 +38,7 @@
 /**
  * @author Zack Shoylev
  */
-@Test(groups = "live", testName = "InstanceApiLiveTest")
+@Test(groups = "live", testName = "InstanceApiLiveTest", singleThreaded = true)
 public class InstanceApiLiveTest extends BaseRedDwarfApiLiveTest {
 
     private static Map<String,List<Instance>> created = Maps.newHashMap();
@@ -49,8 +50,8 @@
         for (String zone : api.getConfiguredZones()) {
             List<Instance> zoneList = Lists.newArrayList();
             InstanceApi instanceApi = api.getInstanceApiForZone(zone);
-            zoneList.add(instanceApi.create("1", 1, "first_instance_testing"));
-            Instance second = instanceApi.create("1", 1, "second_instance_testing");
+            zoneList.add(instanceApi.create("1", 1, "first_instance_testing_" + zone));
+            Instance second = instanceApi.create("1", 1, "second_instance_testing_" + zone);
             InstancePredicates.awaitAvailable(instanceApi).apply(second);
             instanceApi.enableRoot(second.getId());
             zoneList.add(second);            
@@ -81,7 +82,7 @@
         for (String zone : api.getConfiguredZones()) {
             InstanceApi instanceApi = api.getInstanceApiForZone(zone);
             FluentIterable<Instance> response = instanceApi.list(); 
-            assertTrue(response.size() > 0 );
+            assertFalse(response.isEmpty());
             for (Instance instance : response) {
                 checkInstance(instance);
             }  
diff --git a/openstack-reddwarf/src/test/java/org/jclouds/openstack/reddwarf/v1/features/UserApiExpectTest.java b/openstack-reddwarf/src/test/java/org/jclouds/openstack/reddwarf/v1/features/UserApiExpectTest.java
index 484b087..b2e785a 100644
--- a/openstack-reddwarf/src/test/java/org/jclouds/openstack/reddwarf/v1/features/UserApiExpectTest.java
+++ b/openstack-reddwarf/src/test/java/org/jclouds/openstack/reddwarf/v1/features/UserApiExpectTest.java
@@ -76,6 +76,38 @@
       boolean result = api.create("dbuser1", "password", "databaseA");
       assertFalse(result);
    }
+   
+   public void testCreateUserSimpleWithHost() {
+      URI endpoint = URI.create("http://172.16.0.1:8776/v1/3456/instances/instanceId-1234-5678/users");
+      UserApi api = requestsSendResponses(
+            keystoneAuthWithUsernameAndPasswordAndTenantName,
+            responseWithKeystoneAccess,
+            authenticatedGET().endpoint(endpoint) // bad naming convention, you should not be able to change the method to POST
+            .method("POST")
+            .payload(payloadFromResourceWithContentType("/user_create_with_host_simple_request.json", MediaType.APPLICATION_JSON))
+            .build(),
+            HttpResponse.builder().statusCode(202).build() // response
+            ).getUserApiForInstanceInZone("instanceId-1234-5678","RegionOne");
+
+      boolean result = api.create("dbuser1", "password", "192.168.64.64", "databaseA");
+      assertTrue(result);
+   }
+   
+   public void testCreateUserSimpleWithHostFail() {
+      URI endpoint = URI.create("http://172.16.0.1:8776/v1/3456/instances/instanceId-1234-5678/users");
+      UserApi api = requestsSendResponses(
+            keystoneAuthWithUsernameAndPasswordAndTenantName,
+            responseWithKeystoneAccess,
+            authenticatedGET().endpoint(endpoint) // bad naming convention, you should not be able to change the method to POST
+            .method("POST")
+            .payload(payloadFromResourceWithContentType("/user_create_with_host_simple_request.json", MediaType.APPLICATION_JSON))
+            .build(),
+            HttpResponse.builder().statusCode(404).build() // response
+            ).getUserApiForInstanceInZone("instanceId-1234-5678","RegionOne");
+
+      boolean result = api.create("dbuser1", "password", "192.168.64.64", "databaseA");
+      assertFalse(result);
+   }
 
    public void testCreateUser() {
       URI endpoint = URI.create("http://172.16.0.1:8776/v1/3456/instances/instanceId-1234-5678/users");
@@ -99,7 +131,7 @@
       databases3.add( "databaseD" );
       User user1 = User.builder().databases( databases1 ).name("dbuser1").password("password").build();
       User user2 = User.builder().databases( databases2 ).name("dbuser2").password("password").build();
-      User user3 = User.builder().databases( databases3 ).name("dbuser3").password("password").build();
+      User user3 = User.builder().databases( databases3 ).name("dbuser3").password("password").host("192.168.64.64").build();
       Set<User> users = Sets.newHashSet();
       users.add(user1);
       users.add(user2);
@@ -131,7 +163,7 @@
       databases3.add( "databaseD" );
       User user1 = User.builder().databases( databases1 ).name("dbuser1").password("password").build();
       User user2 = User.builder().databases( databases2 ).name("dbuser2").password("password").build();
-      User user3 = User.builder().databases( databases3 ).name("dbuser3").password("password").build();
+      User user3 = User.builder().databases( databases3 ).name("dbuser3").password("password").host("192.168.64.64").build();
       Set<User> users = Sets.newHashSet();
       users.add(user1);
       users.add(user2);
@@ -296,7 +328,7 @@
 
       Set<User> users = api.list().toSet();
       assertEquals(users.size(), 4);
-      assertEquals(users.iterator().next().getDatabases().size(), 0);
+      assertTrue(users.iterator().next().getDatabases().isEmpty());
       assertEquals(users.iterator().next().getName(), "dbuser1");
    }
    
@@ -310,7 +342,7 @@
       ).getUserApiForInstanceInZone("instanceId-1234-5678","RegionOne");
 
       Set<User> users = api.list().toSet();
-      assertEquals(users.size(), 0);
+      assertTrue(users.isEmpty());
    }
    
    public void testUserGetDatabaseList() {
@@ -337,7 +369,7 @@
       ).getUserApiForInstanceInZone("instanceId-1234-5678","RegionOne");
 
       Set<String> databases = api.getDatabaseList("dbuser1").toSet();
-      assertEquals(databases.size(), 0);
+      assertTrue(databases.isEmpty());
    }
    
    public void testGetUser() {
@@ -351,6 +383,7 @@
 
       User user = api.get("exampleuser");
       assertEquals(user.getName(), "exampleuser");
+      assertEquals(user.getHost(), "%");
       assertEquals(user.getDatabases().size(), 2);
       assertEquals(user.getDatabases().iterator().next(), "databaseA");
    }
@@ -367,4 +400,34 @@
       User user = api.get("exampleuser");
       assertNull(user);
    }
+   
+   public void testGetUserWithHostname() {
+      URI endpoint = URI.create("http://172.16.0.1:8776/v1/3456/instances/instanceId-1234-5678/users/exampleuser%40192.168.64.64");
+      UserApi api = requestsSendResponses(
+            keystoneAuthWithUsernameAndPasswordAndTenantName,
+            responseWithKeystoneAccess,
+            authenticatedGET().endpoint(endpoint).build(),
+            HttpResponse.builder().statusCode(200).payload(payloadFromResource("/user_get_withhost.json")).build()
+      ).getUserApiForInstanceInZone("instanceId-1234-5678","RegionOne");
+
+      User user = api.get("exampleuser", "192.168.64.64");
+      assertEquals(user.getName(), "exampleuser");
+      assertEquals(user.getHost(), "192.168.64.64");
+      assertEquals(user.getIdentifier(), "exampleuser@192.168.64.64");
+      assertEquals(user.getDatabases().size(), 2);
+      assertEquals(user.getDatabases().iterator().next(), "databaseA");
+   }
+   
+   public void testGetUserWithHostnameFail() {
+      URI endpoint = URI.create("http://172.16.0.1:8776/v1/3456/instances/instanceId-1234-5678/users/exampleuser%40192.168.64.64");
+      UserApi api = requestsSendResponses(
+            keystoneAuthWithUsernameAndPasswordAndTenantName,
+            responseWithKeystoneAccess,
+            authenticatedGET().endpoint(endpoint).build(),
+            HttpResponse.builder().statusCode(404).payload(payloadFromResource("/user_get_withhost.json")).build()
+      ).getUserApiForInstanceInZone("instanceId-1234-5678","RegionOne");
+
+      User user = api.get("exampleuser", "192.168.64.64");
+      assertNull(user);
+   }
 }
diff --git a/openstack-reddwarf/src/test/java/org/jclouds/openstack/reddwarf/v1/features/UserApiLiveTest.java b/openstack-reddwarf/src/test/java/org/jclouds/openstack/reddwarf/v1/features/UserApiLiveTest.java
index d9a4e7e..3c539d0 100644
--- a/openstack-reddwarf/src/test/java/org/jclouds/openstack/reddwarf/v1/features/UserApiLiveTest.java
+++ b/openstack-reddwarf/src/test/java/org/jclouds/openstack/reddwarf/v1/features/UserApiLiveTest.java
@@ -59,8 +59,8 @@
          // create instances
          List<Instance> instanceList = Lists.newArrayList();
          InstanceApi instanceApi = api.getInstanceApiForZone(zone);
-         Instance first = instanceApi.create("1", 1, "first_user_testing");
-         Instance second = instanceApi.create("1", 1, "second_user_testing");
+         Instance first = instanceApi.create("1", 1, "first_user_reddwarf_live_testing_" + zone);
+         Instance second = instanceApi.create("1", 1, "second_user_reddwarf_live_testing_" + zone);
          instanceList.add(first);
          instanceList.add(second);
          InstancePredicates.awaitAvailable(instanceApi).apply(first);
@@ -72,19 +72,20 @@
                .password(UUID.randomUUID().toString())
                .databases(ImmutableSet.of(
                      "u1db1", 
-                     "u1db1")).build();
+                     "u1db2")).build();
          User user2 = User.builder()
                .name("user2")
                .password(UUID.randomUUID().toString())
                .databases(ImmutableSet.of(
                      "u2db1", 
-                     "u2db1")).build();
+                     "u2db2")).build();
          User user3 = User.builder()
                .name("user3")
                .password(UUID.randomUUID().toString())
+               .host("173.203.44.122")
                .databases(ImmutableSet.of(
                      "u3db1", 
-                     "u3db1")).build();
+                     "u3db2")).build();
          UserApi userApiFirst = api.getUserApiForInstanceInZone(first.getId(), zone);
          UserApi userApiSecond = api.getUserApiForInstanceInZone(second.getId(), zone);
          userApiFirst.create(ImmutableSet.of(user1, user2));
@@ -107,7 +108,8 @@
 
    private void checkUser(User user) {
       assertNotNull(user.getName(), "Name cannot be null for " + user);
-      checkArgument(user.getDatabases().size() > 0, "Number of databases must not be 0");
+      assertNotNull(user.getHost(), "Host cannot be null (should be '%' if default) for " + user);
+      checkArgument(!user.getDatabases().isEmpty(), "Number of databases must not be 0");
    }
 
    @Test
@@ -117,7 +119,7 @@
          assertTrue(instanceApi.list().size() >= 2);
          for(Instance instance : instanceApi.list() ) {
             UserApi userApi = api.getUserApiForInstanceInZone(instance.getId(), zone);
-            if(!instance.getName().contains("user_testing"))continue;
+            if(!instance.getName().contains("user_reddwarf_live_testing"))continue;
             assertTrue(userApi.list().size() >=1);
             for(User user : userApi.list()){
                checkUser(user);      
@@ -133,12 +135,15 @@
          assertTrue(instanceApi.list().size() >= 2);
          for(Instance instance : instanceApi.list() ) {
             UserApi userApi = api.getUserApiForInstanceInZone(instance.getId(), zone);
-            if(!instance.getName().contains("user_testing"))continue;
+            if(!instance.getName().contains("user_reddwarf_live_testing"))continue;
             assertTrue(userApi.list().size() >=1);
             for(User user : userApi.list()){
-               User userFromGet = userApi.get(user.getName());
+               User userFromGet = userApi.get(user.getIdentifier());
                assertEquals(userFromGet.getName(), user.getName());
-               assertEquals(userFromGet.getDatabases(), user.getDatabases());     
+               assertEquals(userFromGet.getHost(), user.getHost());
+               assertEquals(userFromGet.getIdentifier(), user.getIdentifier());
+               assertEquals(userFromGet.getDatabases(), user.getDatabases());
+               assertEquals(userFromGet, user);
             }
          }  
       } 
@@ -151,10 +156,10 @@
          assertTrue(instanceApi.list().size() >= 2 );
          for(Instance instance : instanceApi.list() ) {
             UserApi userApi = api.getUserApiForInstanceInZone(instance.getId(), zone);
-            if(!instance.getName().contains("user_testing"))continue;
+            if(!instance.getName().contains("user_reddwarf_live_testing"))continue;
             assertTrue(userApi.list().size() >=1);
             for(User user : userApi.list()){
-               assertTrue(userApi.getDatabaseList(user.getName()).size()>0);
+               assertFalse(userApi.getDatabaseList(user.getIdentifier()).isEmpty());
             }
          }  
       } 
@@ -167,24 +172,24 @@
          assertTrue(instanceApi.list().size() >= 2);
          for(Instance instance : instanceApi.list() ) {
             UserApi userApi = api.getUserApiForInstanceInZone(instance.getId(), zone);
-            if(!instance.getName().contains("user_testing"))continue;
+            if(!instance.getName().contains("user_reddwarf_live_testing"))continue;
             assertTrue(userApi.list().size() >=1);
             for(User user : userApi.list()){
-               userApi.grant(user.getName(), "dbA");
-               userApi.grant(user.getName(), ImmutableList.of(
+               userApi.grant(user.getIdentifier(), "dbA");
+               userApi.grant(user.getIdentifier(), ImmutableList.of(
                      "dbB", 
                      "dbC"));
 
-               Set<String> databases = userApi.getDatabaseList(user.getName()).toSet();
+               Set<String> databases = userApi.getDatabaseList(user.getIdentifier()).toSet();
                assertTrue(databases.contains("dbA"));
                assertTrue(databases.contains("dbB"));
                assertTrue(databases.contains("dbC"));
 
-               userApi.revoke(user.getName(), "dbA");
-               userApi.revoke(user.getName(), "dbB");
-               userApi.revoke(user.getName(), "dbC");
+               userApi.revoke(user.getIdentifier(), "dbA");
+               userApi.revoke(user.getIdentifier(), "dbB");
+               userApi.revoke(user.getIdentifier(), "dbC");
 
-               databases = userApi.getDatabaseList(user.getName()).toSet();
+               databases = userApi.getDatabaseList(user.getIdentifier()).toSet();
                assertFalse(databases.contains("dbA"));
                assertFalse(databases.contains("dbB"));
                assertFalse(databases.contains("dbC"));
diff --git a/openstack-reddwarf/src/test/java/org/jclouds/openstack/reddwarf/v1/parse/ParseUserListTest.java b/openstack-reddwarf/src/test/java/org/jclouds/openstack/reddwarf/v1/parse/ParseUserListTest.java
index 985368c..e328de6 100644
--- a/openstack-reddwarf/src/test/java/org/jclouds/openstack/reddwarf/v1/parse/ParseUserListTest.java
+++ b/openstack-reddwarf/src/test/java/org/jclouds/openstack/reddwarf/v1/parse/ParseUserListTest.java
@@ -48,15 +48,17 @@
       return ImmutableSet
             .of(User.builder()
                   .name("dbuser1")
+                  .host("%")
                   .build(),
                   User.builder()
                   .name("dbuser2")
+                  .host("%")
                   .databases( ImmutableSet.of( 
                           "databaseB",
                           "databaseC") )
                   .build(),
-                  User.builder().name("dbuser3").build(),
-                  User.builder().name("demouser").databases(
+                  User.builder().name("dbuser3").host("%").build(),
+                  User.builder().name("demouser").host("%").databases(
                           ImmutableSet.of("sampledb"))
                           .build()
                   );
diff --git a/openstack-reddwarf/src/test/resources/logback-test.xml b/openstack-reddwarf/src/test/resources/logback-test.xml
new file mode 100644
index 0000000..6559c23
--- /dev/null
+++ b/openstack-reddwarf/src/test/resources/logback-test.xml
@@ -0,0 +1,69 @@
+<?xml version="1.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.
+
+-->
+<configuration scan="false">
+    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
+        <file>target/test-data/jclouds.log</file>
+
+        <encoder>
+            <Pattern>%d %-5p [%c] [%thread] %m%n</Pattern>
+        </encoder>
+    </appender>
+
+    <appender name="WIREFILE" class="ch.qos.logback.core.FileAppender">
+        <file>target/test-data/jclouds-wire.log</file>
+
+        <encoder>
+            <Pattern>%d %-5p [%c] [%thread] %m%n</Pattern>
+        </encoder>
+    </appender>
+
+    <appender name="BLOBSTOREFILE" class="ch.qos.logback.core.FileAppender">
+        <file>target/test-data/jclouds-blobstore.log</file>
+
+        <encoder>
+            <Pattern>%d %-5p [%c] [%thread] %m%n</Pattern>
+        </encoder>
+    </appender>
+
+    <root>
+        <level value="warn" />
+    </root>
+
+    <logger name="org.jclouds">
+        <level value="DEBUG" />
+        <appender-ref ref="FILE" />
+    </logger>
+
+    <logger name="jclouds.wire">
+        <level value="DEBUG" />
+        <appender-ref ref="WIREFILE" />
+    </logger>
+
+    <logger name="jclouds.headers">
+        <level value="DEBUG" />
+        <appender-ref ref="WIREFILE" />
+    </logger>
+
+    <logger name="jclouds.blobstore">
+        <level value="DEBUG" />
+        <appender-ref ref="BLOBSTOREFILE" />
+    </logger>
+
+</configuration>
diff --git a/openstack-reddwarf/src/test/resources/reddwarf_user_list.json b/openstack-reddwarf/src/test/resources/reddwarf_user_list.json
index 55afb56..546df43 100644
--- a/openstack-reddwarf/src/test/resources/reddwarf_user_list.json
+++ b/openstack-reddwarf/src/test/resources/reddwarf_user_list.json
@@ -1,7 +1,8 @@
 {
     "users": [
         {
-            "databases": [], 
+            "databases": [],
+            "host": "%", 
             "name": "dbuser1"
         }, 
         {
@@ -12,19 +13,22 @@
                 {
                     "name": "databaseC"
                 }
-            ], 
+            ],
+            "host": "%",
             "name": "dbuser2"
         }, 
         {
             "databases": [], 
-            "name": "dbuser3"
+            "name": "dbuser3",
+            "host": "%"
         }, 
         {
             "databases": [
                 {
                     "name": "sampledb"
                 }
-            ], 
+            ],
+            "host": "%",
             "name": "demouser"
         }
     ]
diff --git a/openstack-reddwarf/src/test/resources/user_create_request.json b/openstack-reddwarf/src/test/resources/user_create_request.json
index 7742898..f9b923e 100644
--- a/openstack-reddwarf/src/test/resources/user_create_request.json
+++ b/openstack-reddwarf/src/test/resources/user_create_request.json
@@ -28,6 +28,7 @@
                 }
             ],
             "name":"dbuser3",
+            "host":"192.168.64.64",
             "password":"password"
         }
     ]
diff --git a/openstack-reddwarf/src/test/resources/user_create_with_host_simple_request.json b/openstack-reddwarf/src/test/resources/user_create_with_host_simple_request.json
new file mode 100644
index 0000000..5dc0b78
--- /dev/null
+++ b/openstack-reddwarf/src/test/resources/user_create_with_host_simple_request.json
@@ -0,0 +1,14 @@
+{
+    "users":[
+        {
+            "databases":[
+                {
+                    "name":"databaseA"
+                }
+            ],
+            "name":"dbuser1",
+            "password":"password",
+            "host":"192.168.64.64"
+        }
+    ]
+}
diff --git a/openstack-reddwarf/src/test/resources/user_get.json b/openstack-reddwarf/src/test/resources/user_get.json
index 8d4169c..478a94d 100644
--- a/openstack-reddwarf/src/test/resources/user_get.json
+++ b/openstack-reddwarf/src/test/resources/user_get.json
@@ -1,6 +1,7 @@
 {
    "user": {
       "name": "exampleuser",
+      "host": "%",
       "databases": [
          {
             "name": "databaseA"
diff --git a/openstack-reddwarf/src/test/resources/user_get_withhost.json b/openstack-reddwarf/src/test/resources/user_get_withhost.json
new file mode 100644
index 0000000..03274b6
--- /dev/null
+++ b/openstack-reddwarf/src/test/resources/user_get_withhost.json
@@ -0,0 +1,14 @@
+{
+   "user": {
+      "name": "exampleuser",
+      "host": "192.168.64.64",
+      "databases": [
+         {
+            "name": "databaseA"
+         },
+         {
+            "name": "databaseB"
+         }
+      ]
+   }
+}
