fixing id issues
diff --git a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java
index 7690ca2..36770ea 100644
--- a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java
+++ b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java
@@ -814,7 +814,8 @@
             if (ServerSettings.isEnableSharing()){
                 // user projects + user accessible projects
                 List<String> accessibleProjectIds = new ArrayList<>();
-                sharingRegistryServerHandler.searchEntities(userName+"@"+gatewayId , gatewayId+":PROJECT",
+                sharingRegistryServerHandler.searchEntities(authzToken.getClaimsMap().get(Constants.GATEWAY_ID),
+                        userName+"@"+gatewayId , gatewayId+":PROJECT",
                         new ArrayList<>(), offset, limit).stream().forEach(p->accessibleProjectIds.add(p.entityId));
                 return getRegistryServiceClient().searchProjects(gatewayId, userName, accessibleProjectIds, new HashMap<>(), limit, offset);
             }else{
@@ -859,7 +860,8 @@
             List<String> accessibleProjIds  = new ArrayList<>();
 
             if(ServerSettings.isEnableSharing())
-                sharingRegistryServerHandler.searchEntities(userName+"@"+gatewayId, gatewayId+":PROJECT",
+                sharingRegistryServerHandler.searchEntities(authzToken.getClaimsMap().get(Constants.GATEWAY_ID),
+                        userName+"@"+gatewayId, gatewayId+":PROJECT",
                         new ArrayList<>(), 0, -1).stream().forEach(e->accessibleProjIds.add(e.entityId));
 
             return getRegistryServiceClient().searchProjects(gatewayId, userName, accessibleProjIds, filters, limit, offset);
@@ -896,7 +898,8 @@
         try {
             List<String> accessibleExpIds = new ArrayList<>();
             if(ServerSettings.isEnableSharing())
-                sharingRegistryServerHandler.searchEntities(userName+"@"+gatewayId, gatewayId+":EXPERIMENT",
+                sharingRegistryServerHandler.searchEntities(authzToken.getClaimsMap().get(Constants.GATEWAY_ID),
+                        userName+"@"+gatewayId, gatewayId+":EXPERIMENT",
                         new ArrayList<>(), 0, -1).forEach(e->accessibleExpIds.add(e.entityId));
             return getRegistryServiceClient().searchExperiments(gatewayId, userName, accessibleExpIds, filters, limit, offset);
         }catch (Exception e) {
@@ -3873,10 +3876,12 @@
         try {
             List<String> accessibleUsers = new ArrayList<>();
             if(permissionType.equals(ResourcePermissionType.WRITE))
-                sharingRegistryServerHandler.getListOfSharedUsers(resourceId, authzToken.getClaimsMap().get(Constants.GATEWAY_ID)
+                sharingRegistryServerHandler.getListOfSharedUsers(authzToken.getClaimsMap().get(Constants.GATEWAY_ID),
+                        resourceId, authzToken.getClaimsMap().get(Constants.GATEWAY_ID)
                         + ":WRITE").stream().forEach(u->accessibleUsers.add(u.userId));
             else if(permissionType.equals(ResourcePermissionType.READ))
-                sharingRegistryServerHandler.getListOfSharedUsers(resourceId, authzToken.getClaimsMap().get(Constants.GATEWAY_ID)
+                sharingRegistryServerHandler.getListOfSharedUsers(authzToken.getClaimsMap().get(Constants.GATEWAY_ID),
+                        resourceId, authzToken.getClaimsMap().get(Constants.GATEWAY_ID)
                         + ":READ").stream().forEach(u->accessibleUsers.add(u.userId));
             return accessibleUsers;
         } catch (Exception e) {
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/EntityEntity.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/EntityEntity.java
index de8abf4..7ee8225 100644
--- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/EntityEntity.java
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/EntityEntity.java
@@ -24,10 +24,11 @@
 import org.slf4j.LoggerFactory;
 
 import javax.persistence.*;
-import java.util.Map;
+import java.nio.ByteBuffer;
 
 @Entity
 @Table(name = "ENTITY", schema = "")
+@IdClass(EntityPK.class)
 public class EntityEntity {
     private final static Logger logger = LoggerFactory.getLogger(EntityEntity.class);
     private String entityId;
@@ -37,7 +38,7 @@
     private String parentEntityId;
     private String name;
     private String description;
-    private Map<String, String> metadata;
+    private ByteBuffer binaryData;
     private String fullText;
     private Long createdTime;
     private Long updatedTime;
@@ -52,7 +53,7 @@
         this.entityId = entityId;
     }
 
-    @Basic
+    @Id
     @Column(name = "DOMAIN_ID")
     public String getDomainId() {
         return domainId;
@@ -112,19 +113,14 @@
         this.description = description;
     }
 
-    @ElementCollection
-    @CollectionTable(
-            name="ENTITY_METADATA",
-            joinColumns=@JoinColumn(name="ENTITY_ID")
-    )
-    @MapKeyColumn(name="META_KEY")
-    @Column(name="META_VALUE")
-    public Map<String, String> getMetadata() {
-        return metadata;
+    @Lob
+    @Column(name="BINARY_DATA")
+    public ByteBuffer getBinaryData() {
+        return binaryData;
     }
 
-    public void setMetadata(Map<String, String> metadata) {
-        this.metadata = metadata;
+    public void setBinaryData(ByteBuffer binaryData) {
+        this.binaryData = binaryData;
     }
 
     @Lob
@@ -169,7 +165,7 @@
         if (parentEntityId != null ? !parentEntityId.equals(that.parentEntityId) : that.parentEntityId != null) return false;
         if (name != null ? !name.equals(that.name) : that.name != null) return false;
         if (description != null ? !description.equals(that.description) : that.description != null) return false;
-        if (metadata.equals(that.metadata)) return false;
+        if (binaryData.equals(that.binaryData)) return false;
         if (fullText != null ? !fullText.equals(that.fullText) : that.fullText != null) return false;
         if (createdTime != null ? !createdTime.equals(that.createdTime) : that.createdTime != null) return false;
         if (updatedTime != null ? !updatedTime.equals(that.updatedTime) : that.updatedTime != null) return false;
@@ -183,7 +179,7 @@
         int result = entityId != null ? entityId.hashCode() : 0;
         result = 31 * result + (name != null ? name.hashCode() : 0);
         result = 31 * result + (description != null ? description.hashCode() : 0);
-        result = 31 * result + (metadata != null ? metadata.hashCode() : 0);
+        result = 31 * result + (binaryData != null ? binaryData.hashCode() : 0);
         result = 31 * result + (fullText != null ? fullText.hashCode() : 0);
         result = 31 * result + (createdTime != null ? createdTime.hashCode() : 0);
         result = 31 * result + (updatedTime != null ? updatedTime.hashCode() : 0);
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupMembershipEntityPK.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/EntityPK.java
similarity index 60%
copy from modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupMembershipEntityPK.java
copy to modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/EntityPK.java
index be3b1f9..44bd33c 100644
--- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupMembershipEntityPK.java
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/EntityPK.java
@@ -27,29 +27,30 @@
 import javax.persistence.Id;
 import java.io.Serializable;
 
-public class GroupMembershipEntityPK implements Serializable {
-    private final static Logger logger = LoggerFactory.getLogger(GroupMembershipEntityPK.class);
-    private String parentId;
-    private String childId;
+public class EntityPK implements Serializable {
+    private final static Logger logger = LoggerFactory.getLogger(EntityPK.class);
+    private String entityId;
+    private String domainId;
 
-    @Column(name = "PARENT_ID")
+
+    @Column(name = "ENTITY_ID")
     @Id
-    public String getParentId() {
-        return parentId;
+    public String getEntityId() {
+        return entityId;
     }
 
-    public void setParentId(String parentId) {
-        this.parentId = parentId;
+    public void setEntityId(String entityId) {
+        this.entityId = entityId;
     }
 
-    @Column(name = "CHILD_ID")
+    @Column(name = "DOMAIN_ID")
     @Id
-    public String getChildId() {
-        return childId;
+    public String getDomainId() {
+        return domainId;
     }
 
-    public void setChildId(String childId) {
-        this.childId = childId;
+    public void setDomainId(String domainId) {
+        this.domainId = domainId;
     }
 
     @Override
@@ -57,18 +58,19 @@
         if (this == o) return true;
         if (o == null || getClass() != o.getClass()) return false;
 
-        GroupMembershipEntityPK that = (GroupMembershipEntityPK) o;
+        EntityPK that = (EntityPK) o;
 
-        if (parentId != null ? !parentId.equals(that.parentId) : that.parentId != null) return false;
-        if (childId != null ? !childId.equals(that.childId) : that.childId != null) return false;
+        if (domainId != null ? !domainId.equals(that.domainId) : that.domainId != null)
+            return false;
+        if (entityId != null ? !entityId.equals(that.entityId) : that.entityId != null) return false;
 
         return true;
     }
 
     @Override
     public int hashCode() {
-        int result = parentId != null ? parentId.hashCode() : 0;
-        result = 31 * result + (childId != null ? childId.hashCode() : 0);
+        int result = domainId != null ? domainId.hashCode() : 0;
+        result = 31 * result + (entityId != null ? entityId.hashCode() : 0);
         return result;
     }
 }
\ No newline at end of file
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/EntityTypeEntity.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/EntityTypeEntity.java
index 0b789ed..1b531cc 100644
--- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/EntityTypeEntity.java
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/EntityTypeEntity.java
@@ -27,6 +27,7 @@
 
 @Entity
 @Table(name = "ENTITY_TYPE", schema = "")
+@IdClass(EntityTypePK.class)
 public class EntityTypeEntity {
     private final static Logger logger = LoggerFactory.getLogger(EntityTypeEntity.class);
     private String entityTypeId;
@@ -46,7 +47,7 @@
         this.entityTypeId = entityTypeId;
     }
 
-    @Basic
+    @Id
     @Column(name = "DOMAIN_ID")
     public String getDomainId() {
         return domainId;
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/EntityTypePK.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/EntityTypePK.java
new file mode 100644
index 0000000..03f5ba2
--- /dev/null
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/EntityTypePK.java
@@ -0,0 +1,76 @@
+/*
+ *
+ * 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.apache.airavata.sharing.registry.db.entities;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.Column;
+import javax.persistence.Id;
+import java.io.Serializable;
+
+public class EntityTypePK implements Serializable {
+    private final static Logger logger = LoggerFactory.getLogger(EntityTypePK.class);
+    private String entityTypeId;
+    private String domainId;
+
+
+    @Column(name = "ENTITY_TYPE_ID")
+    @Id
+    public String getEntityTypeId() {
+        return entityTypeId;
+    }
+
+    public void setEntityTypeId(String entityTypeId) {
+        this.entityTypeId = entityTypeId;
+    }
+
+    @Column(name = "DOMAIN_ID")
+    @Id
+    public String getDomainId() {
+        return domainId;
+    }
+
+    public void setDomainId(String domainId) {
+        this.domainId = domainId;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        EntityTypePK that = (EntityTypePK) o;
+
+        if (entityTypeId != null ? !entityTypeId.equals(that.entityTypeId) : that.entityTypeId != null)
+            return false;
+        if (domainId != null ? !domainId.equals(that.domainId) : that.domainId != null) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = entityTypeId != null ? entityTypeId.hashCode() : 0;
+        result = 31 * result + (domainId != null ? domainId.hashCode() : 0);
+        return result;
+    }
+}
\ No newline at end of file
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupMembershipEntity.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupMembershipEntity.java
index c62a52d..1e7710b 100644
--- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupMembershipEntity.java
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupMembershipEntity.java
@@ -27,12 +27,13 @@
 
 @Entity
 @Table(name = "GROUP_MEMBERSHIP", schema = "")
-@IdClass(GroupMembershipEntityPK.class)
+@IdClass(GroupMembershipPK.class)
 public class GroupMembershipEntity {
     private final static Logger logger = LoggerFactory.getLogger(GroupMembershipEntity.class);
     private String parentId;
     private String childId;
     private String childType;
+    private String domainId;
     private Long createdTime;
     private Long updatedTime;
 
@@ -56,6 +57,16 @@
         this.childId = childId;
     }
 
+    @Id
+    @Column(name = "DOMAIN_ID")
+    public String getDomainId() {
+        return domainId;
+    }
+
+    public void setDomainId(String domainId) {
+        this.domainId = domainId;
+    }
+
     @Basic
     @Column(name = "CHILD_TYPE")
     public String getChildType() {
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupMembershipEntityPK.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupMembershipPK.java
similarity index 77%
rename from modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupMembershipEntityPK.java
rename to modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupMembershipPK.java
index be3b1f9..d123021 100644
--- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupMembershipEntityPK.java
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupMembershipPK.java
@@ -27,10 +27,11 @@
 import javax.persistence.Id;
 import java.io.Serializable;
 
-public class GroupMembershipEntityPK implements Serializable {
-    private final static Logger logger = LoggerFactory.getLogger(GroupMembershipEntityPK.class);
+public class GroupMembershipPK implements Serializable {
+    private final static Logger logger = LoggerFactory.getLogger(GroupMembershipPK.class);
     private String parentId;
     private String childId;
+    private String domainId;
 
     @Column(name = "PARENT_ID")
     @Id
@@ -52,15 +53,27 @@
         this.childId = childId;
     }
 
+    @Column(name = "DOMAIN_ID")
+    @Id
+    public String getDomainId() {
+        return domainId;
+    }
+
+    public void setDomainId(String domainId) {
+        this.domainId = domainId;
+    }
+
     @Override
     public boolean equals(Object o) {
         if (this == o) return true;
         if (o == null || getClass() != o.getClass()) return false;
 
-        GroupMembershipEntityPK that = (GroupMembershipEntityPK) o;
+        GroupMembershipPK that = (GroupMembershipPK) o;
 
-        if (parentId != null ? !parentId.equals(that.parentId) : that.parentId != null) return false;
+        if (parentId != null ? !parentId.equals(that.parentId) : that.parentId != null)
+            return false;
         if (childId != null ? !childId.equals(that.childId) : that.childId != null) return false;
+        if (domainId != null ? !domainId.equals(that.domainId) : that.domainId != null) return false;
 
         return true;
     }
@@ -69,6 +82,7 @@
     public int hashCode() {
         int result = parentId != null ? parentId.hashCode() : 0;
         result = 31 * result + (childId != null ? childId.hashCode() : 0);
+        result = 31 * result + (domainId != null ? domainId.hashCode() : 0);
         return result;
     }
 }
\ No newline at end of file
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/PermissionTypeEntity.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/PermissionTypeEntity.java
index c145cbe..a5eddae 100644
--- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/PermissionTypeEntity.java
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/PermissionTypeEntity.java
@@ -27,6 +27,7 @@
 
 @Entity
 @Table(name = "PERMISSION_TYPE", schema = "")
+@IdClass(PermissionTypePK.class)
 public class PermissionTypeEntity {
     private final static Logger logger = LoggerFactory.getLogger(PermissionTypeEntity.class);
     private String permissionTypeId;
@@ -46,7 +47,7 @@
         this.permissionTypeId = permissionTypeId;
     }
 
-    @Basic
+    @Id
     @Column(name = "DOMAIN_ID")
     public String getDomainId() {
         return domainId;
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/SharingEntityPK.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/PermissionTypePK.java
similarity index 61%
copy from modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/SharingEntityPK.java
copy to modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/PermissionTypePK.java
index da77a87..4a5bec2 100644
--- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/SharingEntityPK.java
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/PermissionTypePK.java
@@ -27,12 +27,11 @@
 import javax.persistence.Id;
 import java.io.Serializable;
 
-public class SharingEntityPK implements Serializable {
-    private final static Logger logger = LoggerFactory.getLogger(SharingEntityPK.class);
+public class PermissionTypePK implements Serializable {
+    private final static Logger logger = LoggerFactory.getLogger(PermissionTypePK.class);
     private String permissionTypeId;
-    private String entityId;
-    private String groupId;
-    private String inheritedParentId;
+    private String domainId;
+
 
     @Column(name = "PERMISSION_TYPE_ID")
     @Id
@@ -44,34 +43,14 @@
         this.permissionTypeId = permissionTypeId;
     }
 
-    @Column(name = "ENTITY_ID")
+    @Column(name = "DOMAIN_ID")
     @Id
-    public String getEntityId() {
-        return entityId;
+    public String getDomainId() {
+        return domainId;
     }
 
-    public void setEntityId(String entityId) {
-        this.entityId = entityId;
-    }
-
-    @Column(name = "GROUP_ID")
-    @Id
-    public String getGroupId() {
-        return groupId;
-    }
-
-    public void setGroupId(String groupId) {
-        this.groupId = groupId;
-    }
-
-    @Column(name = "INHERITED_PARENT_ID")
-    @Id
-    public String getInheritedParentId() {
-        return inheritedParentId;
-    }
-
-    public void setInheritedParentId(String inheritedParentId) {
-        this.inheritedParentId = inheritedParentId;
+    public void setDomainId(String domainId) {
+        this.domainId = domainId;
     }
 
     @Override
@@ -79,12 +58,11 @@
         if (this == o) return true;
         if (o == null || getClass() != o.getClass()) return false;
 
-        SharingEntityPK that = (SharingEntityPK) o;
+        PermissionTypePK that = (PermissionTypePK) o;
 
         if (permissionTypeId != null ? !permissionTypeId.equals(that.permissionTypeId) : that.permissionTypeId != null)
             return false;
-        if (entityId != null ? !entityId.equals(that.entityId) : that.entityId != null) return false;
-        if (groupId != null ? !groupId.equals(that.groupId) : that.groupId != null) return false;
+        if (domainId != null ? !domainId.equals(that.domainId) : that.domainId != null) return false;
 
         return true;
     }
@@ -92,8 +70,7 @@
     @Override
     public int hashCode() {
         int result = permissionTypeId != null ? permissionTypeId.hashCode() : 0;
-        result = 31 * result + (entityId != null ? entityId.hashCode() : 0);
-        result = 31 * result + (groupId != null ? groupId.hashCode() : 0);
+        result = 31 * result + (domainId != null ? domainId.hashCode() : 0);
         return result;
     }
 }
\ No newline at end of file
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/SharingEntity.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/SharingEntity.java
index b4b74b0..50dadab 100644
--- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/SharingEntity.java
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/SharingEntity.java
@@ -27,12 +27,13 @@
 
 @Entity
 @Table(name = "SHARING", schema = "")
-@IdClass(SharingEntityPK.class)
+@IdClass(SharingPK.class)
 public class SharingEntity {
     private final static Logger logger = LoggerFactory.getLogger(SharingEntity.class);
     private String permissionTypeId;
     private String entityId;
     private String groupId;
+    private String domainId;
     private String sharingType;
     private String inheritedParentId;
     private Long createdTime;
@@ -79,6 +80,16 @@
         this.inheritedParentId = inheritedParentId;
     }
 
+    @Id
+    @Column(name = "DOMAIN_ID")
+    public String getDomainId() {
+        return domainId;
+    }
+
+    public void setDomainId(String domainId) {
+        this.domainId = domainId;
+    }
+
     @Basic
     @Column(name = "SHARING_TYPE")
     public String getSharingType() {
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/SharingEntityPK.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/SharingPK.java
similarity index 79%
rename from modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/SharingEntityPK.java
rename to modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/SharingPK.java
index da77a87..c046fb1 100644
--- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/SharingEntityPK.java
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/SharingPK.java
@@ -27,12 +27,13 @@
 import javax.persistence.Id;
 import java.io.Serializable;
 
-public class SharingEntityPK implements Serializable {
-    private final static Logger logger = LoggerFactory.getLogger(SharingEntityPK.class);
+public class SharingPK implements Serializable {
+    private final static Logger logger = LoggerFactory.getLogger(SharingPK.class);
     private String permissionTypeId;
     private String entityId;
     private String groupId;
     private String inheritedParentId;
+    private String domainId;
 
     @Column(name = "PERMISSION_TYPE_ID")
     @Id
@@ -74,17 +75,29 @@
         this.inheritedParentId = inheritedParentId;
     }
 
+    @Column(name = "DOMAIN_ID")
+    @Id
+    public String getDomainId() {
+        return domainId;
+    }
+
+    public void setDomainId(String domainId) {
+        this.domainId = domainId;
+    }
+
     @Override
     public boolean equals(Object o) {
         if (this == o) return true;
         if (o == null || getClass() != o.getClass()) return false;
 
-        SharingEntityPK that = (SharingEntityPK) o;
+        SharingPK that = (SharingPK) o;
 
         if (permissionTypeId != null ? !permissionTypeId.equals(that.permissionTypeId) : that.permissionTypeId != null)
             return false;
         if (entityId != null ? !entityId.equals(that.entityId) : that.entityId != null) return false;
         if (groupId != null ? !groupId.equals(that.groupId) : that.groupId != null) return false;
+        if (inheritedParentId != null ? !inheritedParentId.equals(that.inheritedParentId) : that.inheritedParentId != null) return false;
+        if (domainId != null ? !domainId.equals(that.domainId) : that.domainId != null) return false;
 
         return true;
     }
@@ -94,6 +107,8 @@
         int result = permissionTypeId != null ? permissionTypeId.hashCode() : 0;
         result = 31 * result + (entityId != null ? entityId.hashCode() : 0);
         result = 31 * result + (groupId != null ? groupId.hashCode() : 0);
+        result = 31 * result + (inheritedParentId != null ? inheritedParentId.hashCode() : 0);
+        result = 31 * result + (domainId != null ? domainId.hashCode() : 0);
         return result;
     }
 }
\ No newline at end of file
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/SharingUserEntity.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/UserEntity.java
similarity index 95%
rename from modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/SharingUserEntity.java
rename to modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/UserEntity.java
index 1482ce9..05cbd19 100644
--- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/SharingUserEntity.java
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/UserEntity.java
@@ -27,9 +27,10 @@
 import java.nio.ByteBuffer;
 
 @Entity
-@Table(name = "SHARING_USER", schema = "")
-public class SharingUserEntity {
-    private final static Logger logger = LoggerFactory.getLogger(SharingUserEntity.class);
+@Table(name = "SHARING_USER", schema = "") // USER is a reserved term in derby
+@IdClass(UserPK.class)
+public class UserEntity {
+    private final static Logger logger = LoggerFactory.getLogger(UserEntity.class);
     private String userId;
     private String domainId;
     private String userName;
@@ -50,7 +51,7 @@
         this.userId = userId;
     }
 
-    @Basic
+    @Id
     @Column(name = "DOMAIN_ID")
     public String getDomainId() {
         return domainId;
@@ -135,7 +136,7 @@
         if (this == o) return true;
         if (o == null || getClass() != o.getClass()) return false;
 
-        SharingUserEntity that = (SharingUserEntity) o;
+        UserEntity that = (UserEntity) o;
 
         if (userId != null ? !userId.equals(that.userId) : that.userId != null) return false;
         if (domainId != null ? !domainId.equals(that.domainId) : that.domainId != null) return false;
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/UserGroupEntity.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/UserGroupEntity.java
index 09fd8d8..d212d8d 100644
--- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/UserGroupEntity.java
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/UserGroupEntity.java
@@ -27,6 +27,7 @@
 
 @Entity
 @Table(name = "USER_GROUP", schema = "")
+@IdClass(UserGroupPK.class)
 public class UserGroupEntity {
     private final static Logger logger = LoggerFactory.getLogger(UserGroupEntity.class);
     private String groupId;
@@ -49,7 +50,7 @@
         this.groupId = groupId;
     }
 
-    @Basic
+    @Id
     @Column(name = "DOMAIN_ID")
     public String getDomainId() {
         return domainId;
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupMembershipEntityPK.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/UserGroupPK.java
similarity index 60%
copy from modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupMembershipEntityPK.java
copy to modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/UserGroupPK.java
index be3b1f9..42ae5da 100644
--- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupMembershipEntityPK.java
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/UserGroupPK.java
@@ -27,29 +27,29 @@
 import javax.persistence.Id;
 import java.io.Serializable;
 
-public class GroupMembershipEntityPK implements Serializable {
-    private final static Logger logger = LoggerFactory.getLogger(GroupMembershipEntityPK.class);
-    private String parentId;
-    private String childId;
+public class UserGroupPK implements Serializable {
+    private final static Logger logger = LoggerFactory.getLogger(UserGroupPK.class);
+    private String groupId;
+    private String domainId;
 
-    @Column(name = "PARENT_ID")
+    @Column(name = "GROUP_ID")
     @Id
-    public String getParentId() {
-        return parentId;
+    public String getGroupId() {
+        return groupId;
     }
 
-    public void setParentId(String parentId) {
-        this.parentId = parentId;
+    public void setGroupId(String groupId) {
+        this.groupId = groupId;
     }
 
-    @Column(name = "CHILD_ID")
+    @Column(name = "DOMAIN_ID")
     @Id
-    public String getChildId() {
-        return childId;
+    public String getDomainId() {
+        return domainId;
     }
 
-    public void setChildId(String childId) {
-        this.childId = childId;
+    public void setDomainId(String domainId) {
+        this.domainId = domainId;
     }
 
     @Override
@@ -57,18 +57,19 @@
         if (this == o) return true;
         if (o == null || getClass() != o.getClass()) return false;
 
-        GroupMembershipEntityPK that = (GroupMembershipEntityPK) o;
+        UserGroupPK that = (UserGroupPK) o;
 
-        if (parentId != null ? !parentId.equals(that.parentId) : that.parentId != null) return false;
-        if (childId != null ? !childId.equals(that.childId) : that.childId != null) return false;
+        if (groupId != null ? !groupId.equals(that.groupId) : that.groupId != null)
+            return false;
+        if (domainId != null ? !domainId.equals(that.domainId) : that.domainId != null) return false;
 
         return true;
     }
 
     @Override
     public int hashCode() {
-        int result = parentId != null ? parentId.hashCode() : 0;
-        result = 31 * result + (childId != null ? childId.hashCode() : 0);
+        int result = groupId != null ? groupId.hashCode() : 0;
+        result = 31 * result + (domainId != null ? domainId.hashCode() : 0);
         return result;
     }
 }
\ No newline at end of file
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupMembershipEntityPK.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/UserPK.java
similarity index 60%
copy from modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupMembershipEntityPK.java
copy to modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/UserPK.java
index be3b1f9..eb39f69 100644
--- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/GroupMembershipEntityPK.java
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/UserPK.java
@@ -27,29 +27,29 @@
 import javax.persistence.Id;
 import java.io.Serializable;
 
-public class GroupMembershipEntityPK implements Serializable {
-    private final static Logger logger = LoggerFactory.getLogger(GroupMembershipEntityPK.class);
-    private String parentId;
-    private String childId;
+public class UserPK implements Serializable {
+    private final static Logger logger = LoggerFactory.getLogger(UserPK.class);
+    private String userId;
+    private String domainId;
 
-    @Column(name = "PARENT_ID")
+    @Column(name = "USER_ID")
     @Id
-    public String getParentId() {
-        return parentId;
+    public String getUserId() {
+        return userId;
     }
 
-    public void setParentId(String parentId) {
-        this.parentId = parentId;
+    public void setUserId(String userId) {
+        this.userId = userId;
     }
 
-    @Column(name = "CHILD_ID")
+    @Column(name = "DOMAIN_ID")
     @Id
-    public String getChildId() {
-        return childId;
+    public String getDomainId() {
+        return domainId;
     }
 
-    public void setChildId(String childId) {
-        this.childId = childId;
+    public void setDomainId(String domainId) {
+        this.domainId = domainId;
     }
 
     @Override
@@ -57,18 +57,19 @@
         if (this == o) return true;
         if (o == null || getClass() != o.getClass()) return false;
 
-        GroupMembershipEntityPK that = (GroupMembershipEntityPK) o;
+        UserPK that = (UserPK) o;
 
-        if (parentId != null ? !parentId.equals(that.parentId) : that.parentId != null) return false;
-        if (childId != null ? !childId.equals(that.childId) : that.childId != null) return false;
+        if (userId != null ? !userId.equals(that.userId) : that.userId != null)
+            return false;
+        if (domainId != null ? !domainId.equals(that.domainId) : that.domainId != null) return false;
 
         return true;
     }
 
     @Override
     public int hashCode() {
-        int result = parentId != null ? parentId.hashCode() : 0;
-        result = 31 * result + (childId != null ? childId.hashCode() : 0);
+        int result = userId != null ? userId.hashCode() : 0;
+        result = 31 * result + (domainId != null ? domainId.hashCode() : 0);
         return result;
     }
 }
\ No newline at end of file
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/EntityRepository.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/EntityRepository.java
index b7137d2..a762f00 100644
--- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/EntityRepository.java
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/EntityRepository.java
@@ -21,6 +21,7 @@
 package org.apache.airavata.sharing.registry.db.repositories;
 
 import org.apache.airavata.sharing.registry.db.entities.EntityEntity;
+import org.apache.airavata.sharing.registry.db.entities.EntityPK;
 import org.apache.airavata.sharing.registry.db.entities.SharingEntity;
 import org.apache.airavata.sharing.registry.db.utils.DBConstants;
 import org.apache.airavata.sharing.registry.models.*;
@@ -30,7 +31,7 @@
 import java.util.HashMap;
 import java.util.List;
 
-public class EntityRepository extends AbstractRepository<Entity, EntityEntity, String> {
+public class EntityRepository extends AbstractRepository<Entity, EntityEntity, EntityPK> {
     private final static Logger logger = LoggerFactory.getLogger(EntityRepository.class);
 
     public EntityRepository() {
@@ -43,7 +44,7 @@
         return select(filters, 0, -1);
     }
 
-    public List<Entity> searchEntities(List<String> groupIds, String entityTypeId, List<SearchCriteria> filters,
+    public List<Entity> searchEntities(String domainId, List<String> groupIds, String entityTypeId, List<SearchCriteria> filters,
                                        int offset, int limit) throws SharingRegistryException {
         String groupIdString = "'";
         for(String groupId : groupIds)
@@ -52,6 +53,8 @@
 
         String query = "SELECT E FROM " + EntityEntity.class.getSimpleName() + " E, " + SharingEntity.class.getSimpleName() + " S WHERE " +
                 "E." + DBConstants.EntityTable.ENTITY_ID + " = S." + DBConstants.SharingTable.ENTITY_ID + " AND " +
+                "E." + DBConstants.EntityTable.DOMAIN_ID + " = S." + DBConstants.SharingTable.DOMAIN_ID + " AND " +
+                "E." + DBConstants.EntityTable.DOMAIN_ID + " = '" + domainId + "' AND " +
                 "S." + DBConstants.SharingTable.GROUP_ID + " IN(" + groupIdString + ") AND E." + DBConstants.EntityTable.ENTITY_TYPE_ID + "='" +
                 entityTypeId + "' AND ";
 
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/EntityTypeRepository.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/EntityTypeRepository.java
index ed2a7e9..df22e36 100644
--- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/EntityTypeRepository.java
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/EntityTypeRepository.java
@@ -21,11 +21,12 @@
 package org.apache.airavata.sharing.registry.db.repositories;
 
 import org.apache.airavata.sharing.registry.db.entities.EntityTypeEntity;
+import org.apache.airavata.sharing.registry.db.entities.EntityTypePK;
 import org.apache.airavata.sharing.registry.models.EntityType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class EntityTypeRepository extends AbstractRepository<EntityType, EntityTypeEntity, String> {
+public class EntityTypeRepository extends AbstractRepository<EntityType, EntityTypeEntity, EntityTypePK> {
     private final static Logger logger = LoggerFactory.getLogger(EntityTypeRepository.class);
 
     public EntityTypeRepository() {
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/GroupMembershipRepository.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/GroupMembershipRepository.java
index 87d5d4c..ccf27cb 100644
--- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/GroupMembershipRepository.java
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/GroupMembershipRepository.java
@@ -21,39 +21,37 @@
 package org.apache.airavata.sharing.registry.db.repositories;
 
 import org.apache.airavata.sharing.registry.db.entities.GroupMembershipEntity;
-import org.apache.airavata.sharing.registry.db.entities.GroupMembershipEntityPK;
-import org.apache.airavata.sharing.registry.db.entities.SharingUserEntity;
+import org.apache.airavata.sharing.registry.db.entities.GroupMembershipPK;
+import org.apache.airavata.sharing.registry.db.entities.UserEntity;
 import org.apache.airavata.sharing.registry.db.entities.UserGroupEntity;
 import org.apache.airavata.sharing.registry.db.utils.DBConstants;
 import org.apache.airavata.sharing.registry.models.*;
 
 import java.util.*;
 
-public class GroupMembershipRepository extends AbstractRepository<GroupMembership, GroupMembershipEntity, GroupMembershipEntityPK> {
+public class GroupMembershipRepository extends AbstractRepository<GroupMembership, GroupMembershipEntity, GroupMembershipPK> {
 
     public GroupMembershipRepository() {
         super(GroupMembership.class, GroupMembershipEntity.class);
     }
 
-    public List<GroupMembership> getChildMembershipsOfGroup(String parentId) throws SharingRegistryException {
-        Map<String, String> filters = new HashMap<>();
-        filters.put(DBConstants.GroupMembershipTable.PARENT_ID, parentId);
-        return select(filters, 0, -1);
-    }
-
-    public List<User> getAllChildUsers(String groupId) throws SharingRegistryException {
-        String queryString = "SELECT U FROM " + SharingUserEntity.class.getSimpleName() + " U, " + GroupMembershipEntity.class.getSimpleName()
+    public List<User> getAllChildUsers(String domainId, String groupId) throws SharingRegistryException {
+        String queryString = "SELECT U FROM " + UserEntity.class.getSimpleName() + " U, " + GroupMembershipEntity.class.getSimpleName()
                 + " GM WHERE GM." + DBConstants.GroupMembershipTable.CHILD_ID + " = U." + DBConstants.UserTable.USER_ID + " AND " +
-                "gm." + DBConstants.GroupMembershipTable.PARENT_ID+"='"+groupId + "' AND gm." + DBConstants.GroupMembershipTable.CHILD_TYPE
+                "GM." + DBConstants.GroupMembershipTable.DOMAIN_ID + " = U." + DBConstants.UserTable.DOMAIN_ID + " AND " +
+                "GM." + DBConstants.GroupMembershipTable.DOMAIN_ID + "='" + domainId + "' AND "+
+                "GM." + DBConstants.GroupMembershipTable.PARENT_ID + "='" + groupId + "' AND GM." + DBConstants.GroupMembershipTable.CHILD_TYPE
                 + "='" + GroupChildType.USER.toString() + "'";
         UserRepository userRepository = new UserRepository();
         List<User> users = userRepository.select(queryString, 0, -1);
         return users;
     }
 
-    public List<UserGroup> getAllChildGroups(String groupId) throws SharingRegistryException {
+    public List<UserGroup> getAllChildGroups(String domainId, String groupId) throws SharingRegistryException {
         String queryString = "SELECT G FROM " + UserGroupEntity.class.getSimpleName() + " G, " + GroupMembershipEntity.class.getSimpleName()
                 + " GM WHERE GM." + DBConstants.GroupMembershipTable.CHILD_ID + " = G." + DBConstants.UserGroupTable.GROUP_ID + " AND " +
+                "GM." + DBConstants.GroupMembershipTable.DOMAIN_ID + " = G." + DBConstants.UserGroupTable.DOMAIN_ID + " AND " +
+                "GM." + DBConstants.GroupMembershipTable.DOMAIN_ID+"='"+domainId + "' AND "+
                 "GM." + DBConstants.GroupMembershipTable.PARENT_ID+"='"+groupId + "' AND GM." + DBConstants.GroupMembershipTable.CHILD_TYPE
                 + "='" + GroupChildType.GROUP.toString() + "'";
         UserGroupRepository userGroupRepository = new UserGroupRepository();
@@ -61,10 +59,11 @@
         return groups;
     }
 
-    public List<GroupMembership> getAllParentMembershipsForChild(String childId) throws SharingRegistryException {
+    public List<GroupMembership> getAllParentMembershipsForChild(String domainId, String childId) throws SharingRegistryException {
         List<GroupMembership> finalParentGroups = new ArrayList<>();
         Map<String, String> filters = new HashMap<>();
         filters.put(DBConstants.GroupMembershipTable.CHILD_ID, childId);
+        filters.put(DBConstants.GroupMembershipTable.DOMAIN_ID, domainId);
         LinkedList<GroupMembership> temp = new LinkedList<>();
         select(filters, 0, -1).stream().forEach(m -> temp.addLast(m));
         while (temp.size() > 0){
@@ -76,23 +75,4 @@
         }
         return finalParentGroups;
     }
-
-    public List<UserGroup> getAllParentGroupsForChild(String childId) throws SharingRegistryException {
-        List<UserGroup> finalParentGroups = new ArrayList<>();
-        Map<String, String> filters = new HashMap<>();
-        filters.put(DBConstants.GroupMembershipTable.CHILD_ID, childId);
-        LinkedList<GroupMembership> temp = new LinkedList<>();
-        select(filters, 0, -1).stream().forEach(m -> temp.addLast(m));
-        UserGroupRepository userGroupRepository = new UserGroupRepository();
-        while (temp.size() > 0){
-            GroupMembership gm = temp.pop();
-            filters = new HashMap<>();
-            filters.put(DBConstants.GroupMembershipTable.CHILD_ID, gm.parentId);
-            select(filters, 0, -1).stream().forEach(m -> temp.addLast(m));
-            finalParentGroups.add(userGroupRepository.get(gm.parentId));
-        }
-        return finalParentGroups;
-    }
-
-
 }
\ No newline at end of file
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/PermissionTypeRepository.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/PermissionTypeRepository.java
index ac092f1..62a725e 100644
--- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/PermissionTypeRepository.java
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/PermissionTypeRepository.java
@@ -21,6 +21,7 @@
 package org.apache.airavata.sharing.registry.db.repositories;
 
 import org.apache.airavata.sharing.registry.db.entities.PermissionTypeEntity;
+import org.apache.airavata.sharing.registry.db.entities.PermissionTypePK;
 import org.apache.airavata.sharing.registry.db.utils.DBConstants;
 import org.apache.airavata.sharing.registry.models.SharingRegistryException;
 import org.apache.airavata.sharing.registry.models.PermissionType;
@@ -31,7 +32,7 @@
 import java.util.HashMap;
 import java.util.List;
 
-public class PermissionTypeRepository extends AbstractRepository<PermissionType, PermissionTypeEntity, String> {
+public class PermissionTypeRepository extends AbstractRepository<PermissionType, PermissionTypeEntity, PermissionTypePK> {
     private final static Logger logger = LoggerFactory.getLogger(PermissionTypeRepository.class);
 
     public PermissionTypeRepository() {
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/SharingRepository.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/SharingRepository.java
index 9c30fa4..1237808 100644
--- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/SharingRepository.java
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/SharingRepository.java
@@ -21,7 +21,7 @@
 package org.apache.airavata.sharing.registry.db.repositories;
 
 import org.apache.airavata.sharing.registry.db.entities.SharingEntity;
-import org.apache.airavata.sharing.registry.db.entities.SharingEntityPK;
+import org.apache.airavata.sharing.registry.db.entities.SharingPK;
 import org.apache.airavata.sharing.registry.db.utils.DBConstants;
 import org.apache.airavata.sharing.registry.models.Sharing;
 import org.apache.airavata.sharing.registry.models.SharingRegistryException;
@@ -32,15 +32,16 @@
 import java.util.HashMap;
 import java.util.List;
 
-public class SharingRepository extends AbstractRepository<Sharing, SharingEntity, SharingEntityPK> {
+public class SharingRepository extends AbstractRepository<Sharing, SharingEntity, SharingPK> {
     private final static Logger logger = LoggerFactory.getLogger(SharingRepository.class);
 
     public SharingRepository() {
         super(Sharing.class, SharingEntity.class);
     }
 
-    public List<Sharing> getIndirectSharedChildren(String parentId, String permissionTypeId) throws SharingRegistryException {
+    public List<Sharing> getIndirectSharedChildren(String domainId, String parentId, String permissionTypeId) throws SharingRegistryException {
         HashMap<String, String> filters = new HashMap<>();
+        filters.put(DBConstants.SharingTable.DOMAIN_ID, domainId);
         filters.put(DBConstants.SharingTable.INHERITED_PARENT_ID, parentId);
         filters.put(DBConstants.SharingTable.SHARING_TYPE, SharingType.INDIRECT_CASCADING.toString());
         filters.put(DBConstants.SharingTable.PERMISSION_TYPE_ID, permissionTypeId);
@@ -48,11 +49,10 @@
         return select(filters, 0, -1);
     }
 
-    public List<Sharing> getCascadingPermissionsForEntity(String entityId) throws SharingRegistryException {
-        HashMap<String, String> filters = new HashMap<>();
-        filters.put(DBConstants.SharingTable.ENTITY_ID, entityId);
+    public List<Sharing> getCascadingPermissionsForEntity(String domainId, String entityId) throws SharingRegistryException {
         String query = "SELECT p from " + SharingEntity.class.getSimpleName() + " as p";
         query += " WHERE ";
+        query += "p." + DBConstants.SharingTable.DOMAIN_ID + " = '" + domainId + "' AND ";
         query += "p." + DBConstants.SharingTable.ENTITY_ID + " = '" + entityId + "' AND ";
         query += "p." + DBConstants.SharingTable.SHARING_TYPE + " IN('" + SharingType.DIRECT_CASCADING.toString()
                 + "', '" + SharingType.INDIRECT_CASCADING + "') ";
@@ -60,9 +60,10 @@
         return select(query, 0, -1);
     }
 
-    public boolean hasAccess(String entityId, List<String> groupIds, List<String> permissionTypeIds) throws SharingRegistryException {
+    public boolean hasAccess(String domainId, String entityId, List<String> groupIds, List<String> permissionTypeIds) throws SharingRegistryException {
         String query = "SELECT p from " + SharingEntity.class.getSimpleName() + " as p";
         query += " WHERE ";
+        query += "p." + DBConstants.SharingTable.DOMAIN_ID + " = '" + domainId + "' AND ";
         query += "p." + DBConstants.SharingTable.ENTITY_ID + " = '" + entityId + "' AND ";
         String permissionTypeIdString = "'";
         for(String permissionId : permissionTypeIds)
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/UserGroupRepository.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/UserGroupRepository.java
index 1ed1f06..c86bb22 100644
--- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/UserGroupRepository.java
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/UserGroupRepository.java
@@ -22,6 +22,7 @@
 
 import org.apache.airavata.sharing.registry.db.entities.SharingEntity;
 import org.apache.airavata.sharing.registry.db.entities.UserGroupEntity;
+import org.apache.airavata.sharing.registry.db.entities.UserGroupPK;
 import org.apache.airavata.sharing.registry.db.utils.DBConstants;
 import org.apache.airavata.sharing.registry.models.GroupCardinality;
 import org.apache.airavata.sharing.registry.models.SharingRegistryException;
@@ -31,17 +32,19 @@
 
 import java.util.List;
 
-public class UserGroupRepository extends AbstractRepository<UserGroup, UserGroupEntity, String> {
+public class UserGroupRepository extends AbstractRepository<UserGroup, UserGroupEntity, UserGroupPK> {
     private final static Logger logger = LoggerFactory.getLogger(UserGroupRepository.class);
 
     public UserGroupRepository() {
         super(UserGroup.class, UserGroupEntity.class);
     }
 
-    public List<UserGroup> getAccessibleGroups(String entityId, String permissionTypeId) throws SharingRegistryException {
+    public List<UserGroup> getAccessibleGroups(String domainId, String entityId, String permissionTypeId) throws SharingRegistryException {
         String query = "SELECT g from " + UserGroupEntity.class.getSimpleName() + " g, " + SharingEntity.class.getSimpleName() + " s";
         query += " WHERE ";
         query += "g." + DBConstants.UserGroupTable.GROUP_ID + " = s." + DBConstants.SharingTable.GROUP_ID + " AND ";
+        query += "g." + DBConstants.UserGroupTable.DOMAIN_ID + " = s." + DBConstants.SharingTable.DOMAIN_ID + " AND ";
+        query += "g." + DBConstants.UserGroupTable.DOMAIN_ID + " = '" + domainId + "' AND ";
         query += "s." + DBConstants.SharingTable.ENTITY_ID + " = '" + entityId + "' AND ";
         query += "s." + DBConstants.SharingTable.PERMISSION_TYPE_ID + " = '" + permissionTypeId + "' AND ";
         query += "g." + DBConstants.UserGroupTable.GROUP_CARDINALITY + " = '" + GroupCardinality.MULTI_USER.toString() + "'";
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/UserRepository.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/UserRepository.java
index 845c0b9..6df5d70 100644
--- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/UserRepository.java
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/UserRepository.java
@@ -22,7 +22,8 @@
 
 
 import org.apache.airavata.sharing.registry.db.entities.SharingEntity;
-import org.apache.airavata.sharing.registry.db.entities.SharingUserEntity;
+import org.apache.airavata.sharing.registry.db.entities.UserEntity;
+import org.apache.airavata.sharing.registry.db.entities.UserPK;
 import org.apache.airavata.sharing.registry.db.utils.DBConstants;
 import org.apache.airavata.sharing.registry.models.SharingRegistryException;
 import org.apache.airavata.sharing.registry.models.User;
@@ -31,18 +32,20 @@
 
 import java.util.List;
 
-public class UserRepository extends AbstractRepository<User, SharingUserEntity, String> {
+public class UserRepository extends AbstractRepository<User, UserEntity, UserPK> {
     private final static Logger logger = LoggerFactory.getLogger(UserRepository.class);
 
     public UserRepository() {
-        super(User.class, SharingUserEntity.class);
+        super(User.class, UserEntity.class);
     }
 
 
-    public List<User> getAccessibleUsers(String entityId, String permissionTypeId) throws SharingRegistryException {
-        String query = "SELECT u from " + SharingUserEntity.class.getSimpleName() + " u, " + SharingEntity.class.getSimpleName() + " s";
+    public List<User> getAccessibleUsers(String domainId, String entityId, String permissionTypeId) throws SharingRegistryException {
+        String query = "SELECT u from " + UserEntity.class.getSimpleName() + " u, " + SharingEntity.class.getSimpleName() + " s";
         query += " WHERE ";
         query += "u." + DBConstants.UserTable.USER_ID + " = s." + DBConstants.SharingTable.GROUP_ID + " AND ";
+        query += "u." + DBConstants.UserTable.DOMAIN_ID + " = s." + DBConstants.SharingTable.DOMAIN_ID + " AND ";
+        query += "u." + DBConstants.UserTable.DOMAIN_ID + " = '" + domainId + "' AND ";
         query += "s." + DBConstants.SharingTable.ENTITY_ID + " = '" + entityId + "' AND ";
         query += "s." + DBConstants.SharingTable.PERMISSION_TYPE_ID + " = '" + permissionTypeId + "'";
         query += " ORDER BY s.createdTime DESC";
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/utils/DBConstants.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/utils/DBConstants.java
index e444c43..00dd367 100644
--- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/utils/DBConstants.java
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/utils/DBConstants.java
@@ -29,72 +29,75 @@
     public static int SELECT_MAX_ROWS = 1000;
 
     public static class DomainTable {
-        public static String DOMAIN_ID = "domainId";
-        public static String NAME = "name";
-        public static String DESCRIPTION = "description";
+        public static final String DOMAIN_ID = "domainId";
+        public static final String NAME = "name";
+        public static final String DESCRIPTION = "description";
         public static final String CREATED_TIME = "createdTime";
         public static final String UPDATED_TIME = "updatedTime";
     }
 
     public static class UserTable {
-        public static String USER_ID = "userId";
-        public static String DOMAIN_ID = "domainId";
-        public static String USER_NAME = "userName";
+        public static final String USER_ID = "userId";
+        public static final String DOMAIN_ID = "domainId";
+        public static final String USER_NAME = "userName";
         public static final String CREATED_TIME = "createdTime";
         public static final String UPDATED_TIME = "updatedTime";
     }
 
     public static class UserGroupTable {
-        public static String GROUP_ID = "groupId";
-        public static String DOMAIN_ID = "domainId";
-        public static String NAME = "name";
-        public static String DESCRIPTION = "description";
-        public static String OWNER_ID = "ownerId";
-        public static String GROUP_TYPE = "groupType";
-        public static String GROUP_CARDINALITY = "groupCardinality";
+        public static final String GROUP_ID = "groupId";
+        public static final String DOMAIN_ID = "domainId";
+        public static final String NAME = "name";
+        public static final String DESCRIPTION = "description";
+        public static final String OWNER_ID = "ownerId";
+        public static final String GROUP_TYPE = "groupType";
+        public static final String GROUP_CARDINALITY = "groupCardinality";
         public static final String CREATED_TIME = "createdTime";
         public static final String UPDATED_TIME = "updatedTime";
     }
 
     public static class GroupMembershipTable {
-        public static String PARENT_ID = "parentId";
-        public static String CHILD_ID = "childId";
-        public static String CHILD_TYPE = "childType";
+        public static final String PARENT_ID = "parentId";
+        public static final String CHILD_ID = "childId";
+        public static final String CHILD_TYPE = "childType";
+        public static final String DOMAIN_ID = "domainId";
         public static final String CREATED_TIME = "createdTime";
         public static final String UPDATED_TIME = "updatedTime";
     }
 
     public static class EntityTypeTable {
-        public static String ENTITY_TYPE_ID = "entityTypeId";
-        public static String DOMAIN_ID = "domainId";
+        public static final String ENTITY_TYPE_ID = "entityTypeId";
+        public static final String DOMAIN_ID = "domainId";
         public static final String CREATED_TIME = "createdTime";
         public static final String UPDATED_TIME = "updatedTime";
     }
 
     public static class PermissionTypeTable {
-        public static String ENTITY_TYPE_ID = "permissionTypeId";
-        public static String DOMAIN_ID = "domainId";
-        public static String NAME = "name";
+        public static final String ENTITY_TYPE_ID = "permissionTypeId";
+        public static final String DOMAIN_ID = "domainId";
+        public static final String NAME = "name";
         public static final String CREATED_TIME = "createdTime";
         public static final String UPDATED_TIME = "updatedTime";
     }
 
     public static class EntityTable {
-        public static String ENTITY_ID = "entityId";
-        public static String PARENT_ENTITY_ID = "parentEntityId";
-        public static String ENTITY_TYPE_ID = "entityTypeId";
-        public static String NAME = "name";
-        public static String DESCRIPTION = "description";
-        public static String FULL_TEXT = "fullText";
+        public static final String ENTITY_ID = "entityId";
+        public static final String PARENT_ENTITY_ID = "parentEntityId";
+        public static final String ENTITY_TYPE_ID = "entityTypeId";
+        public static final String NAME = "name";
+        public static final String DESCRIPTION = "description";
+        public static final String FULL_TEXT = "fullText";
         public static final String CREATED_TIME = "createdTime";
         public static final String UPDATED_TIME = "updatedTime";
+        public static final String DOMAIN_ID = "domainId";
     }
 
     public static class SharingTable {
-        public static String PERMISSION_TYPE_ID = "permissionTypeId";
-        public static String ENTITY_ID = "entityId";
-        public static String GROUP_ID = "groupId";
-        public static String INHERITED_PARENT_ID = "inheritedParentId";
+        public static final String DOMAIN_ID = "domainId";
+        public static final String PERMISSION_TYPE_ID = "permissionTypeId";
+        public static final String ENTITY_ID = "entityId";
+        public static final String GROUP_ID = "groupId";
+        public static final String INHERITED_PARENT_ID = "inheritedParentId";
         public static final String SHARING_TYPE = "sharingType";
         public static final String CREATED_TIME = "createdTime";
         public static final String UPDATED_TIME = "updatedTime";
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/server/SharingRegistryServerHandler.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/server/SharingRegistryServerHandler.java
index 5757f61..5dc3dbc 100644
--- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/server/SharingRegistryServerHandler.java
+++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/server/SharingRegistryServerHandler.java
@@ -21,8 +21,7 @@
 package org.apache.airavata.sharing.registry.server;
 
 import org.apache.airavata.common.exception.ApplicationSettingsException;
-import org.apache.airavata.sharing.registry.db.entities.GroupMembershipEntityPK;
-import org.apache.airavata.sharing.registry.db.entities.SharingEntityPK;
+import org.apache.airavata.sharing.registry.db.entities.*;
 import org.apache.airavata.sharing.registry.db.repositories.*;
 import org.apache.airavata.sharing.registry.db.utils.DBConstants;
 import org.apache.airavata.sharing.registry.db.utils.JPAUtils;
@@ -120,7 +119,10 @@
      */
     @Override
     public String registerUser(User user) throws SharingRegistryException, TException {
-        if(userRepository.get(user.userId) != null)
+        UserPK userPK = new UserPK();
+        userPK.setUserId(user.getUserId());
+        userPK.setDomainId(user.domainId);
+        if(userRepository.get(userPK) != null)
             throw new SharingRegistryException("There exist user with given user id");
 
         user.setCreatedTime(System.currentTimeMillis());
@@ -142,13 +144,19 @@
 
     @Override
     public boolean updatedUser(User user) throws SharingRegistryException, TException {
-        User oldUser = userRepository.get(user.userId);
+        UserPK userPK = new UserPK();
+        userPK.setUserId(user.userId);
+        userPK.setDomainId(user.domainId);
+        User oldUser = userRepository.get(userPK);
         user.setCreatedTime(oldUser.createdTime);
         user.setUpdatedTime(System.currentTimeMillis());
         user = getUpdatedObject(oldUser, user);
         userRepository.update(user);
 
-        UserGroup userGroup = userGroupRepository.get(user.userId);
+        UserGroupPK userGroupPK = new UserGroupPK();
+        userGroupPK.setGroupId(user.getUserId());
+        userGroupPK.setDomainId(user.domainId);
+        UserGroup userGroup = userGroupRepository.get(userGroupPK);
         userGroup.setName(user.userName);
         userGroup.setDescription("user " + user.userName + " group");
         updateGroup(userGroup);
@@ -156,15 +164,25 @@
     }
 
     @Override
-    public boolean deleteUser(String userId) throws SharingRegistryException, TException {
-        userRepository.delete(userId);
-        userGroupRepository.delete(userId);
+    public boolean deleteUser(String domainId, String userId) throws SharingRegistryException, TException {
+        UserPK userPK = new UserPK();
+        userPK.setUserId(userId);
+        userPK.setDomainId(domainId);
+        userRepository.delete(userPK);
+
+        UserGroupPK userGroupPK = new UserGroupPK();
+        userGroupPK.setGroupId(userId);
+        userGroupPK.setDomainId(domainId);
+        userGroupRepository.delete(userGroupPK);
         return true;
     }
 
     @Override
-    public User getUser(String userId) throws SharingRegistryException, TException {
-        return userRepository.get(userId);
+    public User getUser(String domainId, String userId) throws SharingRegistryException, TException {
+        UserPK userPK = new UserPK();
+        userPK.setUserId(userId);
+        userPK.setDomainId(domainId);
+        return userRepository.get(userPK);
     }
 
     @Override
@@ -180,7 +198,10 @@
      */
     @Override
     public String createGroup(UserGroup group) throws SharingRegistryException, TException {
-        if(userGroupRepository.get(group.groupId) != null)
+        UserGroupPK userGroupPK = new UserGroupPK();
+        userGroupPK.setGroupId(group.groupId);
+        userGroupPK.setDomainId(group.domainId);
+        if(userGroupRepository.get(userGroupPK) != null)
             throw new SharingRegistryException("There exist group with given group id");
 
         group.setCreatedTime(System.currentTimeMillis());
@@ -192,7 +213,10 @@
     @Override
     public boolean updateGroup(UserGroup group) throws SharingRegistryException, TException {
         group.setUpdatedTime(System.currentTimeMillis());
-        UserGroup oldGroup = userGroupRepository.get(group.groupId);
+        UserGroupPK userGroupPK = new UserGroupPK();
+        userGroupPK.setGroupId(group.groupId);
+        userGroupPK.setDomainId(group.domainId);
+        UserGroup oldGroup = userGroupRepository.get(userGroupPK);
         group.setCreatedTime(oldGroup.createdTime);
         group = getUpdatedObject(oldGroup, group);
         userGroupRepository.update(group);
@@ -200,14 +224,20 @@
     }
 
     @Override
-    public boolean deleteGroup(String groupId) throws SharingRegistryException, TException {
-        userGroupRepository.delete(groupId);
+    public boolean deleteGroup(String domainId, String groupId) throws SharingRegistryException, TException {
+        UserGroupPK userGroupPK = new UserGroupPK();
+        userGroupPK.setGroupId(groupId);
+        userGroupPK.setDomainId(domainId);
+        userGroupRepository.delete(userGroupPK);
         return true;
     }
 
     @Override
-    public UserGroup getGroup(String groupId) throws SharingRegistryException, TException {
-        return userGroupRepository.get(groupId);
+    public UserGroup getGroup(String domainId, String groupId) throws SharingRegistryException, TException {
+        UserGroupPK userGroupPK = new UserGroupPK();
+        userGroupPK.setGroupId(groupId);
+        userGroupPK.setDomainId(domainId);
+        return userGroupRepository.get(userGroupPK);
     }
 
     @Override
@@ -218,12 +248,13 @@
     }
 
     @Override
-    public boolean addUsersToGroup(List<String> userIds, String groupId) throws SharingRegistryException, TException {
+    public boolean addUsersToGroup(String domainId, List<String> userIds, String groupId) throws SharingRegistryException, TException {
         for(int i=0; i < userIds.size(); i++){
             GroupMembership groupMembership = new GroupMembership();
             groupMembership.setParentId(groupId);
             groupMembership.setChildId(userIds.get(i));
             groupMembership.setChildType(GroupChildType.USER);
+            groupMembership.setDomainId(domainId);
             groupMembership.setCreatedTime(System.currentTimeMillis());
             groupMembership.setUpdatedTime(System.currentTimeMillis());
             groupMembershipRepository.create(groupMembership);
@@ -232,36 +263,40 @@
     }
 
     @Override
-    public boolean removeUsersFromGroup(List<String> userIds, String groupId) throws SharingRegistryException, TException {
+    public boolean removeUsersFromGroup(String domainId, List<String> userIds, String groupId) throws SharingRegistryException, TException {
         for(int i=0; i < userIds.size(); i++){
-            GroupMembershipEntityPK groupMembershipEntityPK = new GroupMembershipEntityPK();
-            groupMembershipEntityPK.setParentId(groupId);
-            groupMembershipEntityPK.setChildId(userIds.get(i));
-            groupMembershipRepository.delete(groupMembershipEntityPK);
+            GroupMembershipPK groupMembershipPK = new GroupMembershipPK();
+            groupMembershipPK.setParentId(groupId);
+            groupMembershipPK.setChildId(userIds.get(i));
+            groupMembershipPK.setDomainId(domainId);
+            groupMembershipRepository.delete(groupMembershipPK);
         }
         return true;
     }
 
     @Override
-    public List<User> getGroupMembersOfTypeUser(String groupId, int offset, int limit) throws SharingRegistryException, TException {
-        List<User> groupMemberUsers = groupMembershipRepository.getAllChildUsers(groupId);
+    public List<User> getGroupMembersOfTypeUser(String domainId, String groupId, int offset, int limit) throws SharingRegistryException, TException {
+        //TODO limit offset
+        List<User> groupMemberUsers = groupMembershipRepository.getAllChildUsers(domainId, groupId);
         return groupMemberUsers;
     }
 
     @Override
-    public List<UserGroup> getGroupMembersOfTypeGroup(String groupId, int offset, int limit) throws SharingRegistryException, TException {
-        List<UserGroup> groupMemberGroups = groupMembershipRepository.getAllChildGroups(groupId);
+    public List<UserGroup> getGroupMembersOfTypeGroup(String domainId, String groupId, int offset, int limit) throws SharingRegistryException, TException {
+        //TODO limit offset
+        List<UserGroup> groupMemberGroups = groupMembershipRepository.getAllChildGroups(domainId, groupId);
         return groupMemberGroups;
     }
 
     @Override
-    public boolean addChildGroupsToParentGroup(List<String> childIds, String groupId) throws SharingRegistryException, TException {
+    public boolean addChildGroupsToParentGroup(String domainId, List<String> childIds, String groupId) throws SharingRegistryException, TException {
         for(String childId : childIds) {
             //Todo check for cyclic dependencies
             GroupMembership groupMembership = new GroupMembership();
             groupMembership.setParentId(groupId);
             groupMembership.setChildId(childId);
             groupMembership.setChildType(GroupChildType.GROUP);
+            groupMembership.setDomainId(domainId);
             groupMembership.setCreatedTime(System.currentTimeMillis());
             groupMembership.setUpdatedTime(System.currentTimeMillis());
             groupMembershipRepository.create(groupMembership);
@@ -270,11 +305,12 @@
     }
 
     @Override
-    public boolean removeChildGroupFromParentGroup(String childId, String groupId) throws SharingRegistryException, TException {
-        GroupMembershipEntityPK groupMembershipEntityPK = new GroupMembershipEntityPK();
-        groupMembershipEntityPK.setParentId(groupId);
-        groupMembershipEntityPK.setChildId(childId);
-        groupMembershipRepository.delete(groupMembershipEntityPK);
+    public boolean removeChildGroupFromParentGroup(String domainId, String childId, String groupId) throws SharingRegistryException, TException {
+        GroupMembershipPK groupMembershipPK = new GroupMembershipPK();
+        groupMembershipPK.setParentId(groupId);
+        groupMembershipPK.setChildId(childId);
+        groupMembershipPK.setDomainId(domainId);
+        groupMembershipRepository.delete(groupMembershipPK);
         return true;
     }
 
@@ -284,7 +320,10 @@
      */
     @Override
     public String createEntityType(EntityType entityType) throws SharingRegistryException, TException {
-        if(entityTypeRepository.get(entityType.entityTypeId) != null)
+        EntityTypePK entityTypePK = new EntityTypePK();
+        entityTypePK.setDomainId(entityType.domainId);
+        entityTypePK.setEntityTypeId(entityType.entityTypeId);
+        if(entityTypeRepository.get(entityTypePK) != null)
             throw new SharingRegistryException("There exist EntityType with given EntityType id");
 
         entityType.setCreatedTime(System.currentTimeMillis());
@@ -296,7 +335,10 @@
     @Override
     public boolean updateEntityType(EntityType entityType) throws SharingRegistryException, TException {
         entityType.setUpdatedTime(System.currentTimeMillis());
-        EntityType oldEntityType = entityTypeRepository.get(entityType.entityTypeId);
+        EntityTypePK entityTypePK = new EntityTypePK();
+        entityTypePK.setDomainId(entityType.domainId);
+        entityTypePK.setEntityTypeId(entityType.entityTypeId);
+        EntityType oldEntityType = entityTypeRepository.get(entityTypePK);
         entityType.setCreatedTime(oldEntityType.createdTime);
         entityType = getUpdatedObject(oldEntityType, entityType);
         entityTypeRepository.update(entityType);
@@ -304,14 +346,20 @@
     }
 
     @Override
-    public boolean deleteEntityType(String entityTypeId) throws SharingRegistryException, TException {
-        entityTypeRepository.delete(entityTypeId);
+    public boolean deleteEntityType(String domainId, String entityTypeId) throws SharingRegistryException, TException {
+        EntityTypePK entityTypePK = new EntityTypePK();
+        entityTypePK.setDomainId(domainId);
+        entityTypePK.setEntityTypeId(entityTypeId);
+        entityTypeRepository.delete(entityTypePK);
         return true;
     }
 
     @Override
-    public EntityType getEntityType(String entityTypeId) throws SharingRegistryException, TException {
-        return entityTypeRepository.get(entityTypeId);
+    public EntityType getEntityType(String domainId, String entityTypeId) throws SharingRegistryException, TException {
+        EntityTypePK entityTypePK = new EntityTypePK();
+        entityTypePK.setDomainId(domainId);
+        entityTypePK.setEntityTypeId(entityTypeId);
+        return entityTypeRepository.get(entityTypePK);
     }
 
     @Override
@@ -327,7 +375,10 @@
      */
     @Override
     public String createPermissionType(PermissionType permissionType) throws SharingRegistryException, TException {
-        if(permissionTypeRepository.get(permissionType.permissionTypeId) != null)
+        PermissionTypePK permissionTypePK =  new PermissionTypePK();
+        permissionTypePK.setDomainId(permissionType.domainId);
+        permissionTypePK.setPermissionTypeId(permissionType.permissionTypeId);
+        if(permissionTypeRepository.get(permissionTypePK) != null)
             throw new SharingRegistryException("There exist PermissionType with given PermissionType id");
         permissionType.setCreatedTime(System.currentTimeMillis());
         permissionType.setUpdatedTime(System.currentTimeMillis());
@@ -338,21 +389,30 @@
     @Override
     public boolean updatePermissionType(PermissionType permissionType) throws SharingRegistryException, TException {
         permissionType.setUpdatedTime(System.currentTimeMillis());
-        PermissionType oldPermissionType = permissionTypeRepository.get(permissionType.permissionTypeId);
+        PermissionTypePK permissionTypePK =  new PermissionTypePK();
+        permissionTypePK.setDomainId(permissionType.domainId);
+        permissionTypePK.setPermissionTypeId(permissionType.permissionTypeId);
+        PermissionType oldPermissionType = permissionTypeRepository.get(permissionTypePK);
         permissionType = getUpdatedObject(oldPermissionType, permissionType);
         permissionTypeRepository.update(permissionType);
         return true;
     }
 
     @Override
-    public boolean deletePermissionType(String entityTypeId) throws SharingRegistryException, TException {
-        permissionTypeRepository.delete(entityTypeId);
+    public boolean deletePermissionType(String domainId, String permissionTypeId) throws SharingRegistryException, TException {
+        PermissionTypePK permissionTypePK =  new PermissionTypePK();
+        permissionTypePK.setDomainId(domainId);
+        permissionTypePK.setPermissionTypeId(permissionTypeId);
+        permissionTypeRepository.delete(permissionTypePK);
         return true;
     }
 
     @Override
-    public PermissionType getPermissionType(String permissionTypeId) throws SharingRegistryException, TException {
-        return permissionTypeRepository.get(permissionTypeId);
+    public PermissionType getPermissionType(String domainId, String permissionTypeId) throws SharingRegistryException, TException {
+        PermissionTypePK permissionTypePK =  new PermissionTypePK();
+        permissionTypePK.setDomainId(domainId);
+        permissionTypePK.setPermissionTypeId(permissionTypeId);
+        return permissionTypeRepository.get(permissionTypePK);
     }
 
     @Override
@@ -368,10 +428,17 @@
      */
     @Override
     public String registerEntity(Entity entity) throws SharingRegistryException, TException {
-        if(entityRepository.get(entity.entityId) != null)
+        EntityPK entityPK = new EntityPK();
+        entityPK.setDomainId(entity.domainId);
+        entityPK.setEntityId(entity.entityId);
+        if(entityRepository.get(entityPK) != null)
             throw new SharingRegistryException("There exist Entity with given Entity id");
 
-        if(!userRepository.isExists(entity.getOwnerId())){
+        UserPK userPK = new UserPK();
+        userPK.setDomainId(entity.domainId);
+        userPK.setUserId(entity.ownerId);
+        if(!userRepository.isExists(userPK)){
+            //Todo this is for Airavata easy integration. Proper thing is to throw an exception here
             User user = new User();
             user.setUserId(entity.getOwnerId());
             user.setDomainId(entity.domainId);
@@ -391,6 +458,7 @@
         newSharing.setGroupId(entity.ownerId);
         newSharing.setSharingType(SharingType.DIRECT_CASCADING);
         newSharing.setInheritedParentId(entity.entityId);
+        newSharing.setDomainId(entity.domainId);
         newSharing.setCreatedTime(System.currentTimeMillis());
         newSharing.setUpdatedTime(System.currentTimeMillis());
 
@@ -398,7 +466,7 @@
 
         //creating records for inherited permissions
         if(entity.getParentEntityId() != null && entity.getParentEntityId() != ""){
-            List<Sharing> sharings = sharingRepository.getCascadingPermissionsForEntity(entity.parentEntityId);
+            List<Sharing> sharings = sharingRepository.getCascadingPermissionsForEntity(entity.domainId, entity.parentEntityId);
             for(Sharing sharing : sharings){
                 newSharing = new Sharing();
                 newSharing.setPermissionTypeId(sharing.permissionTypeId);
@@ -406,6 +474,7 @@
                 newSharing.setGroupId(sharing.groupId);
                 newSharing.setInheritedParentId(sharing.inheritedParentId);
                 newSharing.setSharingType(SharingType.INDIRECT_CASCADING);
+                newSharing.setDomainId(entity.domainId);
                 newSharing.setCreatedTime(System.currentTimeMillis());
                 newSharing.setUpdatedTime(System.currentTimeMillis());
 
@@ -420,7 +489,10 @@
     public boolean updateEntity(Entity entity) throws SharingRegistryException, TException {
         //TODO Check for permission changes
         entity.setUpdatedTime(System.currentTimeMillis());
-        Entity oldEntity = entityRepository.get(entity.getEntityId());
+        EntityPK entityPK = new EntityPK();
+        entityPK.setDomainId(entity.domainId);
+        entityPK.setEntityId(entity.entityId);
+        Entity oldEntity = entityRepository.get(entityPK);
         entity.setCreatedTime(oldEntity.createdTime);
         entity = getUpdatedObject(oldEntity, entity);
         entityRepository.update(entity);
@@ -428,34 +500,40 @@
     }
 
     @Override
-    public boolean deleteEntity(String entityId) throws SharingRegistryException, TException {
+    public boolean deleteEntity(String domainId, String entityId) throws SharingRegistryException, TException {
         //TODO Check for permission changes
-        entityRepository.delete(entityId);
+        EntityPK entityPK = new EntityPK();
+        entityPK.setDomainId(domainId);
+        entityPK.setEntityId(entityId);
+        entityRepository.delete(entityPK);
         return true;
     }
 
     @Override
-    public Entity getEntity(String entityId) throws SharingRegistryException, TException {
-        return entityRepository.get(entityId);
+    public Entity getEntity(String domainId, String entityId) throws SharingRegistryException, TException {
+        EntityPK entityPK = new EntityPK();
+        entityPK.setDomainId(domainId);
+        entityPK.setEntityId(entityId);
+        return entityRepository.get(entityPK);
     }
 
     @Override
-    public List<Entity> searchEntities(String userId, String entityTypeId, List<SearchCriteria> filters,
+    public List<Entity> searchEntities(String domainId, String userId, String entityTypeId, List<SearchCriteria> filters,
                                        int offset, int limit) throws SharingRegistryException, TException {
         List<String> groupIds = new ArrayList<>();
         groupIds.add(userId);
-        groupMembershipRepository.getAllParentMembershipsForChild(userId).stream().forEach(gm->groupIds.add(gm.parentId));
-        return entityRepository.searchEntities(groupIds, entityTypeId, filters, offset, limit);
+        groupMembershipRepository.getAllParentMembershipsForChild(domainId, userId).stream().forEach(gm->groupIds.add(gm.parentId));
+        return entityRepository.searchEntities(domainId, groupIds, entityTypeId, filters, offset, limit);
     }
 
     @Override
-    public List<User> getListOfSharedUsers(String entityId, String permissionTypeId) throws SharingRegistryException, TException {
-        return userRepository.getAccessibleUsers(entityId, permissionTypeId);
+    public List<User> getListOfSharedUsers(String domainId, String entityId, String permissionTypeId) throws SharingRegistryException, TException {
+        return userRepository.getAccessibleUsers(domainId, entityId, permissionTypeId);
     }
 
     @Override
-    public List<UserGroup> getListOfSharedGroups(String entityId, String permissionTypeId) throws SharingRegistryException, TException {
-        return userGroupRepository.getAccessibleGroups(entityId, permissionTypeId);
+    public List<UserGroup> getListOfSharedGroups(String domainId, String entityId, String permissionTypeId) throws SharingRegistryException, TException {
+        return userGroupRepository.getAccessibleGroups(domainId, entityId, permissionTypeId);
     }
 
     /**
@@ -489,6 +567,7 @@
             sharing.setEntityId(entityId);
             sharing.setGroupId(userId);
             sharing.setInheritedParentId(entityId);
+            sharing.setDomainId(domainId);
             if(cascadePermission) {
                 sharing.setSharingType(SharingType.DIRECT_CASCADING);
             }else {
@@ -514,6 +593,7 @@
                     sharing.setInheritedParentId(entityId);
                     sharing.setSharingType(SharingType.INDIRECT_CASCADING);
                     sharing.setInheritedParentId(entityId);
+                    sharing.setDomainId(domainId);
                     sharing.setCreatedTime(System.currentTimeMillis());
                     sharing.setUpdatedTime(System.currentTimeMillis());
                     sharingRepository.create(sharing);
@@ -538,11 +618,11 @@
     @Override
     public boolean userHasAccess(String domainId, String userId, String entityId, String permissionTypeId) throws SharingRegistryException, TException {
         //check whether the user has permission directly or indirectly
-        List<GroupMembership> parentMemberships = groupMembershipRepository.getAllParentMembershipsForChild(userId);
+        List<GroupMembership> parentMemberships = groupMembershipRepository.getAllParentMembershipsForChild(domainId, userId);
         List<String> groupIds = new ArrayList<>();
         parentMemberships.stream().forEach(pm->groupIds.add(pm.parentId));
         groupIds.add(userId);
-        return sharingRepository.hasAccess(entityId, groupIds, Arrays.asList(permissionTypeId,
+        return sharingRepository.hasAccess(domainId, entityId, groupIds, Arrays.asList(permissionTypeId,
                 permissionTypeRepository.getGlobalPermissionTypeIdForDomain(domainId)));
     }
 
@@ -553,28 +633,30 @@
 
         //revoking permission for the entity
         for(String groupId : groupOrUserList){
-            SharingEntityPK sharingEntityPK = new SharingEntityPK();
-            sharingEntityPK.setEntityId(entityId);
-            sharingEntityPK.setGroupId(groupId);
-            sharingEntityPK.setPermissionTypeId(permissionTypeId);
-            sharingEntityPK.setInheritedParentId(entityId);
+            SharingPK sharingPK = new SharingPK();
+            sharingPK.setEntityId(entityId);
+            sharingPK.setGroupId(groupId);
+            sharingPK.setPermissionTypeId(permissionTypeId);
+            sharingPK.setInheritedParentId(entityId);
+            sharingPK.setDomainId(domainId);
 
-            sharingRepository.delete(sharingEntityPK);
+            sharingRepository.delete(sharingPK);
         }
 
         //revoking permission from inheritance
         List<Sharing> temp = new ArrayList<>();
-        sharingRepository.getIndirectSharedChildren(entityId, permissionTypeId).stream().forEach(s->temp.add(s));
+        sharingRepository.getIndirectSharedChildren(domainId, entityId, permissionTypeId).stream().forEach(s->temp.add(s));
         for(Sharing sharing : temp){
             String childEntityId = sharing.entityId;
             for(String groupId : groupOrUserList){
-                SharingEntityPK sharingEntityPK = new SharingEntityPK();
-                sharingEntityPK.setEntityId(childEntityId);
-                sharingEntityPK.setGroupId(groupId);
-                sharingEntityPK.setPermissionTypeId(permissionTypeId);
-                sharingEntityPK.setInheritedParentId(entityId);
+                SharingPK sharingPK = new SharingPK();
+                sharingPK.setEntityId(childEntityId);
+                sharingPK.setGroupId(groupId);
+                sharingPK.setPermissionTypeId(permissionTypeId);
+                sharingPK.setInheritedParentId(entityId);
+                sharingPK.setDomainId(domainId);
 
-                sharingRepository.delete(sharingEntityPK);
+                sharingRepository.delete(sharingPK);
             }
         }
         return true;
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/resources/META-INF/persistence.xml b/modules/sharing-registry/sharing-registry-server/src/main/resources/META-INF/persistence.xml
index 7b08528..a9f808c 100644
--- a/modules/sharing-registry/sharing-registry-server/src/main/resources/META-INF/persistence.xml
+++ b/modules/sharing-registry/sharing-registry-server/src/main/resources/META-INF/persistence.xml
@@ -9,7 +9,7 @@
         <class>org.apache.airavata.sharing.registry.db.entities.GroupMembershipEntity</class>
         <class>org.apache.airavata.sharing.registry.db.entities.PermissionTypeEntity</class>
         <class>org.apache.airavata.sharing.registry.db.entities.SharingEntity</class>
-        <class>org.apache.airavata.sharing.registry.db.entities.SharingUserEntity</class>
+        <class>org.apache.airavata.sharing.registry.db.entities.UserEntity</class>
         <class>org.apache.airavata.sharing.registry.db.entities.UserGroupEntity</class>
     </persistence-unit>
 </persistence>
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/resources/sharing-registry-derby.sql b/modules/sharing-registry/sharing-registry-server/src/main/resources/sharing-registry-derby.sql
index e1937fd..0b5167a 100644
--- a/modules/sharing-registry/sharing-registry-server/src/main/resources/sharing-registry-derby.sql
+++ b/modules/sharing-registry/sharing-registry-server/src/main/resources/sharing-registry-derby.sql
@@ -38,7 +38,7 @@
   ICON BLOB,
   CREATED_TIME BIGINT NOT NULL,
   UPDATED_TIME BIGINT NOT NULL,
-  PRIMARY KEY (USER_ID),
+  PRIMARY KEY (USER_ID, DOMAIN_ID),
   FOREIGN KEY (DOMAIN_ID) REFERENCES DOMAIN(DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION
 );
 
@@ -52,21 +52,21 @@
   GROUP_CARDINALITY VARCHAR(255) NOT NULL,
   CREATED_TIME BIGINT NOT NULL,
   UPDATED_TIME BIGINT NOT NULL,
-  PRIMARY KEY (GROUP_ID),
-  FOREIGN KEY (DOMAIN_ID) REFERENCES DOMAIN(DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION,
-  FOREIGN KEY (OWNER_ID) REFERENCES SHARING_USER(USER_ID) ON DELETE CASCADE ON UPDATE NO ACTION
+  PRIMARY KEY (GROUP_ID, DOMAIN_ID),
+  FOREIGN KEY (OWNER_ID, DOMAIN_ID) REFERENCES SHARING_USER(USER_ID, DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION
 );
 
 
 CREATE TABLE GROUP_MEMBERSHIP (
   PARENT_ID VARCHAR(255) NOT NULL,
   CHILD_ID VARCHAR(255) NOT NULL,
+  DOMAIN_ID VARCHAR(255) NOT NULL,
   CHILD_TYPE VARCHAR(255) NOT NULL,
   CREATED_TIME BIGINT NOT NULL,
   UPDATED_TIME BIGINT NOT NULL,
-  PRIMARY KEY (PARENT_ID, CHILD_ID),
-  FOREIGN KEY (PARENT_ID) REFERENCES USER_GROUP(GROUP_ID) ON DELETE CASCADE ON UPDATE NO ACTION,
-  FOREIGN KEY (CHILD_ID) REFERENCES USER_GROUP(GROUP_ID) ON DELETE CASCADE ON UPDATE NO ACTION
+  PRIMARY KEY (PARENT_ID, CHILD_ID, DOMAIN_ID),
+  FOREIGN KEY (PARENT_ID, DOMAIN_ID) REFERENCES USER_GROUP(GROUP_ID, DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION,
+  FOREIGN KEY (CHILD_ID, DOMAIN_ID) REFERENCES USER_GROUP(GROUP_ID, DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION
 );
 
 CREATE TABLE ENTITY_TYPE (
@@ -76,7 +76,7 @@
   DESCRIPTION VARCHAR(255),
   CREATED_TIME BIGINT NOT NULL,
   UPDATED_TIME BIGINT NOT NULL,
-  PRIMARY KEY (ENTITY_TYPE_ID),
+  PRIMARY KEY (ENTITY_TYPE_ID, DOMAIN_ID),
   FOREIGN KEY (DOMAIN_ID) REFERENCES DOMAIN(DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION
 );
 
@@ -87,7 +87,7 @@
   DESCRIPTION VARCHAR(255),
   CREATED_TIME BIGINT NOT NULL,
   UPDATED_TIME BIGINT NOT NULL,
-  PRIMARY KEY (PERMISSION_TYPE_ID),
+  PRIMARY KEY (PERMISSION_TYPE_ID, DOMAIN_ID),
   FOREIGN KEY (DOMAIN_ID) REFERENCES DOMAIN(DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION
 );
 
@@ -99,38 +99,31 @@
   PARENT_ENTITY_ID VARCHAR(255),
   NAME VARCHAR(255) NOT NULL,
   DESCRIPTION VARCHAR(255),
+  BINARY_DATA BLOB,
   FULL_TEXT CLOB,
   CREATED_TIME BIGINT NOT NULL,
   UPDATED_TIME BIGINT NOT NULL,
-  PRIMARY KEY (ENTITY_ID),
-  FOREIGN KEY (DOMAIN_ID) REFERENCES DOMAIN(DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION,
-  FOREIGN KEY (ENTITY_TYPE_ID) REFERENCES ENTITY_TYPE(ENTITY_TYPE_ID) ON DELETE CASCADE ON UPDATE NO ACTION,
-  FOREIGN KEY (OWNER_ID) REFERENCES SHARING_USER(USER_ID) ON DELETE CASCADE ON UPDATE NO ACTION,
-  FOREIGN KEY (PARENT_ENTITY_ID) REFERENCES ENTITY(ENTITY_ID) ON DELETE CASCADE ON UPDATE NO ACTION
+  PRIMARY KEY (ENTITY_ID, DOMAIN_ID),
+  FOREIGN KEY (ENTITY_TYPE_ID, DOMAIN_ID) REFERENCES ENTITY_TYPE(ENTITY_TYPE_ID, DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION,
+  FOREIGN KEY (OWNER_ID, DOMAIN_ID) REFERENCES SHARING_USER(USER_ID, DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION,
+  FOREIGN KEY (PARENT_ENTITY_ID, DOMAIN_ID) REFERENCES ENTITY(ENTITY_ID, DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION
 );
 
 -- ALTER TABLE ENTITY ADD FULLTEXT FULL_TEXT_INDEX(FULL_TEXT);
 
-CREATE TABLE ENTITY_METADATA (
-  ENTITY_ID VARCHAR (255) NOT NULL,
-  META_KEY VARCHAR (255) NOT NULL,
-  META_VALUE VARCHAR (255) NOT NULL,
-  PRIMARY KEY (ENTITY_ID, META_KEY),
-  FOREIGN KEY (ENTITY_ID) REFERENCES ENTITY(ENTITY_ID) ON DELETE CASCADE ON UPDATE NO ACTION
-);
-
 CREATE TABLE SHARING (
   PERMISSION_TYPE_ID VARCHAR(255) NOT NULL,
   ENTITY_ID VARCHAR(255) NOT NULL,
+  DOMAIN_ID VARCHAR (255) NOT NULL,
   GROUP_ID VARCHAR(255) NOT NULL,
   SHARING_TYPE VARCHAR(255) NOT NULL,
   INHERITED_PARENT_ID VARCHAR(255),
   CREATED_TIME BIGINT NOT NULL,
   UPDATED_TIME BIGINT NOT NULL,
-  PRIMARY KEY (PERMISSION_TYPE_ID, ENTITY_ID, GROUP_ID, INHERITED_PARENT_ID),
-  FOREIGN KEY (PERMISSION_TYPE_ID) REFERENCES PERMISSION_TYPE(PERMISSION_TYPE_ID) ON DELETE CASCADE ON UPDATE NO ACTION,
-  FOREIGN KEY (INHERITED_PARENT_ID) REFERENCES ENTITY(ENTITY_ID) ON DELETE CASCADE ON UPDATE NO ACTION,
-  FOREIGN KEY (GROUP_ID) REFERENCES USER_GROUP(GROUP_ID) ON DELETE CASCADE ON UPDATE NO ACTION
+  PRIMARY KEY (PERMISSION_TYPE_ID, ENTITY_ID, GROUP_ID, DOMAIN_ID, INHERITED_PARENT_ID),
+  FOREIGN KEY (PERMISSION_TYPE_ID, DOMAIN_ID) REFERENCES PERMISSION_TYPE(PERMISSION_TYPE_ID, DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION,
+  FOREIGN KEY (INHERITED_PARENT_ID, DOMAIN_ID) REFERENCES ENTITY(ENTITY_ID, DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION,
+  FOREIGN KEY (GROUP_ID, DOMAIN_ID) REFERENCES USER_GROUP(GROUP_ID, DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION
 );
 
 CREATE TABLE CONFIGURATION
diff --git a/modules/sharing-registry/sharing-registry-server/src/main/resources/sharing-registry-mysql.sql b/modules/sharing-registry/sharing-registry-server/src/main/resources/sharing-registry-mysql.sql
index 675fad3..ce7a9bf 100644
--- a/modules/sharing-registry/sharing-registry-server/src/main/resources/sharing-registry-mysql.sql
+++ b/modules/sharing-registry/sharing-registry-server/src/main/resources/sharing-registry-mysql.sql
@@ -38,8 +38,8 @@
   ICON BLOB,
   CREATED_TIME BIGINT NOT NULL,
   UPDATED_TIME BIGINT NOT NULL,
-  PRIMARY KEY (USER_ID),
-  FOREIGN KEY (DOMAIN_ID) REFERENCES DOMAIN(DOMAIN_ID) ON DELETE CASCADE ON UPDATE CASCADE
+  PRIMARY KEY (USER_ID, DOMAIN_ID),
+  FOREIGN KEY (DOMAIN_ID) REFERENCES DOMAIN(DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION
 );
 
 CREATE TABLE USER_GROUP (
@@ -52,21 +52,21 @@
   GROUP_CARDINALITY VARCHAR(255) NOT NULL,
   CREATED_TIME BIGINT NOT NULL,
   UPDATED_TIME BIGINT NOT NULL,
-  PRIMARY KEY (GROUP_ID),
-  FOREIGN KEY (DOMAIN_ID) REFERENCES DOMAIN(DOMAIN_ID) ON DELETE CASCADE ON UPDATE CASCADE,
-  FOREIGN KEY (OWNER_ID) REFERENCES SHARING_USER(USER_ID) ON DELETE CASCADE ON UPDATE CASCADE
+  PRIMARY KEY (GROUP_ID, DOMAIN_ID),
+  FOREIGN KEY (OWNER_ID, DOMAIN_ID) REFERENCES SHARING_USER(USER_ID, DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION
 );
 
 
 CREATE TABLE GROUP_MEMBERSHIP (
   PARENT_ID VARCHAR(255) NOT NULL,
   CHILD_ID VARCHAR(255) NOT NULL,
+  DOMAIN_ID VARCHAR(255) NOT NULL,
   CHILD_TYPE VARCHAR(255) NOT NULL,
   CREATED_TIME BIGINT NOT NULL,
   UPDATED_TIME BIGINT NOT NULL,
-  PRIMARY KEY (PARENT_ID, CHILD_ID),
-  FOREIGN KEY (PARENT_ID) REFERENCES USER_GROUP(GROUP_ID) ON DELETE CASCADE ON UPDATE CASCADE,
-  FOREIGN KEY (CHILD_ID) REFERENCES USER_GROUP(GROUP_ID) ON DELETE CASCADE ON UPDATE CASCADE
+  PRIMARY KEY (PARENT_ID, CHILD_ID, DOMAIN_ID),
+  FOREIGN KEY (PARENT_ID, DOMAIN_ID) REFERENCES USER_GROUP(GROUP_ID, DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION,
+  FOREIGN KEY (CHILD_ID, DOMAIN_ID) REFERENCES USER_GROUP(GROUP_ID, DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION
 );
 
 CREATE TABLE ENTITY_TYPE (
@@ -76,8 +76,8 @@
   DESCRIPTION VARCHAR(255),
   CREATED_TIME BIGINT NOT NULL,
   UPDATED_TIME BIGINT NOT NULL,
-  PRIMARY KEY (ENTITY_TYPE_ID),
-  FOREIGN KEY (DOMAIN_ID) REFERENCES DOMAIN(DOMAIN_ID) ON DELETE CASCADE ON UPDATE CASCADE
+  PRIMARY KEY (ENTITY_TYPE_ID, DOMAIN_ID),
+  FOREIGN KEY (DOMAIN_ID) REFERENCES DOMAIN(DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION
 );
 
 CREATE TABLE PERMISSION_TYPE (
@@ -87,8 +87,8 @@
   DESCRIPTION VARCHAR(255),
   CREATED_TIME BIGINT NOT NULL,
   UPDATED_TIME BIGINT NOT NULL,
-  PRIMARY KEY (PERMISSION_TYPE_ID),
-  FOREIGN KEY (DOMAIN_ID) REFERENCES DOMAIN(DOMAIN_ID) ON DELETE CASCADE ON UPDATE CASCADE
+  PRIMARY KEY (PERMISSION_TYPE_ID, DOMAIN_ID),
+  FOREIGN KEY (DOMAIN_ID) REFERENCES DOMAIN(DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION
 );
 
 CREATE TABLE ENTITY (
@@ -99,38 +99,31 @@
   PARENT_ENTITY_ID VARCHAR(255),
   NAME VARCHAR(255) NOT NULL,
   DESCRIPTION VARCHAR(255),
+  BINARY_DATA BLOB,
   FULL_TEXT TEXT,
   CREATED_TIME BIGINT NOT NULL,
   UPDATED_TIME BIGINT NOT NULL,
-  PRIMARY KEY (ENTITY_ID),
-  FOREIGN KEY (DOMAIN_ID) REFERENCES DOMAIN(DOMAIN_ID) ON DELETE CASCADE ON UPDATE CASCADE,
-  FOREIGN KEY (ENTITY_TYPE_ID) REFERENCES ENTITY_TYPE(ENTITY_TYPE_ID) ON DELETE CASCADE ON UPDATE CASCADE,
-  FOREIGN KEY (OWNER_ID) REFERENCES SHARING_USER(USER_ID) ON DELETE CASCADE ON UPDATE CASCADE,
-  FOREIGN KEY (PARENT_ENTITY_ID) REFERENCES ENTITY(ENTITY_ID) ON DELETE CASCADE ON UPDATE CASCADE
+  PRIMARY KEY (ENTITY_ID, DOMAIN_ID),
+  FOREIGN KEY (ENTITY_TYPE_ID, DOMAIN_ID) REFERENCES ENTITY_TYPE(ENTITY_TYPE_ID, DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION,
+  FOREIGN KEY (OWNER_ID, DOMAIN_ID) REFERENCES SHARING_USER(USER_ID, DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION,
+  FOREIGN KEY (PARENT_ENTITY_ID, DOMAIN_ID) REFERENCES ENTITY(ENTITY_ID, DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION
 );
 
 ALTER TABLE ENTITY ADD FULLTEXT FULL_TEXT_INDEX(FULL_TEXT);
 
-CREATE TABLE ENTITY_METADATA (
-  ENTITY_ID VARCHAR (255) NOT NULL,
-  META_KEY VARCHAR (255) NOT NULL,
-  META_VALUE VARCHAR (255) NOT NULL,
-  PRIMARY KEY (ENTITY_ID, META_KEY),
-  FOREIGN KEY (ENTITY_ID) REFERENCES ENTITY(ENTITY_ID) ON DELETE CASCADE ON UPDATE CASCADE
-);
-
 CREATE TABLE SHARING (
   PERMISSION_TYPE_ID VARCHAR(255) NOT NULL,
   ENTITY_ID VARCHAR(255) NOT NULL,
+  DOMAIN_ID VARCHAR (255) NOT NULL,
   GROUP_ID VARCHAR(255) NOT NULL,
   SHARING_TYPE VARCHAR(255) NOT NULL,
   INHERITED_PARENT_ID VARCHAR(255),
   CREATED_TIME BIGINT NOT NULL,
   UPDATED_TIME BIGINT NOT NULL,
-  PRIMARY KEY (PERMISSION_TYPE_ID, ENTITY_ID, GROUP_ID, INHERITED_PARENT_ID),
-  FOREIGN KEY (PERMISSION_TYPE_ID) REFERENCES PERMISSION_TYPE(PERMISSION_TYPE_ID) ON DELETE CASCADE ON UPDATE CASCADE,
-  FOREIGN KEY (INHERITED_PARENT_ID) REFERENCES ENTITY(ENTITY_ID) ON DELETE CASCADE ON UPDATE CASCADE,
-  FOREIGN KEY (GROUP_ID) REFERENCES USER_GROUP(GROUP_ID) ON DELETE CASCADE ON UPDATE CASCADE
+  PRIMARY KEY (PERMISSION_TYPE_ID, ENTITY_ID, GROUP_ID, DOMAIN_ID, INHERITED_PARENT_ID),
+  FOREIGN KEY (PERMISSION_TYPE_ID, DOMAIN_ID) REFERENCES PERMISSION_TYPE(PERMISSION_TYPE_ID, DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION,
+  FOREIGN KEY (INHERITED_PARENT_ID, DOMAIN_ID) REFERENCES ENTITY(ENTITY_ID, DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION,
+  FOREIGN KEY (GROUP_ID, DOMAIN_ID) REFERENCES USER_GROUP(GROUP_ID, DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION
 );
 
 CREATE TABLE CONFIGURATION
diff --git a/modules/sharing-registry/sharing-registry-server/src/test/java/org/apache/airavata/sharing/registry/SharingRegistryServerHandlerTest.java b/modules/sharing-registry/sharing-registry-server/src/test/java/org/apache/airavata/sharing/registry/SharingRegistryServerHandlerTest.java
index df0dcba..499fc88 100644
--- a/modules/sharing-registry/sharing-registry-server/src/test/java/org/apache/airavata/sharing/registry/SharingRegistryServerHandlerTest.java
+++ b/modules/sharing-registry/sharing-registry-server/src/test/java/org/apache/airavata/sharing/registry/SharingRegistryServerHandlerTest.java
@@ -34,8 +34,6 @@
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Map;
 
 public class SharingRegistryServerHandlerTest {
     private final static Logger logger = LoggerFactory.getLogger(SharingRegistryServerHandlerTest.class);
@@ -130,12 +128,12 @@
 
         Assert.assertNotNull(sharingRegistryServerHandler.createGroup(userGroup2));
 
-        sharingRegistryServerHandler.addUsersToGroup(Arrays.asList(userId1), groupId1);
-        sharingRegistryServerHandler.addUsersToGroup(Arrays.asList(userId2, userId3), groupId2);
-        sharingRegistryServerHandler.addChildGroupsToParentGroup(Arrays.asList(groupId2), groupId1);
+        sharingRegistryServerHandler.addUsersToGroup(domainId, Arrays.asList(userId1), groupId1);
+        sharingRegistryServerHandler.addUsersToGroup(domainId, Arrays.asList(userId2, userId3), groupId2);
+        sharingRegistryServerHandler.addChildGroupsToParentGroup(domainId, Arrays.asList(groupId2), groupId1);
 
-        Assert.assertTrue(sharingRegistryServerHandler.getGroupMembersOfTypeGroup(groupId1, 0, 10).size() == 1);
-        Assert.assertTrue(sharingRegistryServerHandler.getGroupMembersOfTypeUser(groupId2, 0, 10).size() == 2);
+        Assert.assertTrue(sharingRegistryServerHandler.getGroupMembersOfTypeGroup(domainId, groupId1, 0, 10).size() == 1);
+        Assert.assertTrue(sharingRegistryServerHandler.getGroupMembersOfTypeUser(domainId, groupId2, 0, 10).size() == 2);
 
 
         //Creating permission types
@@ -203,9 +201,6 @@
         entity1.setOwnerId(userId1);
         entity1.setName("Project name 1");
         entity1.setDescription("Project description");
-        Map<String, String> metadataMap = new HashMap<>();
-        metadataMap.put("key", "val");
-        entity1.setMetadata(metadataMap);
         entity1.setFullText("Project name project description");
         entity1.setCreatedTime(System.currentTimeMillis());
         entity1.setUpdatedTime(System.currentTimeMillis());
@@ -221,9 +216,6 @@
         entity2.setName("Experiment name");
         entity2.setDescription("Experiment description");
         entity2.setParentEntityId(entityId1);
-        metadataMap = new HashMap<>();
-        metadataMap.put("key", "val");
-        entity2.setMetadata(metadataMap);
         entity2.setFullText("Project name project description");
         entity2.setCreatedTime(System.currentTimeMillis());
         entity2.setUpdatedTime(System.currentTimeMillis());
@@ -239,9 +231,6 @@
         entity3.setName("Experiment name");
         entity3.setDescription("Experiment description");
         entity3.setParentEntityId(entityId1);
-        metadataMap = new HashMap<>();
-        metadataMap.put("key", "val");
-        entity3.setMetadata(metadataMap);
         entity3.setFullText("Project name project description");
         entity3.setCreatedTime(System.currentTimeMillis());
         entity3.setUpdatedTime(System.currentTimeMillis());
@@ -260,9 +249,6 @@
         entity4.setName("Input name");
         entity4.setDescription("Input file description");
         entity4.setParentEntityId(entityId3);
-        metadataMap = new HashMap<>();
-        metadataMap.put("key", "val");
-        entity4.setMetadata(metadataMap);
         entity4.setFullText("Input File");
         entity4.setCreatedTime(System.currentTimeMillis());
         entity4.setUpdatedTime(System.currentTimeMillis());
@@ -281,10 +267,10 @@
         searchCriteria.setValue("Input");
         searchCriteria.setSearchField(EntitySearchField.NAME);
         filters.add(searchCriteria);
-        Assert.assertTrue(sharingRegistryServerHandler.searchEntities(userId1, entityTypeId3, filters, 0, -1).size() > 0);
+        Assert.assertTrue(sharingRegistryServerHandler.searchEntities(domainId, userId1, entityTypeId3, filters, 0, -1).size() > 0);
 
-        Assert.assertNotNull(sharingRegistryServerHandler.getListOfSharedUsers(entityId1, permissionTypeId1));
-        Assert.assertNotNull(sharingRegistryServerHandler.getListOfSharedGroups(entityId1, permissionTypeId1));
+        Assert.assertNotNull(sharingRegistryServerHandler.getListOfSharedUsers(domainId, entityId1, permissionTypeId1));
+        Assert.assertNotNull(sharingRegistryServerHandler.getListOfSharedGroups(domainId, entityId1, permissionTypeId1));
 
 //        sharingRegistryServerHandler.revokeEntitySharingFromUsers(entityId1, Arrays.asList(userId2), permissionTypeId1);
 //        sharingRegistryServerHandler.revokeEntitySharingFromGroups(entityId3, Arrays.asList(groupId2), permissionTypeId1);
diff --git a/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/Domain.java b/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/Domain.java
index f7ea565..4d1f544 100644
--- a/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/Domain.java
+++ b/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/Domain.java
@@ -45,7 +45,7 @@
  * <li>updatedTime : Will be set by the system</li>
  * 
  */
-@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = "2016-10-14")
+@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = "2016-10-16")
 public class Domain implements org.apache.thrift.TBase<Domain, Domain._Fields>, java.io.Serializable, Cloneable, Comparable<Domain> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("Domain");
 
diff --git a/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/Entity.java b/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/Entity.java
index 81aaf90..f1ae4b8 100644
--- a/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/Entity.java
+++ b/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/Entity.java
@@ -36,20 +36,20 @@
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked"})
 /**
  * <p>Entity object which is used to register an entity in the system.</p>
- * <li><b>entityId</b> : Client id provided by the client</li>
+ * <li><b>entityId</b> : Entity id provided by the client</li>
  * <li><b>domainId</b> : Domain id</li>
  * <li><b>entityTypeId</b> : Entity type id</li>
  * <li><b>ownerId</b> : Owner id</li>
  * <li>parentEntityId : Parent entity id</li>
  * <li><b>name</b> : Name</li>
  * <li>description : Short description for the entity</li>
- * <li>metadata : Map of optional metadata</li>
+ * <li>binaryData : Any information stored in binary format</li>
  * <li>fullText : A string which will be considered for full text search</li>
  * <li>createdTime : If client provides this value then the system will use it if not the current time will be set</li>
  * <li>updatedTime : If client provides this value then the system will use it if not the current time will be set</li>
  * 
  */
-@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = "2016-10-14")
+@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = "2016-10-16")
 public class Entity implements org.apache.thrift.TBase<Entity, Entity._Fields>, java.io.Serializable, Cloneable, Comparable<Entity> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("Entity");
 
@@ -60,7 +60,7 @@
   private static final org.apache.thrift.protocol.TField PARENT_ENTITY_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("parentEntityId", org.apache.thrift.protocol.TType.STRING, (short)5);
   private static final org.apache.thrift.protocol.TField NAME_FIELD_DESC = new org.apache.thrift.protocol.TField("name", org.apache.thrift.protocol.TType.STRING, (short)6);
   private static final org.apache.thrift.protocol.TField DESCRIPTION_FIELD_DESC = new org.apache.thrift.protocol.TField("description", org.apache.thrift.protocol.TType.STRING, (short)7);
-  private static final org.apache.thrift.protocol.TField METADATA_FIELD_DESC = new org.apache.thrift.protocol.TField("metadata", org.apache.thrift.protocol.TType.MAP, (short)8);
+  private static final org.apache.thrift.protocol.TField BINARY_DATA_FIELD_DESC = new org.apache.thrift.protocol.TField("binaryData", org.apache.thrift.protocol.TType.STRING, (short)8);
   private static final org.apache.thrift.protocol.TField FULL_TEXT_FIELD_DESC = new org.apache.thrift.protocol.TField("fullText", org.apache.thrift.protocol.TType.STRING, (short)9);
   private static final org.apache.thrift.protocol.TField CREATED_TIME_FIELD_DESC = new org.apache.thrift.protocol.TField("createdTime", org.apache.thrift.protocol.TType.I64, (short)10);
   private static final org.apache.thrift.protocol.TField UPDATED_TIME_FIELD_DESC = new org.apache.thrift.protocol.TField("updatedTime", org.apache.thrift.protocol.TType.I64, (short)11);
@@ -78,7 +78,7 @@
   public String parentEntityId; // optional
   public String name; // optional
   public String description; // optional
-  public Map<String,String> metadata; // optional
+  public ByteBuffer binaryData; // optional
   public String fullText; // optional
   public long createdTime; // optional
   public long updatedTime; // optional
@@ -92,7 +92,7 @@
     PARENT_ENTITY_ID((short)5, "parentEntityId"),
     NAME((short)6, "name"),
     DESCRIPTION((short)7, "description"),
-    METADATA((short)8, "metadata"),
+    BINARY_DATA((short)8, "binaryData"),
     FULL_TEXT((short)9, "fullText"),
     CREATED_TIME((short)10, "createdTime"),
     UPDATED_TIME((short)11, "updatedTime");
@@ -124,8 +124,8 @@
           return NAME;
         case 7: // DESCRIPTION
           return DESCRIPTION;
-        case 8: // METADATA
-          return METADATA;
+        case 8: // BINARY_DATA
+          return BINARY_DATA;
         case 9: // FULL_TEXT
           return FULL_TEXT;
         case 10: // CREATED_TIME
@@ -175,7 +175,7 @@
   private static final int __CREATEDTIME_ISSET_ID = 0;
   private static final int __UPDATEDTIME_ISSET_ID = 1;
   private byte __isset_bitfield = 0;
-  private static final _Fields optionals[] = {_Fields.ENTITY_ID,_Fields.DOMAIN_ID,_Fields.ENTITY_TYPE_ID,_Fields.OWNER_ID,_Fields.PARENT_ENTITY_ID,_Fields.NAME,_Fields.DESCRIPTION,_Fields.METADATA,_Fields.FULL_TEXT,_Fields.CREATED_TIME,_Fields.UPDATED_TIME};
+  private static final _Fields optionals[] = {_Fields.ENTITY_ID,_Fields.DOMAIN_ID,_Fields.ENTITY_TYPE_ID,_Fields.OWNER_ID,_Fields.PARENT_ENTITY_ID,_Fields.NAME,_Fields.DESCRIPTION,_Fields.BINARY_DATA,_Fields.FULL_TEXT,_Fields.CREATED_TIME,_Fields.UPDATED_TIME};
   public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
   static {
     Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
@@ -193,10 +193,8 @@
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
     tmpMap.put(_Fields.DESCRIPTION, new org.apache.thrift.meta_data.FieldMetaData("description", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
-    tmpMap.put(_Fields.METADATA, new org.apache.thrift.meta_data.FieldMetaData("metadata", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
-        new org.apache.thrift.meta_data.MapMetaData(org.apache.thrift.protocol.TType.MAP, 
-            new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING), 
-            new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING))));
+    tmpMap.put(_Fields.BINARY_DATA, new org.apache.thrift.meta_data.FieldMetaData("binaryData", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING        , true)));
     tmpMap.put(_Fields.FULL_TEXT, new org.apache.thrift.meta_data.FieldMetaData("fullText", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
     tmpMap.put(_Fields.CREATED_TIME, new org.apache.thrift.meta_data.FieldMetaData("createdTime", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
@@ -236,9 +234,8 @@
     if (other.isSetDescription()) {
       this.description = other.description;
     }
-    if (other.isSetMetadata()) {
-      Map<String,String> __this__metadata = new HashMap<String,String>(other.metadata);
-      this.metadata = __this__metadata;
+    if (other.isSetBinaryData()) {
+      this.binaryData = org.apache.thrift.TBaseHelper.copyBinary(other.binaryData);
     }
     if (other.isSetFullText()) {
       this.fullText = other.fullText;
@@ -260,7 +257,7 @@
     this.parentEntityId = null;
     this.name = null;
     this.description = null;
-    this.metadata = null;
+    this.binaryData = null;
     this.fullText = null;
     setCreatedTimeIsSet(false);
     this.createdTime = 0;
@@ -436,38 +433,37 @@
     }
   }
 
-  public int getMetadataSize() {
-    return (this.metadata == null) ? 0 : this.metadata.size();
+  public byte[] getBinaryData() {
+    setBinaryData(org.apache.thrift.TBaseHelper.rightSize(binaryData));
+    return binaryData == null ? null : binaryData.array();
   }
 
-  public void putToMetadata(String key, String val) {
-    if (this.metadata == null) {
-      this.metadata = new HashMap<String,String>();
-    }
-    this.metadata.put(key, val);
+  public ByteBuffer bufferForBinaryData() {
+    return org.apache.thrift.TBaseHelper.copyBinary(binaryData);
   }
 
-  public Map<String,String> getMetadata() {
-    return this.metadata;
-  }
-
-  public Entity setMetadata(Map<String,String> metadata) {
-    this.metadata = metadata;
+  public Entity setBinaryData(byte[] binaryData) {
+    this.binaryData = binaryData == null ? (ByteBuffer)null : ByteBuffer.wrap(Arrays.copyOf(binaryData, binaryData.length));
     return this;
   }
 
-  public void unsetMetadata() {
-    this.metadata = null;
+  public Entity setBinaryData(ByteBuffer binaryData) {
+    this.binaryData = org.apache.thrift.TBaseHelper.copyBinary(binaryData);
+    return this;
   }
 
-  /** Returns true if field metadata is set (has been assigned a value) and false otherwise */
-  public boolean isSetMetadata() {
-    return this.metadata != null;
+  public void unsetBinaryData() {
+    this.binaryData = null;
   }
 
-  public void setMetadataIsSet(boolean value) {
+  /** Returns true if field binaryData is set (has been assigned a value) and false otherwise */
+  public boolean isSetBinaryData() {
+    return this.binaryData != null;
+  }
+
+  public void setBinaryDataIsSet(boolean value) {
     if (!value) {
-      this.metadata = null;
+      this.binaryData = null;
     }
   }
 
@@ -599,11 +595,11 @@
       }
       break;
 
-    case METADATA:
+    case BINARY_DATA:
       if (value == null) {
-        unsetMetadata();
+        unsetBinaryData();
       } else {
-        setMetadata((Map<String,String>)value);
+        setBinaryData((ByteBuffer)value);
       }
       break;
 
@@ -657,8 +653,8 @@
     case DESCRIPTION:
       return getDescription();
 
-    case METADATA:
-      return getMetadata();
+    case BINARY_DATA:
+      return getBinaryData();
 
     case FULL_TEXT:
       return getFullText();
@@ -694,8 +690,8 @@
       return isSetName();
     case DESCRIPTION:
       return isSetDescription();
-    case METADATA:
-      return isSetMetadata();
+    case BINARY_DATA:
+      return isSetBinaryData();
     case FULL_TEXT:
       return isSetFullText();
     case CREATED_TIME:
@@ -782,12 +778,12 @@
         return false;
     }
 
-    boolean this_present_metadata = true && this.isSetMetadata();
-    boolean that_present_metadata = true && that.isSetMetadata();
-    if (this_present_metadata || that_present_metadata) {
-      if (!(this_present_metadata && that_present_metadata))
+    boolean this_present_binaryData = true && this.isSetBinaryData();
+    boolean that_present_binaryData = true && that.isSetBinaryData();
+    if (this_present_binaryData || that_present_binaryData) {
+      if (!(this_present_binaryData && that_present_binaryData))
         return false;
-      if (!this.metadata.equals(that.metadata))
+      if (!this.binaryData.equals(that.binaryData))
         return false;
     }
 
@@ -860,10 +856,10 @@
     if (present_description)
       list.add(description);
 
-    boolean present_metadata = true && (isSetMetadata());
-    list.add(present_metadata);
-    if (present_metadata)
-      list.add(metadata);
+    boolean present_binaryData = true && (isSetBinaryData());
+    list.add(present_binaryData);
+    if (present_binaryData)
+      list.add(binaryData);
 
     boolean present_fullText = true && (isSetFullText());
     list.add(present_fullText);
@@ -961,12 +957,12 @@
         return lastComparison;
       }
     }
-    lastComparison = Boolean.valueOf(isSetMetadata()).compareTo(other.isSetMetadata());
+    lastComparison = Boolean.valueOf(isSetBinaryData()).compareTo(other.isSetBinaryData());
     if (lastComparison != 0) {
       return lastComparison;
     }
-    if (isSetMetadata()) {
-      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.metadata, other.metadata);
+    if (isSetBinaryData()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.binaryData, other.binaryData);
       if (lastComparison != 0) {
         return lastComparison;
       }
@@ -1090,13 +1086,13 @@
       }
       first = false;
     }
-    if (isSetMetadata()) {
+    if (isSetBinaryData()) {
       if (!first) sb.append(", ");
-      sb.append("metadata:");
-      if (this.metadata == null) {
+      sb.append("binaryData:");
+      if (this.binaryData == null) {
         sb.append("null");
       } else {
-        sb.append(this.metadata);
+        org.apache.thrift.TBaseHelper.toString(this.binaryData, sb);
       }
       first = false;
     }
@@ -1223,22 +1219,10 @@
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 8: // METADATA
-            if (schemeField.type == org.apache.thrift.protocol.TType.MAP) {
-              {
-                org.apache.thrift.protocol.TMap _map0 = iprot.readMapBegin();
-                struct.metadata = new HashMap<String,String>(2*_map0.size);
-                String _key1;
-                String _val2;
-                for (int _i3 = 0; _i3 < _map0.size; ++_i3)
-                {
-                  _key1 = iprot.readString();
-                  _val2 = iprot.readString();
-                  struct.metadata.put(_key1, _val2);
-                }
-                iprot.readMapEnd();
-              }
-              struct.setMetadataIsSet(true);
+          case 8: // BINARY_DATA
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.binaryData = iprot.readBinary();
+              struct.setBinaryDataIsSet(true);
             } else { 
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
@@ -1331,18 +1315,10 @@
           oprot.writeFieldEnd();
         }
       }
-      if (struct.metadata != null) {
-        if (struct.isSetMetadata()) {
-          oprot.writeFieldBegin(METADATA_FIELD_DESC);
-          {
-            oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRING, struct.metadata.size()));
-            for (Map.Entry<String, String> _iter4 : struct.metadata.entrySet())
-            {
-              oprot.writeString(_iter4.getKey());
-              oprot.writeString(_iter4.getValue());
-            }
-            oprot.writeMapEnd();
-          }
+      if (struct.binaryData != null) {
+        if (struct.isSetBinaryData()) {
+          oprot.writeFieldBegin(BINARY_DATA_FIELD_DESC);
+          oprot.writeBinary(struct.binaryData);
           oprot.writeFieldEnd();
         }
       }
@@ -1402,7 +1378,7 @@
       if (struct.isSetDescription()) {
         optionals.set(6);
       }
-      if (struct.isSetMetadata()) {
+      if (struct.isSetBinaryData()) {
         optionals.set(7);
       }
       if (struct.isSetFullText()) {
@@ -1436,15 +1412,8 @@
       if (struct.isSetDescription()) {
         oprot.writeString(struct.description);
       }
-      if (struct.isSetMetadata()) {
-        {
-          oprot.writeI32(struct.metadata.size());
-          for (Map.Entry<String, String> _iter5 : struct.metadata.entrySet())
-          {
-            oprot.writeString(_iter5.getKey());
-            oprot.writeString(_iter5.getValue());
-          }
-        }
+      if (struct.isSetBinaryData()) {
+        oprot.writeBinary(struct.binaryData);
       }
       if (struct.isSetFullText()) {
         oprot.writeString(struct.fullText);
@@ -1490,19 +1459,8 @@
         struct.setDescriptionIsSet(true);
       }
       if (incoming.get(7)) {
-        {
-          org.apache.thrift.protocol.TMap _map6 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRING, iprot.readI32());
-          struct.metadata = new HashMap<String,String>(2*_map6.size);
-          String _key7;
-          String _val8;
-          for (int _i9 = 0; _i9 < _map6.size; ++_i9)
-          {
-            _key7 = iprot.readString();
-            _val8 = iprot.readString();
-            struct.metadata.put(_key7, _val8);
-          }
-        }
-        struct.setMetadataIsSet(true);
+        struct.binaryData = iprot.readBinary();
+        struct.setBinaryDataIsSet(true);
       }
       if (incoming.get(8)) {
         struct.fullText = iprot.readString();
diff --git a/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/EntityType.java b/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/EntityType.java
index 50d52de..2195848 100644
--- a/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/EntityType.java
+++ b/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/EntityType.java
@@ -36,7 +36,7 @@
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked"})
 /**
  * <p>client defined entity types</p>
- * <li>entityTypeId : System generated entity type id. In the current implementation it will of the form domainId:name</li>
+ * <li><b>entityTypeId</b> : Entity type id provided by the client</li>
  * <li><b>domainId</b> : Domain id of the domain.</li>
  * <li><b>name</b> : Name for the entity type. Should be a single word.</li>
  * <li>description : Short description for the entity type.</li>
@@ -44,7 +44,7 @@
  * <li>updatedTime : Will be set by the system</li>
  * 
  */
-@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = "2016-10-14")
+@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = "2016-10-16")
 public class EntityType implements org.apache.thrift.TBase<EntityType, EntityType._Fields>, java.io.Serializable, Cloneable, Comparable<EntityType> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("EntityType");
 
@@ -166,8 +166,6 @@
   }
 
   public EntityType() {
-    this.entityTypeId = "DO_NOT_SET_AT_CLIENTS_ID";
-
   }
 
   /**
@@ -197,8 +195,7 @@
 
   @Override
   public void clear() {
-    this.entityTypeId = "DO_NOT_SET_AT_CLIENTS_ID";
-
+    this.entityTypeId = null;
     this.domainId = null;
     this.name = null;
     this.description = null;
diff --git a/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/GroupMembership.java b/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/GroupMembership.java
index 9fe3043..819dd0d 100644
--- a/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/GroupMembership.java
+++ b/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/GroupMembership.java
@@ -38,15 +38,16 @@
  * <p>System internal data type to map group memberships</p>
  * 
  */
-@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = "2016-10-14")
+@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = "2016-10-16")
 public class GroupMembership implements org.apache.thrift.TBase<GroupMembership, GroupMembership._Fields>, java.io.Serializable, Cloneable, Comparable<GroupMembership> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("GroupMembership");
 
   private static final org.apache.thrift.protocol.TField PARENT_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("parentId", org.apache.thrift.protocol.TType.STRING, (short)1);
   private static final org.apache.thrift.protocol.TField CHILD_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("childId", org.apache.thrift.protocol.TType.STRING, (short)2);
-  private static final org.apache.thrift.protocol.TField CHILD_TYPE_FIELD_DESC = new org.apache.thrift.protocol.TField("childType", org.apache.thrift.protocol.TType.I32, (short)3);
-  private static final org.apache.thrift.protocol.TField CREATED_TIME_FIELD_DESC = new org.apache.thrift.protocol.TField("createdTime", org.apache.thrift.protocol.TType.I64, (short)4);
-  private static final org.apache.thrift.protocol.TField UPDATED_TIME_FIELD_DESC = new org.apache.thrift.protocol.TField("updatedTime", org.apache.thrift.protocol.TType.I64, (short)5);
+  private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)3);
+  private static final org.apache.thrift.protocol.TField CHILD_TYPE_FIELD_DESC = new org.apache.thrift.protocol.TField("childType", org.apache.thrift.protocol.TType.I32, (short)4);
+  private static final org.apache.thrift.protocol.TField CREATED_TIME_FIELD_DESC = new org.apache.thrift.protocol.TField("createdTime", org.apache.thrift.protocol.TType.I64, (short)5);
+  private static final org.apache.thrift.protocol.TField UPDATED_TIME_FIELD_DESC = new org.apache.thrift.protocol.TField("updatedTime", org.apache.thrift.protocol.TType.I64, (short)6);
 
   private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
   static {
@@ -56,6 +57,7 @@
 
   public String parentId; // optional
   public String childId; // optional
+  public String domainId; // optional
   /**
    * 
    * @see GroupChildType
@@ -68,13 +70,14 @@
   public enum _Fields implements org.apache.thrift.TFieldIdEnum {
     PARENT_ID((short)1, "parentId"),
     CHILD_ID((short)2, "childId"),
+    DOMAIN_ID((short)3, "domainId"),
     /**
      * 
      * @see GroupChildType
      */
-    CHILD_TYPE((short)3, "childType"),
-    CREATED_TIME((short)4, "createdTime"),
-    UPDATED_TIME((short)5, "updatedTime");
+    CHILD_TYPE((short)4, "childType"),
+    CREATED_TIME((short)5, "createdTime"),
+    UPDATED_TIME((short)6, "updatedTime");
 
     private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -93,11 +96,13 @@
           return PARENT_ID;
         case 2: // CHILD_ID
           return CHILD_ID;
-        case 3: // CHILD_TYPE
+        case 3: // DOMAIN_ID
+          return DOMAIN_ID;
+        case 4: // CHILD_TYPE
           return CHILD_TYPE;
-        case 4: // CREATED_TIME
+        case 5: // CREATED_TIME
           return CREATED_TIME;
-        case 5: // UPDATED_TIME
+        case 6: // UPDATED_TIME
           return UPDATED_TIME;
         default:
           return null;
@@ -142,7 +147,7 @@
   private static final int __CREATEDTIME_ISSET_ID = 0;
   private static final int __UPDATEDTIME_ISSET_ID = 1;
   private byte __isset_bitfield = 0;
-  private static final _Fields optionals[] = {_Fields.PARENT_ID,_Fields.CHILD_ID,_Fields.CHILD_TYPE,_Fields.CREATED_TIME,_Fields.UPDATED_TIME};
+  private static final _Fields optionals[] = {_Fields.PARENT_ID,_Fields.CHILD_ID,_Fields.DOMAIN_ID,_Fields.CHILD_TYPE,_Fields.CREATED_TIME,_Fields.UPDATED_TIME};
   public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
   static {
     Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
@@ -150,6 +155,8 @@
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
     tmpMap.put(_Fields.CHILD_ID, new org.apache.thrift.meta_data.FieldMetaData("childId", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
     tmpMap.put(_Fields.CHILD_TYPE, new org.apache.thrift.meta_data.FieldMetaData("childType", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
         new org.apache.thrift.meta_data.EnumMetaData(org.apache.thrift.protocol.TType.ENUM, GroupChildType.class)));
     tmpMap.put(_Fields.CREATED_TIME, new org.apache.thrift.meta_data.FieldMetaData("createdTime", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
@@ -174,6 +181,9 @@
     if (other.isSetChildId()) {
       this.childId = other.childId;
     }
+    if (other.isSetDomainId()) {
+      this.domainId = other.domainId;
+    }
     if (other.isSetChildType()) {
       this.childType = other.childType;
     }
@@ -189,6 +199,7 @@
   public void clear() {
     this.parentId = null;
     this.childId = null;
+    this.domainId = null;
     this.childType = null;
     setCreatedTimeIsSet(false);
     this.createdTime = 0;
@@ -244,6 +255,30 @@
     }
   }
 
+  public String getDomainId() {
+    return this.domainId;
+  }
+
+  public GroupMembership setDomainId(String domainId) {
+    this.domainId = domainId;
+    return this;
+  }
+
+  public void unsetDomainId() {
+    this.domainId = null;
+  }
+
+  /** Returns true if field domainId is set (has been assigned a value) and false otherwise */
+  public boolean isSetDomainId() {
+    return this.domainId != null;
+  }
+
+  public void setDomainIdIsSet(boolean value) {
+    if (!value) {
+      this.domainId = null;
+    }
+  }
+
   /**
    * 
    * @see GroupChildType
@@ -340,6 +375,14 @@
       }
       break;
 
+    case DOMAIN_ID:
+      if (value == null) {
+        unsetDomainId();
+      } else {
+        setDomainId((String)value);
+      }
+      break;
+
     case CHILD_TYPE:
       if (value == null) {
         unsetChildType();
@@ -375,6 +418,9 @@
     case CHILD_ID:
       return getChildId();
 
+    case DOMAIN_ID:
+      return getDomainId();
+
     case CHILD_TYPE:
       return getChildType();
 
@@ -399,6 +445,8 @@
       return isSetParentId();
     case CHILD_ID:
       return isSetChildId();
+    case DOMAIN_ID:
+      return isSetDomainId();
     case CHILD_TYPE:
       return isSetChildType();
     case CREATED_TIME:
@@ -440,6 +488,15 @@
         return false;
     }
 
+    boolean this_present_domainId = true && this.isSetDomainId();
+    boolean that_present_domainId = true && that.isSetDomainId();
+    if (this_present_domainId || that_present_domainId) {
+      if (!(this_present_domainId && that_present_domainId))
+        return false;
+      if (!this.domainId.equals(that.domainId))
+        return false;
+    }
+
     boolean this_present_childType = true && this.isSetChildType();
     boolean that_present_childType = true && that.isSetChildType();
     if (this_present_childType || that_present_childType) {
@@ -484,6 +541,11 @@
     if (present_childId)
       list.add(childId);
 
+    boolean present_domainId = true && (isSetDomainId());
+    list.add(present_domainId);
+    if (present_domainId)
+      list.add(domainId);
+
     boolean present_childType = true && (isSetChildType());
     list.add(present_childType);
     if (present_childType)
@@ -530,6 +592,16 @@
         return lastComparison;
       }
     }
+    lastComparison = Boolean.valueOf(isSetDomainId()).compareTo(other.isSetDomainId());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetDomainId()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.domainId, other.domainId);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
     lastComparison = Boolean.valueOf(isSetChildType()).compareTo(other.isSetChildType());
     if (lastComparison != 0) {
       return lastComparison;
@@ -599,6 +671,16 @@
       }
       first = false;
     }
+    if (isSetDomainId()) {
+      if (!first) sb.append(", ");
+      sb.append("domainId:");
+      if (this.domainId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.domainId);
+      }
+      first = false;
+    }
     if (isSetChildType()) {
       if (!first) sb.append(", ");
       sb.append("childType:");
@@ -682,7 +764,15 @@
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 3: // CHILD_TYPE
+          case 3: // DOMAIN_ID
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.domainId = iprot.readString();
+              struct.setDomainIdIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 4: // CHILD_TYPE
             if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
               struct.childType = org.apache.airavata.sharing.registry.models.GroupChildType.findByValue(iprot.readI32());
               struct.setChildTypeIsSet(true);
@@ -690,7 +780,7 @@
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 4: // CREATED_TIME
+          case 5: // CREATED_TIME
             if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
               struct.createdTime = iprot.readI64();
               struct.setCreatedTimeIsSet(true);
@@ -698,7 +788,7 @@
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 5: // UPDATED_TIME
+          case 6: // UPDATED_TIME
             if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
               struct.updatedTime = iprot.readI64();
               struct.setUpdatedTimeIsSet(true);
@@ -735,6 +825,13 @@
           oprot.writeFieldEnd();
         }
       }
+      if (struct.domainId != null) {
+        if (struct.isSetDomainId()) {
+          oprot.writeFieldBegin(DOMAIN_ID_FIELD_DESC);
+          oprot.writeString(struct.domainId);
+          oprot.writeFieldEnd();
+        }
+      }
       if (struct.childType != null) {
         if (struct.isSetChildType()) {
           oprot.writeFieldBegin(CHILD_TYPE_FIELD_DESC);
@@ -776,22 +873,28 @@
       if (struct.isSetChildId()) {
         optionals.set(1);
       }
-      if (struct.isSetChildType()) {
+      if (struct.isSetDomainId()) {
         optionals.set(2);
       }
-      if (struct.isSetCreatedTime()) {
+      if (struct.isSetChildType()) {
         optionals.set(3);
       }
-      if (struct.isSetUpdatedTime()) {
+      if (struct.isSetCreatedTime()) {
         optionals.set(4);
       }
-      oprot.writeBitSet(optionals, 5);
+      if (struct.isSetUpdatedTime()) {
+        optionals.set(5);
+      }
+      oprot.writeBitSet(optionals, 6);
       if (struct.isSetParentId()) {
         oprot.writeString(struct.parentId);
       }
       if (struct.isSetChildId()) {
         oprot.writeString(struct.childId);
       }
+      if (struct.isSetDomainId()) {
+        oprot.writeString(struct.domainId);
+      }
       if (struct.isSetChildType()) {
         oprot.writeI32(struct.childType.getValue());
       }
@@ -806,7 +909,7 @@
     @Override
     public void read(org.apache.thrift.protocol.TProtocol prot, GroupMembership struct) throws org.apache.thrift.TException {
       TTupleProtocol iprot = (TTupleProtocol) prot;
-      BitSet incoming = iprot.readBitSet(5);
+      BitSet incoming = iprot.readBitSet(6);
       if (incoming.get(0)) {
         struct.parentId = iprot.readString();
         struct.setParentIdIsSet(true);
@@ -816,14 +919,18 @@
         struct.setChildIdIsSet(true);
       }
       if (incoming.get(2)) {
+        struct.domainId = iprot.readString();
+        struct.setDomainIdIsSet(true);
+      }
+      if (incoming.get(3)) {
         struct.childType = org.apache.airavata.sharing.registry.models.GroupChildType.findByValue(iprot.readI32());
         struct.setChildTypeIsSet(true);
       }
-      if (incoming.get(3)) {
+      if (incoming.get(4)) {
         struct.createdTime = iprot.readI64();
         struct.setCreatedTimeIsSet(true);
       }
-      if (incoming.get(4)) {
+      if (incoming.get(5)) {
         struct.updatedTime = iprot.readI64();
         struct.setUpdatedTimeIsSet(true);
       }
diff --git a/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/PermissionType.java b/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/PermissionType.java
index 2952f7a..9736a85 100644
--- a/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/PermissionType.java
+++ b/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/PermissionType.java
@@ -36,7 +36,7 @@
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked"})
 /**
  * <p>Object for creating client defined permission type</p>
- * <li>permissionTypeId : System generated permission type id. In the current implementation it will of the form domainId:name</li>
+ * <li><b>permissionTypeId</b> : Permission type id provided by the client</li>
  * <li><b>domainId</b> : Domain id</li>
  * <li><b>name</b> : Single word name for the permission</li>
  * <li>description : Short description for the permission type</li>
@@ -44,7 +44,7 @@
  * <li>updatedTime : Will be set by the system</li>
  * 
  */
-@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = "2016-10-14")
+@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = "2016-10-16")
 public class PermissionType implements org.apache.thrift.TBase<PermissionType, PermissionType._Fields>, java.io.Serializable, Cloneable, Comparable<PermissionType> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("PermissionType");
 
@@ -166,8 +166,6 @@
   }
 
   public PermissionType() {
-    this.permissionTypeId = "DO_NOT_SET_AT_CLIENTS_ID";
-
   }
 
   /**
@@ -197,8 +195,7 @@
 
   @Override
   public void clear() {
-    this.permissionTypeId = "DO_NOT_SET_AT_CLIENTS_ID";
-
+    this.permissionTypeId = null;
     this.domainId = null;
     this.name = null;
     this.description = null;
diff --git a/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/SearchCriteria.java b/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/SearchCriteria.java
index 71fd003..faffae0 100644
--- a/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/SearchCriteria.java
+++ b/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/SearchCriteria.java
@@ -41,7 +41,7 @@
  * <li><b>searchCondition</b> : EQUAL, LIKE etc..</li>
  * 
  */
-@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = "2016-10-14")
+@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = "2016-10-16")
 public class SearchCriteria implements org.apache.thrift.TBase<SearchCriteria, SearchCriteria._Fields>, java.io.Serializable, Cloneable, Comparable<SearchCriteria> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("SearchCriteria");
 
diff --git a/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/Sharing.java b/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/Sharing.java
index ed1cd61..753fe74 100644
--- a/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/Sharing.java
+++ b/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/Sharing.java
@@ -38,7 +38,7 @@
  * <p>This is an internal enum type for managing sharings</p>
  * 
  */
-@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = "2016-10-14")
+@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = "2016-10-16")
 public class Sharing implements org.apache.thrift.TBase<Sharing, Sharing._Fields>, java.io.Serializable, Cloneable, Comparable<Sharing> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("Sharing");
 
@@ -46,9 +46,10 @@
   private static final org.apache.thrift.protocol.TField ENTITY_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("entityId", org.apache.thrift.protocol.TType.STRING, (short)2);
   private static final org.apache.thrift.protocol.TField GROUP_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("groupId", org.apache.thrift.protocol.TType.STRING, (short)3);
   private static final org.apache.thrift.protocol.TField SHARING_TYPE_FIELD_DESC = new org.apache.thrift.protocol.TField("sharingType", org.apache.thrift.protocol.TType.I32, (short)4);
-  private static final org.apache.thrift.protocol.TField INHERITED_PARENT_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("inheritedParentId", org.apache.thrift.protocol.TType.STRING, (short)5);
-  private static final org.apache.thrift.protocol.TField CREATED_TIME_FIELD_DESC = new org.apache.thrift.protocol.TField("createdTime", org.apache.thrift.protocol.TType.I64, (short)6);
-  private static final org.apache.thrift.protocol.TField UPDATED_TIME_FIELD_DESC = new org.apache.thrift.protocol.TField("updatedTime", org.apache.thrift.protocol.TType.I64, (short)7);
+  private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)5);
+  private static final org.apache.thrift.protocol.TField INHERITED_PARENT_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("inheritedParentId", org.apache.thrift.protocol.TType.STRING, (short)6);
+  private static final org.apache.thrift.protocol.TField CREATED_TIME_FIELD_DESC = new org.apache.thrift.protocol.TField("createdTime", org.apache.thrift.protocol.TType.I64, (short)7);
+  private static final org.apache.thrift.protocol.TField UPDATED_TIME_FIELD_DESC = new org.apache.thrift.protocol.TField("updatedTime", org.apache.thrift.protocol.TType.I64, (short)8);
 
   private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
   static {
@@ -64,6 +65,7 @@
    * @see SharingType
    */
   public SharingType sharingType; // optional
+  public String domainId; // optional
   public String inheritedParentId; // optional
   public long createdTime; // optional
   public long updatedTime; // optional
@@ -78,9 +80,10 @@
      * @see SharingType
      */
     SHARING_TYPE((short)4, "sharingType"),
-    INHERITED_PARENT_ID((short)5, "inheritedParentId"),
-    CREATED_TIME((short)6, "createdTime"),
-    UPDATED_TIME((short)7, "updatedTime");
+    DOMAIN_ID((short)5, "domainId"),
+    INHERITED_PARENT_ID((short)6, "inheritedParentId"),
+    CREATED_TIME((short)7, "createdTime"),
+    UPDATED_TIME((short)8, "updatedTime");
 
     private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -103,11 +106,13 @@
           return GROUP_ID;
         case 4: // SHARING_TYPE
           return SHARING_TYPE;
-        case 5: // INHERITED_PARENT_ID
+        case 5: // DOMAIN_ID
+          return DOMAIN_ID;
+        case 6: // INHERITED_PARENT_ID
           return INHERITED_PARENT_ID;
-        case 6: // CREATED_TIME
+        case 7: // CREATED_TIME
           return CREATED_TIME;
-        case 7: // UPDATED_TIME
+        case 8: // UPDATED_TIME
           return UPDATED_TIME;
         default:
           return null;
@@ -152,7 +157,7 @@
   private static final int __CREATEDTIME_ISSET_ID = 0;
   private static final int __UPDATEDTIME_ISSET_ID = 1;
   private byte __isset_bitfield = 0;
-  private static final _Fields optionals[] = {_Fields.PERMISSION_TYPE_ID,_Fields.ENTITY_ID,_Fields.GROUP_ID,_Fields.SHARING_TYPE,_Fields.INHERITED_PARENT_ID,_Fields.CREATED_TIME,_Fields.UPDATED_TIME};
+  private static final _Fields optionals[] = {_Fields.PERMISSION_TYPE_ID,_Fields.ENTITY_ID,_Fields.GROUP_ID,_Fields.SHARING_TYPE,_Fields.DOMAIN_ID,_Fields.INHERITED_PARENT_ID,_Fields.CREATED_TIME,_Fields.UPDATED_TIME};
   public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
   static {
     Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
@@ -164,6 +169,8 @@
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
     tmpMap.put(_Fields.SHARING_TYPE, new org.apache.thrift.meta_data.FieldMetaData("sharingType", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
         new org.apache.thrift.meta_data.EnumMetaData(org.apache.thrift.protocol.TType.ENUM, SharingType.class)));
+    tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
     tmpMap.put(_Fields.INHERITED_PARENT_ID, new org.apache.thrift.meta_data.FieldMetaData("inheritedParentId", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
     tmpMap.put(_Fields.CREATED_TIME, new org.apache.thrift.meta_data.FieldMetaData("createdTime", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
@@ -194,6 +201,9 @@
     if (other.isSetSharingType()) {
       this.sharingType = other.sharingType;
     }
+    if (other.isSetDomainId()) {
+      this.domainId = other.domainId;
+    }
     if (other.isSetInheritedParentId()) {
       this.inheritedParentId = other.inheritedParentId;
     }
@@ -211,6 +221,7 @@
     this.entityId = null;
     this.groupId = null;
     this.sharingType = null;
+    this.domainId = null;
     this.inheritedParentId = null;
     setCreatedTimeIsSet(false);
     this.createdTime = 0;
@@ -322,6 +333,30 @@
     }
   }
 
+  public String getDomainId() {
+    return this.domainId;
+  }
+
+  public Sharing setDomainId(String domainId) {
+    this.domainId = domainId;
+    return this;
+  }
+
+  public void unsetDomainId() {
+    this.domainId = null;
+  }
+
+  /** Returns true if field domainId is set (has been assigned a value) and false otherwise */
+  public boolean isSetDomainId() {
+    return this.domainId != null;
+  }
+
+  public void setDomainIdIsSet(boolean value) {
+    if (!value) {
+      this.domainId = null;
+    }
+  }
+
   public String getInheritedParentId() {
     return this.inheritedParentId;
   }
@@ -426,6 +461,14 @@
       }
       break;
 
+    case DOMAIN_ID:
+      if (value == null) {
+        unsetDomainId();
+      } else {
+        setDomainId((String)value);
+      }
+      break;
+
     case INHERITED_PARENT_ID:
       if (value == null) {
         unsetInheritedParentId();
@@ -467,6 +510,9 @@
     case SHARING_TYPE:
       return getSharingType();
 
+    case DOMAIN_ID:
+      return getDomainId();
+
     case INHERITED_PARENT_ID:
       return getInheritedParentId();
 
@@ -495,6 +541,8 @@
       return isSetGroupId();
     case SHARING_TYPE:
       return isSetSharingType();
+    case DOMAIN_ID:
+      return isSetDomainId();
     case INHERITED_PARENT_ID:
       return isSetInheritedParentId();
     case CREATED_TIME:
@@ -554,6 +602,15 @@
         return false;
     }
 
+    boolean this_present_domainId = true && this.isSetDomainId();
+    boolean that_present_domainId = true && that.isSetDomainId();
+    if (this_present_domainId || that_present_domainId) {
+      if (!(this_present_domainId && that_present_domainId))
+        return false;
+      if (!this.domainId.equals(that.domainId))
+        return false;
+    }
+
     boolean this_present_inheritedParentId = true && this.isSetInheritedParentId();
     boolean that_present_inheritedParentId = true && that.isSetInheritedParentId();
     if (this_present_inheritedParentId || that_present_inheritedParentId) {
@@ -608,6 +665,11 @@
     if (present_sharingType)
       list.add(sharingType.getValue());
 
+    boolean present_domainId = true && (isSetDomainId());
+    list.add(present_domainId);
+    if (present_domainId)
+      list.add(domainId);
+
     boolean present_inheritedParentId = true && (isSetInheritedParentId());
     list.add(present_inheritedParentId);
     if (present_inheritedParentId)
@@ -674,6 +736,16 @@
         return lastComparison;
       }
     }
+    lastComparison = Boolean.valueOf(isSetDomainId()).compareTo(other.isSetDomainId());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetDomainId()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.domainId, other.domainId);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
     lastComparison = Boolean.valueOf(isSetInheritedParentId()).compareTo(other.isSetInheritedParentId());
     if (lastComparison != 0) {
       return lastComparison;
@@ -763,6 +835,16 @@
       }
       first = false;
     }
+    if (isSetDomainId()) {
+      if (!first) sb.append(", ");
+      sb.append("domainId:");
+      if (this.domainId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.domainId);
+      }
+      first = false;
+    }
     if (isSetInheritedParentId()) {
       if (!first) sb.append(", ");
       sb.append("inheritedParentId:");
@@ -862,7 +944,15 @@
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 5: // INHERITED_PARENT_ID
+          case 5: // DOMAIN_ID
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.domainId = iprot.readString();
+              struct.setDomainIdIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 6: // INHERITED_PARENT_ID
             if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
               struct.inheritedParentId = iprot.readString();
               struct.setInheritedParentIdIsSet(true);
@@ -870,7 +960,7 @@
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 6: // CREATED_TIME
+          case 7: // CREATED_TIME
             if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
               struct.createdTime = iprot.readI64();
               struct.setCreatedTimeIsSet(true);
@@ -878,7 +968,7 @@
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 7: // UPDATED_TIME
+          case 8: // UPDATED_TIME
             if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
               struct.updatedTime = iprot.readI64();
               struct.setUpdatedTimeIsSet(true);
@@ -929,6 +1019,13 @@
           oprot.writeFieldEnd();
         }
       }
+      if (struct.domainId != null) {
+        if (struct.isSetDomainId()) {
+          oprot.writeFieldBegin(DOMAIN_ID_FIELD_DESC);
+          oprot.writeString(struct.domainId);
+          oprot.writeFieldEnd();
+        }
+      }
       if (struct.inheritedParentId != null) {
         if (struct.isSetInheritedParentId()) {
           oprot.writeFieldBegin(INHERITED_PARENT_ID_FIELD_DESC);
@@ -976,16 +1073,19 @@
       if (struct.isSetSharingType()) {
         optionals.set(3);
       }
-      if (struct.isSetInheritedParentId()) {
+      if (struct.isSetDomainId()) {
         optionals.set(4);
       }
-      if (struct.isSetCreatedTime()) {
+      if (struct.isSetInheritedParentId()) {
         optionals.set(5);
       }
-      if (struct.isSetUpdatedTime()) {
+      if (struct.isSetCreatedTime()) {
         optionals.set(6);
       }
-      oprot.writeBitSet(optionals, 7);
+      if (struct.isSetUpdatedTime()) {
+        optionals.set(7);
+      }
+      oprot.writeBitSet(optionals, 8);
       if (struct.isSetPermissionTypeId()) {
         oprot.writeString(struct.permissionTypeId);
       }
@@ -998,6 +1098,9 @@
       if (struct.isSetSharingType()) {
         oprot.writeI32(struct.sharingType.getValue());
       }
+      if (struct.isSetDomainId()) {
+        oprot.writeString(struct.domainId);
+      }
       if (struct.isSetInheritedParentId()) {
         oprot.writeString(struct.inheritedParentId);
       }
@@ -1012,7 +1115,7 @@
     @Override
     public void read(org.apache.thrift.protocol.TProtocol prot, Sharing struct) throws org.apache.thrift.TException {
       TTupleProtocol iprot = (TTupleProtocol) prot;
-      BitSet incoming = iprot.readBitSet(7);
+      BitSet incoming = iprot.readBitSet(8);
       if (incoming.get(0)) {
         struct.permissionTypeId = iprot.readString();
         struct.setPermissionTypeIdIsSet(true);
@@ -1030,14 +1133,18 @@
         struct.setSharingTypeIsSet(true);
       }
       if (incoming.get(4)) {
+        struct.domainId = iprot.readString();
+        struct.setDomainIdIsSet(true);
+      }
+      if (incoming.get(5)) {
         struct.inheritedParentId = iprot.readString();
         struct.setInheritedParentIdIsSet(true);
       }
-      if (incoming.get(5)) {
+      if (incoming.get(6)) {
         struct.createdTime = iprot.readI64();
         struct.setCreatedTimeIsSet(true);
       }
-      if (incoming.get(6)) {
+      if (incoming.get(7)) {
         struct.updatedTime = iprot.readI64();
         struct.setUpdatedTimeIsSet(true);
       }
diff --git a/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/SharingRegistryException.java b/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/SharingRegistryException.java
index 06fa123..61e08aa 100644
--- a/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/SharingRegistryException.java
+++ b/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/SharingRegistryException.java
@@ -38,7 +38,7 @@
  * <p>Exception model used in the sharing registry service</p>
  * 
  */
-@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = "2016-10-14")
+@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = "2016-10-16")
 public class SharingRegistryException extends TException implements org.apache.thrift.TBase<SharingRegistryException, SharingRegistryException._Fields>, java.io.Serializable, Cloneable, Comparable<SharingRegistryException> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("SharingRegistryException");
 
diff --git a/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/User.java b/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/User.java
index 65b5e60..34508f7 100644
--- a/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/User.java
+++ b/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/User.java
@@ -37,7 +37,7 @@
 /**
  * <p>User is the model used to register a user in the system. Minimal user information will be required to provide
  * regarding the user.</p>
- * <li><b>userId</b> : Client provided user id. (The id is not system generated and it is a must to provide this id)</li>
+ * <li><b>userId</b> : User id provided by the client</li>
  * <li><b>domainId</b> : Domain id for that user</li>
  * <li><b>userName</b> : User name for the user</li>
  * <li><b>firstName</b> : First name of the user</li>
@@ -48,7 +48,7 @@
  * <li>updatedTime : If client provides this value then the system will use it if not the current time will be set</li>
  * 
  */
-@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = "2016-10-14")
+@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = "2016-10-16")
 public class User implements org.apache.thrift.TBase<User, User._Fields>, java.io.Serializable, Cloneable, Comparable<User> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("User");
 
diff --git a/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/UserGroup.java b/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/UserGroup.java
index 8edbcc1..484ea3b 100644
--- a/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/UserGroup.java
+++ b/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/models/UserGroup.java
@@ -36,7 +36,7 @@
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked"})
 /**
  * <p>User group is a collection of users.</p>
- *  <li>groupId : System generated grouo id. In the current implementation this is of the form domainId:name</li>
+ *  <li><b>groupId</b> : Group id provided by the client</li>
  *  <li><b>domainId</b> : Domain id for this user group</li>
  *  <li><b>name</b> : Name for the user group. should be one word</li>
  *  <li>description : Short description for the group.</li>
@@ -47,7 +47,7 @@
  *  <li>updatedTime : Will be set by the system</li>
  *  
  */
-@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = "2016-10-14")
+@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = "2016-10-16")
 public class UserGroup implements org.apache.thrift.TBase<UserGroup, UserGroup._Fields>, java.io.Serializable, Cloneable, Comparable<UserGroup> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("UserGroup");
 
@@ -206,8 +206,6 @@
   }
 
   public UserGroup() {
-    this.groupId = "DO_NOT_SET_AT_CLIENTS_ID";
-
   }
 
   /**
@@ -246,8 +244,7 @@
 
   @Override
   public void clear() {
-    this.groupId = "DO_NOT_SET_AT_CLIENTS_ID";
-
+    this.groupId = null;
     this.domainId = null;
     this.name = null;
     this.description = null;
diff --git a/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/service/cpi/SharingRegistryService.java b/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/service/cpi/SharingRegistryService.java
index 25ab01a..106ff41 100644
--- a/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/service/cpi/SharingRegistryService.java
+++ b/modules/sharing-registry/sharing-registry-stubs/src/main/java/org/apache/airavata/sharing/registry/service/cpi/SharingRegistryService.java
@@ -34,7 +34,7 @@
 import org.slf4j.LoggerFactory;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked"})
-@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = "2016-10-14")
+@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = "2016-10-16")
 public class SharingRegistryService {
 
   public interface Iface {
@@ -92,16 +92,18 @@
     /**
      * <p>API method to delete user</p>
      * 
+     * @param domainId
      * @param userId
      */
-    public boolean deleteUser(String userId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
+    public boolean deleteUser(String domainId, String userId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
 
     /**
      * <p>API method to get a user</p>
      * 
+     * @param domainId
      * @param userId
      */
-    public org.apache.airavata.sharing.registry.models.User getUser(String userId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
+    public org.apache.airavata.sharing.registry.models.User getUser(String domainId, String userId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
 
     /**
      * <p>API method to get a list of users in a specific domain Users will be reverse sorted based on the created time.</p>
@@ -132,16 +134,18 @@
     /**
      * <p>API method to delete a group</p>
      * 
+     * @param domainId
      * @param groupId
      */
-    public boolean deleteGroup(String groupId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
+    public boolean deleteGroup(String domainId, String groupId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
 
     /**
      * <p>API method to get a group</p>
      * 
+     * @param domainId
      * @param groupId
      */
-    public org.apache.airavata.sharing.registry.models.UserGroup getGroup(String groupId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
+    public org.apache.airavata.sharing.registry.models.UserGroup getGroup(String domainId, String groupId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
 
     /**
      * <p>API method to get groups in a domainId. Results are reverse sorted based on created time.</p>
@@ -155,52 +159,58 @@
     /**
      * <p>API method to add list of users to a group</p>
      * 
+     * @param domainId
      * @param userIds
      * @param groupId
      */
-    public boolean addUsersToGroup(List<String> userIds, String groupId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
+    public boolean addUsersToGroup(String domainId, List<String> userIds, String groupId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
 
     /**
      * <p>API method to remove users from a group</p>
      * 
+     * @param domainId
      * @param userIds
      * @param groupId
      */
-    public boolean removeUsersFromGroup(List<String> userIds, String groupId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
+    public boolean removeUsersFromGroup(String domainId, List<String> userIds, String groupId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
 
     /**
      * <p>API method to get list of child users in a group. Only the direct members will be returned. Results are reverse time sorted based on creation time</p>
      * 
+     * @param domainId
      * @param groupId
      * @param offset
      * @param limit
      */
-    public List<org.apache.airavata.sharing.registry.models.User> getGroupMembersOfTypeUser(String groupId, int offset, int limit) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
+    public List<org.apache.airavata.sharing.registry.models.User> getGroupMembersOfTypeUser(String domainId, String groupId, int offset, int limit) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
 
     /**
      * <p>API method to get list of child groups in a group. Only the direct members will be returned. Results are reverse time sorted based on creation time</p>
      * 
+     * @param domainId
      * @param groupId
      * @param offset
      * @param limit
      */
-    public List<org.apache.airavata.sharing.registry.models.UserGroup> getGroupMembersOfTypeGroup(String groupId, int offset, int limit) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
+    public List<org.apache.airavata.sharing.registry.models.UserGroup> getGroupMembersOfTypeGroup(String domainId, String groupId, int offset, int limit) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
 
     /**
      * <p>API method to add a child group to a parent group.</p>
      * 
+     * @param domainId
      * @param childIds
      * @param groupId
      */
-    public boolean addChildGroupsToParentGroup(List<String> childIds, String groupId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
+    public boolean addChildGroupsToParentGroup(String domainId, List<String> childIds, String groupId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
 
     /**
      * <p>API method to remove a child group from parent group.</p>
      * 
+     * @param domainId
      * @param childId
      * @param groupId
      */
-    public boolean removeChildGroupFromParentGroup(String childId, String groupId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
+    public boolean removeChildGroupFromParentGroup(String domainId, String childId, String groupId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
 
     /**
      * <p>API method to create a new entity type</p>
@@ -219,16 +229,18 @@
     /**
      * <p>API method to delete entity type</p>
      * 
+     * @param domainId
      * @param entityTypeId
      */
-    public boolean deleteEntityType(String entityTypeId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
+    public boolean deleteEntityType(String domainId, String entityTypeId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
 
     /**
      * <p>API method to get an entity type</p>
      * 
+     * @param domainId
      * @param entityTypeId
      */
-    public org.apache.airavata.sharing.registry.models.EntityType getEntityType(String entityTypeId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
+    public org.apache.airavata.sharing.registry.models.EntityType getEntityType(String domainId, String entityTypeId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
 
     /**
      * <p>API method to get entity types in a domainId. Results are reverse time sorted based on creation time</p>
@@ -256,43 +268,48 @@
     /**
      * <p>API method to delete entity</p>
      * 
+     * @param domainId
      * @param entityId
      */
-    public boolean deleteEntity(String entityId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
+    public boolean deleteEntity(String domainId, String entityId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
 
     /**
      * <p>API method to get entity</p>
      * 
+     * @param domainId
      * @param entityId
      */
-    public org.apache.airavata.sharing.registry.models.Entity getEntity(String entityId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
+    public org.apache.airavata.sharing.registry.models.Entity getEntity(String domainId, String entityId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
 
     /**
      * <p>API method to search entities</p>
      * 
+     * @param domainId
      * @param userId
      * @param entityTypeId
      * @param filters
      * @param offset
      * @param limit
      */
-    public List<org.apache.airavata.sharing.registry.models.Entity> searchEntities(String userId, String entityTypeId, List<org.apache.airavata.sharing.registry.models.SearchCriteria> filters, int offset, int limit) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
+    public List<org.apache.airavata.sharing.registry.models.Entity> searchEntities(String domainId, String userId, String entityTypeId, List<org.apache.airavata.sharing.registry.models.SearchCriteria> filters, int offset, int limit) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
 
     /**
      * <p>API method to get a list of shared users given the entity id</p>
      * 
+     * @param domainId
      * @param entityId
      * @param permissionTypeId
      */
-    public List<org.apache.airavata.sharing.registry.models.User> getListOfSharedUsers(String entityId, String permissionTypeId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
+    public List<org.apache.airavata.sharing.registry.models.User> getListOfSharedUsers(String domainId, String entityId, String permissionTypeId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
 
     /**
      * <p>API method to get a list of shared groups given the entity id</p>
      * 
+     * @param domainId
      * @param entityId
      * @param permissionTypeId
      */
-    public List<org.apache.airavata.sharing.registry.models.UserGroup> getListOfSharedGroups(String entityId, String permissionTypeId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
+    public List<org.apache.airavata.sharing.registry.models.UserGroup> getListOfSharedGroups(String domainId, String entityId, String permissionTypeId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
 
     /**
      * <p>API method to create permission type</p>
@@ -311,16 +328,18 @@
     /**
      * <p>API method to delete permission type</p>
      * 
-     * @param entityTypeId
+     * @param domainId
+     * @param permissionTypeId
      */
-    public boolean deletePermissionType(String entityTypeId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
+    public boolean deletePermissionType(String domainId, String permissionTypeId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
 
     /**
      * <p>API method to get permission type</p>
      * 
+     * @param domainId
      * @param permissionTypeId
      */
-    public org.apache.airavata.sharing.registry.models.PermissionType getPermissionType(String permissionTypeId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
+    public org.apache.airavata.sharing.registry.models.PermissionType getPermissionType(String domainId, String permissionTypeId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException;
 
     /**
      * <p>API method to get list of permission types in a given domainId. Results are reverse time sorted based on creation time</p>
@@ -401,9 +420,9 @@
 
     public void updatedUser(org.apache.airavata.sharing.registry.models.User user, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
-    public void deleteUser(String userId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
+    public void deleteUser(String domainId, String userId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
-    public void getUser(String userId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
+    public void getUser(String domainId, String userId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
     public void getUsers(String domainId, int offset, int limit, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
@@ -411,31 +430,31 @@
 
     public void updateGroup(org.apache.airavata.sharing.registry.models.UserGroup group, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
-    public void deleteGroup(String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
+    public void deleteGroup(String domainId, String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
-    public void getGroup(String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
+    public void getGroup(String domainId, String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
     public void getGroups(String domainId, int offset, int limit, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
-    public void addUsersToGroup(List<String> userIds, String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
+    public void addUsersToGroup(String domainId, List<String> userIds, String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
-    public void removeUsersFromGroup(List<String> userIds, String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
+    public void removeUsersFromGroup(String domainId, List<String> userIds, String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
-    public void getGroupMembersOfTypeUser(String groupId, int offset, int limit, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
+    public void getGroupMembersOfTypeUser(String domainId, String groupId, int offset, int limit, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
-    public void getGroupMembersOfTypeGroup(String groupId, int offset, int limit, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
+    public void getGroupMembersOfTypeGroup(String domainId, String groupId, int offset, int limit, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
-    public void addChildGroupsToParentGroup(List<String> childIds, String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
+    public void addChildGroupsToParentGroup(String domainId, List<String> childIds, String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
-    public void removeChildGroupFromParentGroup(String childId, String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
+    public void removeChildGroupFromParentGroup(String domainId, String childId, String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
     public void createEntityType(org.apache.airavata.sharing.registry.models.EntityType entityType, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
     public void updateEntityType(org.apache.airavata.sharing.registry.models.EntityType entityType, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
-    public void deleteEntityType(String entityTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
+    public void deleteEntityType(String domainId, String entityTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
-    public void getEntityType(String entityTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
+    public void getEntityType(String domainId, String entityTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
     public void getEntityTypes(String domainId, int offset, int limit, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
@@ -443,23 +462,23 @@
 
     public void updateEntity(org.apache.airavata.sharing.registry.models.Entity entity, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
-    public void deleteEntity(String entityId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
+    public void deleteEntity(String domainId, String entityId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
-    public void getEntity(String entityId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
+    public void getEntity(String domainId, String entityId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
-    public void searchEntities(String userId, String entityTypeId, List<org.apache.airavata.sharing.registry.models.SearchCriteria> filters, int offset, int limit, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
+    public void searchEntities(String domainId, String userId, String entityTypeId, List<org.apache.airavata.sharing.registry.models.SearchCriteria> filters, int offset, int limit, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
-    public void getListOfSharedUsers(String entityId, String permissionTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
+    public void getListOfSharedUsers(String domainId, String entityId, String permissionTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
-    public void getListOfSharedGroups(String entityId, String permissionTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
+    public void getListOfSharedGroups(String domainId, String entityId, String permissionTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
     public void createPermissionType(org.apache.airavata.sharing.registry.models.PermissionType permissionType, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
     public void updatePermissionType(org.apache.airavata.sharing.registry.models.PermissionType permissionType, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
-    public void deletePermissionType(String entityTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
+    public void deletePermissionType(String domainId, String permissionTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
-    public void getPermissionType(String permissionTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
+    public void getPermissionType(String domainId, String permissionTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
     public void getPermissionTypes(String domainId, int offset, int limit, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
@@ -678,15 +697,16 @@
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "updatedUser failed: unknown result");
     }
 
-    public boolean deleteUser(String userId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
+    public boolean deleteUser(String domainId, String userId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
     {
-      send_deleteUser(userId);
+      send_deleteUser(domainId, userId);
       return recv_deleteUser();
     }
 
-    public void send_deleteUser(String userId) throws org.apache.thrift.TException
+    public void send_deleteUser(String domainId, String userId) throws org.apache.thrift.TException
     {
       deleteUser_args args = new deleteUser_args();
+      args.setDomainId(domainId);
       args.setUserId(userId);
       sendBase("deleteUser", args);
     }
@@ -704,15 +724,16 @@
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "deleteUser failed: unknown result");
     }
 
-    public org.apache.airavata.sharing.registry.models.User getUser(String userId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
+    public org.apache.airavata.sharing.registry.models.User getUser(String domainId, String userId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
     {
-      send_getUser(userId);
+      send_getUser(domainId, userId);
       return recv_getUser();
     }
 
-    public void send_getUser(String userId) throws org.apache.thrift.TException
+    public void send_getUser(String domainId, String userId) throws org.apache.thrift.TException
     {
       getUser_args args = new getUser_args();
+      args.setDomainId(domainId);
       args.setUserId(userId);
       sendBase("getUser", args);
     }
@@ -810,15 +831,16 @@
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "updateGroup failed: unknown result");
     }
 
-    public boolean deleteGroup(String groupId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
+    public boolean deleteGroup(String domainId, String groupId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
     {
-      send_deleteGroup(groupId);
+      send_deleteGroup(domainId, groupId);
       return recv_deleteGroup();
     }
 
-    public void send_deleteGroup(String groupId) throws org.apache.thrift.TException
+    public void send_deleteGroup(String domainId, String groupId) throws org.apache.thrift.TException
     {
       deleteGroup_args args = new deleteGroup_args();
+      args.setDomainId(domainId);
       args.setGroupId(groupId);
       sendBase("deleteGroup", args);
     }
@@ -836,15 +858,16 @@
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "deleteGroup failed: unknown result");
     }
 
-    public org.apache.airavata.sharing.registry.models.UserGroup getGroup(String groupId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
+    public org.apache.airavata.sharing.registry.models.UserGroup getGroup(String domainId, String groupId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
     {
-      send_getGroup(groupId);
+      send_getGroup(domainId, groupId);
       return recv_getGroup();
     }
 
-    public void send_getGroup(String groupId) throws org.apache.thrift.TException
+    public void send_getGroup(String domainId, String groupId) throws org.apache.thrift.TException
     {
       getGroup_args args = new getGroup_args();
+      args.setDomainId(domainId);
       args.setGroupId(groupId);
       sendBase("getGroup", args);
     }
@@ -887,15 +910,16 @@
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "getGroups failed: unknown result");
     }
 
-    public boolean addUsersToGroup(List<String> userIds, String groupId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
+    public boolean addUsersToGroup(String domainId, List<String> userIds, String groupId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
     {
-      send_addUsersToGroup(userIds, groupId);
+      send_addUsersToGroup(domainId, userIds, groupId);
       return recv_addUsersToGroup();
     }
 
-    public void send_addUsersToGroup(List<String> userIds, String groupId) throws org.apache.thrift.TException
+    public void send_addUsersToGroup(String domainId, List<String> userIds, String groupId) throws org.apache.thrift.TException
     {
       addUsersToGroup_args args = new addUsersToGroup_args();
+      args.setDomainId(domainId);
       args.setUserIds(userIds);
       args.setGroupId(groupId);
       sendBase("addUsersToGroup", args);
@@ -914,15 +938,16 @@
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "addUsersToGroup failed: unknown result");
     }
 
-    public boolean removeUsersFromGroup(List<String> userIds, String groupId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
+    public boolean removeUsersFromGroup(String domainId, List<String> userIds, String groupId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
     {
-      send_removeUsersFromGroup(userIds, groupId);
+      send_removeUsersFromGroup(domainId, userIds, groupId);
       return recv_removeUsersFromGroup();
     }
 
-    public void send_removeUsersFromGroup(List<String> userIds, String groupId) throws org.apache.thrift.TException
+    public void send_removeUsersFromGroup(String domainId, List<String> userIds, String groupId) throws org.apache.thrift.TException
     {
       removeUsersFromGroup_args args = new removeUsersFromGroup_args();
+      args.setDomainId(domainId);
       args.setUserIds(userIds);
       args.setGroupId(groupId);
       sendBase("removeUsersFromGroup", args);
@@ -941,15 +966,16 @@
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "removeUsersFromGroup failed: unknown result");
     }
 
-    public List<org.apache.airavata.sharing.registry.models.User> getGroupMembersOfTypeUser(String groupId, int offset, int limit) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
+    public List<org.apache.airavata.sharing.registry.models.User> getGroupMembersOfTypeUser(String domainId, String groupId, int offset, int limit) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
     {
-      send_getGroupMembersOfTypeUser(groupId, offset, limit);
+      send_getGroupMembersOfTypeUser(domainId, groupId, offset, limit);
       return recv_getGroupMembersOfTypeUser();
     }
 
-    public void send_getGroupMembersOfTypeUser(String groupId, int offset, int limit) throws org.apache.thrift.TException
+    public void send_getGroupMembersOfTypeUser(String domainId, String groupId, int offset, int limit) throws org.apache.thrift.TException
     {
       getGroupMembersOfTypeUser_args args = new getGroupMembersOfTypeUser_args();
+      args.setDomainId(domainId);
       args.setGroupId(groupId);
       args.setOffset(offset);
       args.setLimit(limit);
@@ -969,15 +995,16 @@
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "getGroupMembersOfTypeUser failed: unknown result");
     }
 
-    public List<org.apache.airavata.sharing.registry.models.UserGroup> getGroupMembersOfTypeGroup(String groupId, int offset, int limit) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
+    public List<org.apache.airavata.sharing.registry.models.UserGroup> getGroupMembersOfTypeGroup(String domainId, String groupId, int offset, int limit) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
     {
-      send_getGroupMembersOfTypeGroup(groupId, offset, limit);
+      send_getGroupMembersOfTypeGroup(domainId, groupId, offset, limit);
       return recv_getGroupMembersOfTypeGroup();
     }
 
-    public void send_getGroupMembersOfTypeGroup(String groupId, int offset, int limit) throws org.apache.thrift.TException
+    public void send_getGroupMembersOfTypeGroup(String domainId, String groupId, int offset, int limit) throws org.apache.thrift.TException
     {
       getGroupMembersOfTypeGroup_args args = new getGroupMembersOfTypeGroup_args();
+      args.setDomainId(domainId);
       args.setGroupId(groupId);
       args.setOffset(offset);
       args.setLimit(limit);
@@ -997,15 +1024,16 @@
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "getGroupMembersOfTypeGroup failed: unknown result");
     }
 
-    public boolean addChildGroupsToParentGroup(List<String> childIds, String groupId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
+    public boolean addChildGroupsToParentGroup(String domainId, List<String> childIds, String groupId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
     {
-      send_addChildGroupsToParentGroup(childIds, groupId);
+      send_addChildGroupsToParentGroup(domainId, childIds, groupId);
       return recv_addChildGroupsToParentGroup();
     }
 
-    public void send_addChildGroupsToParentGroup(List<String> childIds, String groupId) throws org.apache.thrift.TException
+    public void send_addChildGroupsToParentGroup(String domainId, List<String> childIds, String groupId) throws org.apache.thrift.TException
     {
       addChildGroupsToParentGroup_args args = new addChildGroupsToParentGroup_args();
+      args.setDomainId(domainId);
       args.setChildIds(childIds);
       args.setGroupId(groupId);
       sendBase("addChildGroupsToParentGroup", args);
@@ -1024,15 +1052,16 @@
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "addChildGroupsToParentGroup failed: unknown result");
     }
 
-    public boolean removeChildGroupFromParentGroup(String childId, String groupId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
+    public boolean removeChildGroupFromParentGroup(String domainId, String childId, String groupId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
     {
-      send_removeChildGroupFromParentGroup(childId, groupId);
+      send_removeChildGroupFromParentGroup(domainId, childId, groupId);
       return recv_removeChildGroupFromParentGroup();
     }
 
-    public void send_removeChildGroupFromParentGroup(String childId, String groupId) throws org.apache.thrift.TException
+    public void send_removeChildGroupFromParentGroup(String domainId, String childId, String groupId) throws org.apache.thrift.TException
     {
       removeChildGroupFromParentGroup_args args = new removeChildGroupFromParentGroup_args();
+      args.setDomainId(domainId);
       args.setChildId(childId);
       args.setGroupId(groupId);
       sendBase("removeChildGroupFromParentGroup", args);
@@ -1103,15 +1132,16 @@
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "updateEntityType failed: unknown result");
     }
 
-    public boolean deleteEntityType(String entityTypeId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
+    public boolean deleteEntityType(String domainId, String entityTypeId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
     {
-      send_deleteEntityType(entityTypeId);
+      send_deleteEntityType(domainId, entityTypeId);
       return recv_deleteEntityType();
     }
 
-    public void send_deleteEntityType(String entityTypeId) throws org.apache.thrift.TException
+    public void send_deleteEntityType(String domainId, String entityTypeId) throws org.apache.thrift.TException
     {
       deleteEntityType_args args = new deleteEntityType_args();
+      args.setDomainId(domainId);
       args.setEntityTypeId(entityTypeId);
       sendBase("deleteEntityType", args);
     }
@@ -1129,15 +1159,16 @@
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "deleteEntityType failed: unknown result");
     }
 
-    public org.apache.airavata.sharing.registry.models.EntityType getEntityType(String entityTypeId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
+    public org.apache.airavata.sharing.registry.models.EntityType getEntityType(String domainId, String entityTypeId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
     {
-      send_getEntityType(entityTypeId);
+      send_getEntityType(domainId, entityTypeId);
       return recv_getEntityType();
     }
 
-    public void send_getEntityType(String entityTypeId) throws org.apache.thrift.TException
+    public void send_getEntityType(String domainId, String entityTypeId) throws org.apache.thrift.TException
     {
       getEntityType_args args = new getEntityType_args();
+      args.setDomainId(domainId);
       args.setEntityTypeId(entityTypeId);
       sendBase("getEntityType", args);
     }
@@ -1235,15 +1266,16 @@
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "updateEntity failed: unknown result");
     }
 
-    public boolean deleteEntity(String entityId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
+    public boolean deleteEntity(String domainId, String entityId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
     {
-      send_deleteEntity(entityId);
+      send_deleteEntity(domainId, entityId);
       return recv_deleteEntity();
     }
 
-    public void send_deleteEntity(String entityId) throws org.apache.thrift.TException
+    public void send_deleteEntity(String domainId, String entityId) throws org.apache.thrift.TException
     {
       deleteEntity_args args = new deleteEntity_args();
+      args.setDomainId(domainId);
       args.setEntityId(entityId);
       sendBase("deleteEntity", args);
     }
@@ -1261,15 +1293,16 @@
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "deleteEntity failed: unknown result");
     }
 
-    public org.apache.airavata.sharing.registry.models.Entity getEntity(String entityId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
+    public org.apache.airavata.sharing.registry.models.Entity getEntity(String domainId, String entityId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
     {
-      send_getEntity(entityId);
+      send_getEntity(domainId, entityId);
       return recv_getEntity();
     }
 
-    public void send_getEntity(String entityId) throws org.apache.thrift.TException
+    public void send_getEntity(String domainId, String entityId) throws org.apache.thrift.TException
     {
       getEntity_args args = new getEntity_args();
+      args.setDomainId(domainId);
       args.setEntityId(entityId);
       sendBase("getEntity", args);
     }
@@ -1287,15 +1320,16 @@
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "getEntity failed: unknown result");
     }
 
-    public List<org.apache.airavata.sharing.registry.models.Entity> searchEntities(String userId, String entityTypeId, List<org.apache.airavata.sharing.registry.models.SearchCriteria> filters, int offset, int limit) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
+    public List<org.apache.airavata.sharing.registry.models.Entity> searchEntities(String domainId, String userId, String entityTypeId, List<org.apache.airavata.sharing.registry.models.SearchCriteria> filters, int offset, int limit) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
     {
-      send_searchEntities(userId, entityTypeId, filters, offset, limit);
+      send_searchEntities(domainId, userId, entityTypeId, filters, offset, limit);
       return recv_searchEntities();
     }
 
-    public void send_searchEntities(String userId, String entityTypeId, List<org.apache.airavata.sharing.registry.models.SearchCriteria> filters, int offset, int limit) throws org.apache.thrift.TException
+    public void send_searchEntities(String domainId, String userId, String entityTypeId, List<org.apache.airavata.sharing.registry.models.SearchCriteria> filters, int offset, int limit) throws org.apache.thrift.TException
     {
       searchEntities_args args = new searchEntities_args();
+      args.setDomainId(domainId);
       args.setUserId(userId);
       args.setEntityTypeId(entityTypeId);
       args.setFilters(filters);
@@ -1317,15 +1351,16 @@
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "searchEntities failed: unknown result");
     }
 
-    public List<org.apache.airavata.sharing.registry.models.User> getListOfSharedUsers(String entityId, String permissionTypeId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
+    public List<org.apache.airavata.sharing.registry.models.User> getListOfSharedUsers(String domainId, String entityId, String permissionTypeId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
     {
-      send_getListOfSharedUsers(entityId, permissionTypeId);
+      send_getListOfSharedUsers(domainId, entityId, permissionTypeId);
       return recv_getListOfSharedUsers();
     }
 
-    public void send_getListOfSharedUsers(String entityId, String permissionTypeId) throws org.apache.thrift.TException
+    public void send_getListOfSharedUsers(String domainId, String entityId, String permissionTypeId) throws org.apache.thrift.TException
     {
       getListOfSharedUsers_args args = new getListOfSharedUsers_args();
+      args.setDomainId(domainId);
       args.setEntityId(entityId);
       args.setPermissionTypeId(permissionTypeId);
       sendBase("getListOfSharedUsers", args);
@@ -1344,15 +1379,16 @@
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "getListOfSharedUsers failed: unknown result");
     }
 
-    public List<org.apache.airavata.sharing.registry.models.UserGroup> getListOfSharedGroups(String entityId, String permissionTypeId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
+    public List<org.apache.airavata.sharing.registry.models.UserGroup> getListOfSharedGroups(String domainId, String entityId, String permissionTypeId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
     {
-      send_getListOfSharedGroups(entityId, permissionTypeId);
+      send_getListOfSharedGroups(domainId, entityId, permissionTypeId);
       return recv_getListOfSharedGroups();
     }
 
-    public void send_getListOfSharedGroups(String entityId, String permissionTypeId) throws org.apache.thrift.TException
+    public void send_getListOfSharedGroups(String domainId, String entityId, String permissionTypeId) throws org.apache.thrift.TException
     {
       getListOfSharedGroups_args args = new getListOfSharedGroups_args();
+      args.setDomainId(domainId);
       args.setEntityId(entityId);
       args.setPermissionTypeId(permissionTypeId);
       sendBase("getListOfSharedGroups", args);
@@ -1423,16 +1459,17 @@
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "updatePermissionType failed: unknown result");
     }
 
-    public boolean deletePermissionType(String entityTypeId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
+    public boolean deletePermissionType(String domainId, String permissionTypeId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
     {
-      send_deletePermissionType(entityTypeId);
+      send_deletePermissionType(domainId, permissionTypeId);
       return recv_deletePermissionType();
     }
 
-    public void send_deletePermissionType(String entityTypeId) throws org.apache.thrift.TException
+    public void send_deletePermissionType(String domainId, String permissionTypeId) throws org.apache.thrift.TException
     {
       deletePermissionType_args args = new deletePermissionType_args();
-      args.setEntityTypeId(entityTypeId);
+      args.setDomainId(domainId);
+      args.setPermissionTypeId(permissionTypeId);
       sendBase("deletePermissionType", args);
     }
 
@@ -1449,15 +1486,16 @@
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "deletePermissionType failed: unknown result");
     }
 
-    public org.apache.airavata.sharing.registry.models.PermissionType getPermissionType(String permissionTypeId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
+    public org.apache.airavata.sharing.registry.models.PermissionType getPermissionType(String domainId, String permissionTypeId) throws org.apache.airavata.sharing.registry.models.SharingRegistryException, org.apache.thrift.TException
     {
-      send_getPermissionType(permissionTypeId);
+      send_getPermissionType(domainId, permissionTypeId);
       return recv_getPermissionType();
     }
 
-    public void send_getPermissionType(String permissionTypeId) throws org.apache.thrift.TException
+    public void send_getPermissionType(String domainId, String permissionTypeId) throws org.apache.thrift.TException
     {
       getPermissionType_args args = new getPermissionType_args();
+      args.setDomainId(domainId);
       args.setPermissionTypeId(permissionTypeId);
       sendBase("getPermissionType", args);
     }
@@ -1895,23 +1933,26 @@
       }
     }
 
-    public void deleteUser(String userId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
+    public void deleteUser(String domainId, String userId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
       checkReady();
-      deleteUser_call method_call = new deleteUser_call(userId, resultHandler, this, ___protocolFactory, ___transport);
+      deleteUser_call method_call = new deleteUser_call(domainId, userId, resultHandler, this, ___protocolFactory, ___transport);
       this.___currentMethod = method_call;
       ___manager.call(method_call);
     }
 
     public static class deleteUser_call extends org.apache.thrift.async.TAsyncMethodCall {
+      private String domainId;
       private String userId;
-      public deleteUser_call(String userId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+      public deleteUser_call(String domainId, String userId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
         super(client, protocolFactory, transport, resultHandler, false);
+        this.domainId = domainId;
         this.userId = userId;
       }
 
       public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
         prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("deleteUser", org.apache.thrift.protocol.TMessageType.CALL, 0));
         deleteUser_args args = new deleteUser_args();
+        args.setDomainId(domainId);
         args.setUserId(userId);
         args.write(prot);
         prot.writeMessageEnd();
@@ -1927,23 +1968,26 @@
       }
     }
 
-    public void getUser(String userId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
+    public void getUser(String domainId, String userId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
       checkReady();
-      getUser_call method_call = new getUser_call(userId, resultHandler, this, ___protocolFactory, ___transport);
+      getUser_call method_call = new getUser_call(domainId, userId, resultHandler, this, ___protocolFactory, ___transport);
       this.___currentMethod = method_call;
       ___manager.call(method_call);
     }
 
     public static class getUser_call extends org.apache.thrift.async.TAsyncMethodCall {
+      private String domainId;
       private String userId;
-      public getUser_call(String userId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+      public getUser_call(String domainId, String userId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
         super(client, protocolFactory, transport, resultHandler, false);
+        this.domainId = domainId;
         this.userId = userId;
       }
 
       public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
         prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("getUser", org.apache.thrift.protocol.TMessageType.CALL, 0));
         getUser_args args = new getUser_args();
+        args.setDomainId(domainId);
         args.setUserId(userId);
         args.write(prot);
         prot.writeMessageEnd();
@@ -2061,23 +2105,26 @@
       }
     }
 
-    public void deleteGroup(String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
+    public void deleteGroup(String domainId, String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
       checkReady();
-      deleteGroup_call method_call = new deleteGroup_call(groupId, resultHandler, this, ___protocolFactory, ___transport);
+      deleteGroup_call method_call = new deleteGroup_call(domainId, groupId, resultHandler, this, ___protocolFactory, ___transport);
       this.___currentMethod = method_call;
       ___manager.call(method_call);
     }
 
     public static class deleteGroup_call extends org.apache.thrift.async.TAsyncMethodCall {
+      private String domainId;
       private String groupId;
-      public deleteGroup_call(String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+      public deleteGroup_call(String domainId, String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
         super(client, protocolFactory, transport, resultHandler, false);
+        this.domainId = domainId;
         this.groupId = groupId;
       }
 
       public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
         prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("deleteGroup", org.apache.thrift.protocol.TMessageType.CALL, 0));
         deleteGroup_args args = new deleteGroup_args();
+        args.setDomainId(domainId);
         args.setGroupId(groupId);
         args.write(prot);
         prot.writeMessageEnd();
@@ -2093,23 +2140,26 @@
       }
     }
 
-    public void getGroup(String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
+    public void getGroup(String domainId, String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
       checkReady();
-      getGroup_call method_call = new getGroup_call(groupId, resultHandler, this, ___protocolFactory, ___transport);
+      getGroup_call method_call = new getGroup_call(domainId, groupId, resultHandler, this, ___protocolFactory, ___transport);
       this.___currentMethod = method_call;
       ___manager.call(method_call);
     }
 
     public static class getGroup_call extends org.apache.thrift.async.TAsyncMethodCall {
+      private String domainId;
       private String groupId;
-      public getGroup_call(String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+      public getGroup_call(String domainId, String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
         super(client, protocolFactory, transport, resultHandler, false);
+        this.domainId = domainId;
         this.groupId = groupId;
       }
 
       public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
         prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("getGroup", org.apache.thrift.protocol.TMessageType.CALL, 0));
         getGroup_args args = new getGroup_args();
+        args.setDomainId(domainId);
         args.setGroupId(groupId);
         args.write(prot);
         prot.writeMessageEnd();
@@ -2163,18 +2213,20 @@
       }
     }
 
-    public void addUsersToGroup(List<String> userIds, String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
+    public void addUsersToGroup(String domainId, List<String> userIds, String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
       checkReady();
-      addUsersToGroup_call method_call = new addUsersToGroup_call(userIds, groupId, resultHandler, this, ___protocolFactory, ___transport);
+      addUsersToGroup_call method_call = new addUsersToGroup_call(domainId, userIds, groupId, resultHandler, this, ___protocolFactory, ___transport);
       this.___currentMethod = method_call;
       ___manager.call(method_call);
     }
 
     public static class addUsersToGroup_call extends org.apache.thrift.async.TAsyncMethodCall {
+      private String domainId;
       private List<String> userIds;
       private String groupId;
-      public addUsersToGroup_call(List<String> userIds, String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+      public addUsersToGroup_call(String domainId, List<String> userIds, String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
         super(client, protocolFactory, transport, resultHandler, false);
+        this.domainId = domainId;
         this.userIds = userIds;
         this.groupId = groupId;
       }
@@ -2182,6 +2234,7 @@
       public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
         prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("addUsersToGroup", org.apache.thrift.protocol.TMessageType.CALL, 0));
         addUsersToGroup_args args = new addUsersToGroup_args();
+        args.setDomainId(domainId);
         args.setUserIds(userIds);
         args.setGroupId(groupId);
         args.write(prot);
@@ -2198,18 +2251,20 @@
       }
     }
 
-    public void removeUsersFromGroup(List<String> userIds, String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
+    public void removeUsersFromGroup(String domainId, List<String> userIds, String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
       checkReady();
-      removeUsersFromGroup_call method_call = new removeUsersFromGroup_call(userIds, groupId, resultHandler, this, ___protocolFactory, ___transport);
+      removeUsersFromGroup_call method_call = new removeUsersFromGroup_call(domainId, userIds, groupId, resultHandler, this, ___protocolFactory, ___transport);
       this.___currentMethod = method_call;
       ___manager.call(method_call);
     }
 
     public static class removeUsersFromGroup_call extends org.apache.thrift.async.TAsyncMethodCall {
+      private String domainId;
       private List<String> userIds;
       private String groupId;
-      public removeUsersFromGroup_call(List<String> userIds, String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+      public removeUsersFromGroup_call(String domainId, List<String> userIds, String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
         super(client, protocolFactory, transport, resultHandler, false);
+        this.domainId = domainId;
         this.userIds = userIds;
         this.groupId = groupId;
       }
@@ -2217,6 +2272,7 @@
       public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
         prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("removeUsersFromGroup", org.apache.thrift.protocol.TMessageType.CALL, 0));
         removeUsersFromGroup_args args = new removeUsersFromGroup_args();
+        args.setDomainId(domainId);
         args.setUserIds(userIds);
         args.setGroupId(groupId);
         args.write(prot);
@@ -2233,19 +2289,21 @@
       }
     }
 
-    public void getGroupMembersOfTypeUser(String groupId, int offset, int limit, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
+    public void getGroupMembersOfTypeUser(String domainId, String groupId, int offset, int limit, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
       checkReady();
-      getGroupMembersOfTypeUser_call method_call = new getGroupMembersOfTypeUser_call(groupId, offset, limit, resultHandler, this, ___protocolFactory, ___transport);
+      getGroupMembersOfTypeUser_call method_call = new getGroupMembersOfTypeUser_call(domainId, groupId, offset, limit, resultHandler, this, ___protocolFactory, ___transport);
       this.___currentMethod = method_call;
       ___manager.call(method_call);
     }
 
     public static class getGroupMembersOfTypeUser_call extends org.apache.thrift.async.TAsyncMethodCall {
+      private String domainId;
       private String groupId;
       private int offset;
       private int limit;
-      public getGroupMembersOfTypeUser_call(String groupId, int offset, int limit, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+      public getGroupMembersOfTypeUser_call(String domainId, String groupId, int offset, int limit, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
         super(client, protocolFactory, transport, resultHandler, false);
+        this.domainId = domainId;
         this.groupId = groupId;
         this.offset = offset;
         this.limit = limit;
@@ -2254,6 +2312,7 @@
       public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
         prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("getGroupMembersOfTypeUser", org.apache.thrift.protocol.TMessageType.CALL, 0));
         getGroupMembersOfTypeUser_args args = new getGroupMembersOfTypeUser_args();
+        args.setDomainId(domainId);
         args.setGroupId(groupId);
         args.setOffset(offset);
         args.setLimit(limit);
@@ -2271,19 +2330,21 @@
       }
     }
 
-    public void getGroupMembersOfTypeGroup(String groupId, int offset, int limit, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
+    public void getGroupMembersOfTypeGroup(String domainId, String groupId, int offset, int limit, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
       checkReady();
-      getGroupMembersOfTypeGroup_call method_call = new getGroupMembersOfTypeGroup_call(groupId, offset, limit, resultHandler, this, ___protocolFactory, ___transport);
+      getGroupMembersOfTypeGroup_call method_call = new getGroupMembersOfTypeGroup_call(domainId, groupId, offset, limit, resultHandler, this, ___protocolFactory, ___transport);
       this.___currentMethod = method_call;
       ___manager.call(method_call);
     }
 
     public static class getGroupMembersOfTypeGroup_call extends org.apache.thrift.async.TAsyncMethodCall {
+      private String domainId;
       private String groupId;
       private int offset;
       private int limit;
-      public getGroupMembersOfTypeGroup_call(String groupId, int offset, int limit, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+      public getGroupMembersOfTypeGroup_call(String domainId, String groupId, int offset, int limit, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
         super(client, protocolFactory, transport, resultHandler, false);
+        this.domainId = domainId;
         this.groupId = groupId;
         this.offset = offset;
         this.limit = limit;
@@ -2292,6 +2353,7 @@
       public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
         prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("getGroupMembersOfTypeGroup", org.apache.thrift.protocol.TMessageType.CALL, 0));
         getGroupMembersOfTypeGroup_args args = new getGroupMembersOfTypeGroup_args();
+        args.setDomainId(domainId);
         args.setGroupId(groupId);
         args.setOffset(offset);
         args.setLimit(limit);
@@ -2309,18 +2371,20 @@
       }
     }
 
-    public void addChildGroupsToParentGroup(List<String> childIds, String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
+    public void addChildGroupsToParentGroup(String domainId, List<String> childIds, String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
       checkReady();
-      addChildGroupsToParentGroup_call method_call = new addChildGroupsToParentGroup_call(childIds, groupId, resultHandler, this, ___protocolFactory, ___transport);
+      addChildGroupsToParentGroup_call method_call = new addChildGroupsToParentGroup_call(domainId, childIds, groupId, resultHandler, this, ___protocolFactory, ___transport);
       this.___currentMethod = method_call;
       ___manager.call(method_call);
     }
 
     public static class addChildGroupsToParentGroup_call extends org.apache.thrift.async.TAsyncMethodCall {
+      private String domainId;
       private List<String> childIds;
       private String groupId;
-      public addChildGroupsToParentGroup_call(List<String> childIds, String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+      public addChildGroupsToParentGroup_call(String domainId, List<String> childIds, String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
         super(client, protocolFactory, transport, resultHandler, false);
+        this.domainId = domainId;
         this.childIds = childIds;
         this.groupId = groupId;
       }
@@ -2328,6 +2392,7 @@
       public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
         prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("addChildGroupsToParentGroup", org.apache.thrift.protocol.TMessageType.CALL, 0));
         addChildGroupsToParentGroup_args args = new addChildGroupsToParentGroup_args();
+        args.setDomainId(domainId);
         args.setChildIds(childIds);
         args.setGroupId(groupId);
         args.write(prot);
@@ -2344,18 +2409,20 @@
       }
     }
 
-    public void removeChildGroupFromParentGroup(String childId, String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
+    public void removeChildGroupFromParentGroup(String domainId, String childId, String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
       checkReady();
-      removeChildGroupFromParentGroup_call method_call = new removeChildGroupFromParentGroup_call(childId, groupId, resultHandler, this, ___protocolFactory, ___transport);
+      removeChildGroupFromParentGroup_call method_call = new removeChildGroupFromParentGroup_call(domainId, childId, groupId, resultHandler, this, ___protocolFactory, ___transport);
       this.___currentMethod = method_call;
       ___manager.call(method_call);
     }
 
     public static class removeChildGroupFromParentGroup_call extends org.apache.thrift.async.TAsyncMethodCall {
+      private String domainId;
       private String childId;
       private String groupId;
-      public removeChildGroupFromParentGroup_call(String childId, String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+      public removeChildGroupFromParentGroup_call(String domainId, String childId, String groupId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
         super(client, protocolFactory, transport, resultHandler, false);
+        this.domainId = domainId;
         this.childId = childId;
         this.groupId = groupId;
       }
@@ -2363,6 +2430,7 @@
       public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
         prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("removeChildGroupFromParentGroup", org.apache.thrift.protocol.TMessageType.CALL, 0));
         removeChildGroupFromParentGroup_args args = new removeChildGroupFromParentGroup_args();
+        args.setDomainId(domainId);
         args.setChildId(childId);
         args.setGroupId(groupId);
         args.write(prot);
@@ -2443,23 +2511,26 @@
       }
     }
 
-    public void deleteEntityType(String entityTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
+    public void deleteEntityType(String domainId, String entityTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
       checkReady();
-      deleteEntityType_call method_call = new deleteEntityType_call(entityTypeId, resultHandler, this, ___protocolFactory, ___transport);
+      deleteEntityType_call method_call = new deleteEntityType_call(domainId, entityTypeId, resultHandler, this, ___protocolFactory, ___transport);
       this.___currentMethod = method_call;
       ___manager.call(method_call);
     }
 
     public static class deleteEntityType_call extends org.apache.thrift.async.TAsyncMethodCall {
+      private String domainId;
       private String entityTypeId;
-      public deleteEntityType_call(String entityTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+      public deleteEntityType_call(String domainId, String entityTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
         super(client, protocolFactory, transport, resultHandler, false);
+        this.domainId = domainId;
         this.entityTypeId = entityTypeId;
       }
 
       public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
         prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("deleteEntityType", org.apache.thrift.protocol.TMessageType.CALL, 0));
         deleteEntityType_args args = new deleteEntityType_args();
+        args.setDomainId(domainId);
         args.setEntityTypeId(entityTypeId);
         args.write(prot);
         prot.writeMessageEnd();
@@ -2475,23 +2546,26 @@
       }
     }
 
-    public void getEntityType(String entityTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
+    public void getEntityType(String domainId, String entityTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
       checkReady();
-      getEntityType_call method_call = new getEntityType_call(entityTypeId, resultHandler, this, ___protocolFactory, ___transport);
+      getEntityType_call method_call = new getEntityType_call(domainId, entityTypeId, resultHandler, this, ___protocolFactory, ___transport);
       this.___currentMethod = method_call;
       ___manager.call(method_call);
     }
 
     public static class getEntityType_call extends org.apache.thrift.async.TAsyncMethodCall {
+      private String domainId;
       private String entityTypeId;
-      public getEntityType_call(String entityTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+      public getEntityType_call(String domainId, String entityTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
         super(client, protocolFactory, transport, resultHandler, false);
+        this.domainId = domainId;
         this.entityTypeId = entityTypeId;
       }
 
       public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
         prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("getEntityType", org.apache.thrift.protocol.TMessageType.CALL, 0));
         getEntityType_args args = new getEntityType_args();
+        args.setDomainId(domainId);
         args.setEntityTypeId(entityTypeId);
         args.write(prot);
         prot.writeMessageEnd();
@@ -2609,23 +2683,26 @@
       }
     }
 
-    public void deleteEntity(String entityId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
+    public void deleteEntity(String domainId, String entityId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
       checkReady();
-      deleteEntity_call method_call = new deleteEntity_call(entityId, resultHandler, this, ___protocolFactory, ___transport);
+      deleteEntity_call method_call = new deleteEntity_call(domainId, entityId, resultHandler, this, ___protocolFactory, ___transport);
       this.___currentMethod = method_call;
       ___manager.call(method_call);
     }
 
     public static class deleteEntity_call extends org.apache.thrift.async.TAsyncMethodCall {
+      private String domainId;
       private String entityId;
-      public deleteEntity_call(String entityId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+      public deleteEntity_call(String domainId, String entityId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
         super(client, protocolFactory, transport, resultHandler, false);
+        this.domainId = domainId;
         this.entityId = entityId;
       }
 
       public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
         prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("deleteEntity", org.apache.thrift.protocol.TMessageType.CALL, 0));
         deleteEntity_args args = new deleteEntity_args();
+        args.setDomainId(domainId);
         args.setEntityId(entityId);
         args.write(prot);
         prot.writeMessageEnd();
@@ -2641,23 +2718,26 @@
       }
     }
 
-    public void getEntity(String entityId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
+    public void getEntity(String domainId, String entityId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
       checkReady();
-      getEntity_call method_call = new getEntity_call(entityId, resultHandler, this, ___protocolFactory, ___transport);
+      getEntity_call method_call = new getEntity_call(domainId, entityId, resultHandler, this, ___protocolFactory, ___transport);
       this.___currentMethod = method_call;
       ___manager.call(method_call);
     }
 
     public static class getEntity_call extends org.apache.thrift.async.TAsyncMethodCall {
+      private String domainId;
       private String entityId;
-      public getEntity_call(String entityId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+      public getEntity_call(String domainId, String entityId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
         super(client, protocolFactory, transport, resultHandler, false);
+        this.domainId = domainId;
         this.entityId = entityId;
       }
 
       public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
         prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("getEntity", org.apache.thrift.protocol.TMessageType.CALL, 0));
         getEntity_args args = new getEntity_args();
+        args.setDomainId(domainId);
         args.setEntityId(entityId);
         args.write(prot);
         prot.writeMessageEnd();
@@ -2673,21 +2753,23 @@
       }
     }
 
-    public void searchEntities(String userId, String entityTypeId, List<org.apache.airavata.sharing.registry.models.SearchCriteria> filters, int offset, int limit, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
+    public void searchEntities(String domainId, String userId, String entityTypeId, List<org.apache.airavata.sharing.registry.models.SearchCriteria> filters, int offset, int limit, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
       checkReady();
-      searchEntities_call method_call = new searchEntities_call(userId, entityTypeId, filters, offset, limit, resultHandler, this, ___protocolFactory, ___transport);
+      searchEntities_call method_call = new searchEntities_call(domainId, userId, entityTypeId, filters, offset, limit, resultHandler, this, ___protocolFactory, ___transport);
       this.___currentMethod = method_call;
       ___manager.call(method_call);
     }
 
     public static class searchEntities_call extends org.apache.thrift.async.TAsyncMethodCall {
+      private String domainId;
       private String userId;
       private String entityTypeId;
       private List<org.apache.airavata.sharing.registry.models.SearchCriteria> filters;
       private int offset;
       private int limit;
-      public searchEntities_call(String userId, String entityTypeId, List<org.apache.airavata.sharing.registry.models.SearchCriteria> filters, int offset, int limit, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+      public searchEntities_call(String domainId, String userId, String entityTypeId, List<org.apache.airavata.sharing.registry.models.SearchCriteria> filters, int offset, int limit, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
         super(client, protocolFactory, transport, resultHandler, false);
+        this.domainId = domainId;
         this.userId = userId;
         this.entityTypeId = entityTypeId;
         this.filters = filters;
@@ -2698,6 +2780,7 @@
       public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
         prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("searchEntities", org.apache.thrift.protocol.TMessageType.CALL, 0));
         searchEntities_args args = new searchEntities_args();
+        args.setDomainId(domainId);
         args.setUserId(userId);
         args.setEntityTypeId(entityTypeId);
         args.setFilters(filters);
@@ -2717,18 +2800,20 @@
       }
     }
 
-    public void getListOfSharedUsers(String entityId, String permissionTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
+    public void getListOfSharedUsers(String domainId, String entityId, String permissionTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
       checkReady();
-      getListOfSharedUsers_call method_call = new getListOfSharedUsers_call(entityId, permissionTypeId, resultHandler, this, ___protocolFactory, ___transport);
+      getListOfSharedUsers_call method_call = new getListOfSharedUsers_call(domainId, entityId, permissionTypeId, resultHandler, this, ___protocolFactory, ___transport);
       this.___currentMethod = method_call;
       ___manager.call(method_call);
     }
 
     public static class getListOfSharedUsers_call extends org.apache.thrift.async.TAsyncMethodCall {
+      private String domainId;
       private String entityId;
       private String permissionTypeId;
-      public getListOfSharedUsers_call(String entityId, String permissionTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+      public getListOfSharedUsers_call(String domainId, String entityId, String permissionTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
         super(client, protocolFactory, transport, resultHandler, false);
+        this.domainId = domainId;
         this.entityId = entityId;
         this.permissionTypeId = permissionTypeId;
       }
@@ -2736,6 +2821,7 @@
       public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
         prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("getListOfSharedUsers", org.apache.thrift.protocol.TMessageType.CALL, 0));
         getListOfSharedUsers_args args = new getListOfSharedUsers_args();
+        args.setDomainId(domainId);
         args.setEntityId(entityId);
         args.setPermissionTypeId(permissionTypeId);
         args.write(prot);
@@ -2752,18 +2838,20 @@
       }
     }
 
-    public void getListOfSharedGroups(String entityId, String permissionTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
+    public void getListOfSharedGroups(String domainId, String entityId, String permissionTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
       checkReady();
-      getListOfSharedGroups_call method_call = new getListOfSharedGroups_call(entityId, permissionTypeId, resultHandler, this, ___protocolFactory, ___transport);
+      getListOfSharedGroups_call method_call = new getListOfSharedGroups_call(domainId, entityId, permissionTypeId, resultHandler, this, ___protocolFactory, ___transport);
       this.___currentMethod = method_call;
       ___manager.call(method_call);
     }
 
     public static class getListOfSharedGroups_call extends org.apache.thrift.async.TAsyncMethodCall {
+      private String domainId;
       private String entityId;
       private String permissionTypeId;
-      public getListOfSharedGroups_call(String entityId, String permissionTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+      public getListOfSharedGroups_call(String domainId, String entityId, String permissionTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
         super(client, protocolFactory, transport, resultHandler, false);
+        this.domainId = domainId;
         this.entityId = entityId;
         this.permissionTypeId = permissionTypeId;
       }
@@ -2771,6 +2859,7 @@
       public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
         prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("getListOfSharedGroups", org.apache.thrift.protocol.TMessageType.CALL, 0));
         getListOfSharedGroups_args args = new getListOfSharedGroups_args();
+        args.setDomainId(domainId);
         args.setEntityId(entityId);
         args.setPermissionTypeId(permissionTypeId);
         args.write(prot);
@@ -2851,24 +2940,27 @@
       }
     }
 
-    public void deletePermissionType(String entityTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
+    public void deletePermissionType(String domainId, String permissionTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
       checkReady();
-      deletePermissionType_call method_call = new deletePermissionType_call(entityTypeId, resultHandler, this, ___protocolFactory, ___transport);
+      deletePermissionType_call method_call = new deletePermissionType_call(domainId, permissionTypeId, resultHandler, this, ___protocolFactory, ___transport);
       this.___currentMethod = method_call;
       ___manager.call(method_call);
     }
 
     public static class deletePermissionType_call extends org.apache.thrift.async.TAsyncMethodCall {
-      private String entityTypeId;
-      public deletePermissionType_call(String entityTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+      private String domainId;
+      private String permissionTypeId;
+      public deletePermissionType_call(String domainId, String permissionTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
         super(client, protocolFactory, transport, resultHandler, false);
-        this.entityTypeId = entityTypeId;
+        this.domainId = domainId;
+        this.permissionTypeId = permissionTypeId;
       }
 
       public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
         prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("deletePermissionType", org.apache.thrift.protocol.TMessageType.CALL, 0));
         deletePermissionType_args args = new deletePermissionType_args();
-        args.setEntityTypeId(entityTypeId);
+        args.setDomainId(domainId);
+        args.setPermissionTypeId(permissionTypeId);
         args.write(prot);
         prot.writeMessageEnd();
       }
@@ -2883,23 +2975,26 @@
       }
     }
 
-    public void getPermissionType(String permissionTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
+    public void getPermissionType(String domainId, String permissionTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
       checkReady();
-      getPermissionType_call method_call = new getPermissionType_call(permissionTypeId, resultHandler, this, ___protocolFactory, ___transport);
+      getPermissionType_call method_call = new getPermissionType_call(domainId, permissionTypeId, resultHandler, this, ___protocolFactory, ___transport);
       this.___currentMethod = method_call;
       ___manager.call(method_call);
     }
 
     public static class getPermissionType_call extends org.apache.thrift.async.TAsyncMethodCall {
+      private String domainId;
       private String permissionTypeId;
-      public getPermissionType_call(String permissionTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+      public getPermissionType_call(String domainId, String permissionTypeId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
         super(client, protocolFactory, transport, resultHandler, false);
+        this.domainId = domainId;
         this.permissionTypeId = permissionTypeId;
       }
 
       public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
         prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("getPermissionType", org.apache.thrift.protocol.TMessageType.CALL, 0));
         getPermissionType_args args = new getPermissionType_args();
+        args.setDomainId(domainId);
         args.setPermissionTypeId(permissionTypeId);
         args.write(prot);
         prot.writeMessageEnd();
@@ -3410,7 +3505,7 @@
       public deleteUser_result getResult(I iface, deleteUser_args args) throws org.apache.thrift.TException {
         deleteUser_result result = new deleteUser_result();
         try {
-          result.success = iface.deleteUser(args.userId);
+          result.success = iface.deleteUser(args.domainId, args.userId);
           result.setSuccessIsSet(true);
         } catch (org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
           result.sre = sre;
@@ -3435,7 +3530,7 @@
       public getUser_result getResult(I iface, getUser_args args) throws org.apache.thrift.TException {
         getUser_result result = new getUser_result();
         try {
-          result.success = iface.getUser(args.userId);
+          result.success = iface.getUser(args.domainId, args.userId);
         } catch (org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
           result.sre = sre;
         }
@@ -3532,7 +3627,7 @@
       public deleteGroup_result getResult(I iface, deleteGroup_args args) throws org.apache.thrift.TException {
         deleteGroup_result result = new deleteGroup_result();
         try {
-          result.success = iface.deleteGroup(args.groupId);
+          result.success = iface.deleteGroup(args.domainId, args.groupId);
           result.setSuccessIsSet(true);
         } catch (org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
           result.sre = sre;
@@ -3557,7 +3652,7 @@
       public getGroup_result getResult(I iface, getGroup_args args) throws org.apache.thrift.TException {
         getGroup_result result = new getGroup_result();
         try {
-          result.success = iface.getGroup(args.groupId);
+          result.success = iface.getGroup(args.domainId, args.groupId);
         } catch (org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
           result.sre = sre;
         }
@@ -3601,7 +3696,7 @@
       public addUsersToGroup_result getResult(I iface, addUsersToGroup_args args) throws org.apache.thrift.TException {
         addUsersToGroup_result result = new addUsersToGroup_result();
         try {
-          result.success = iface.addUsersToGroup(args.userIds, args.groupId);
+          result.success = iface.addUsersToGroup(args.domainId, args.userIds, args.groupId);
           result.setSuccessIsSet(true);
         } catch (org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
           result.sre = sre;
@@ -3626,7 +3721,7 @@
       public removeUsersFromGroup_result getResult(I iface, removeUsersFromGroup_args args) throws org.apache.thrift.TException {
         removeUsersFromGroup_result result = new removeUsersFromGroup_result();
         try {
-          result.success = iface.removeUsersFromGroup(args.userIds, args.groupId);
+          result.success = iface.removeUsersFromGroup(args.domainId, args.userIds, args.groupId);
           result.setSuccessIsSet(true);
         } catch (org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
           result.sre = sre;
@@ -3651,7 +3746,7 @@
       public getGroupMembersOfTypeUser_result getResult(I iface, getGroupMembersOfTypeUser_args args) throws org.apache.thrift.TException {
         getGroupMembersOfTypeUser_result result = new getGroupMembersOfTypeUser_result();
         try {
-          result.success = iface.getGroupMembersOfTypeUser(args.groupId, args.offset, args.limit);
+          result.success = iface.getGroupMembersOfTypeUser(args.domainId, args.groupId, args.offset, args.limit);
         } catch (org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
           result.sre = sre;
         }
@@ -3675,7 +3770,7 @@
       public getGroupMembersOfTypeGroup_result getResult(I iface, getGroupMembersOfTypeGroup_args args) throws org.apache.thrift.TException {
         getGroupMembersOfTypeGroup_result result = new getGroupMembersOfTypeGroup_result();
         try {
-          result.success = iface.getGroupMembersOfTypeGroup(args.groupId, args.offset, args.limit);
+          result.success = iface.getGroupMembersOfTypeGroup(args.domainId, args.groupId, args.offset, args.limit);
         } catch (org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
           result.sre = sre;
         }
@@ -3699,7 +3794,7 @@
       public addChildGroupsToParentGroup_result getResult(I iface, addChildGroupsToParentGroup_args args) throws org.apache.thrift.TException {
         addChildGroupsToParentGroup_result result = new addChildGroupsToParentGroup_result();
         try {
-          result.success = iface.addChildGroupsToParentGroup(args.childIds, args.groupId);
+          result.success = iface.addChildGroupsToParentGroup(args.domainId, args.childIds, args.groupId);
           result.setSuccessIsSet(true);
         } catch (org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
           result.sre = sre;
@@ -3724,7 +3819,7 @@
       public removeChildGroupFromParentGroup_result getResult(I iface, removeChildGroupFromParentGroup_args args) throws org.apache.thrift.TException {
         removeChildGroupFromParentGroup_result result = new removeChildGroupFromParentGroup_result();
         try {
-          result.success = iface.removeChildGroupFromParentGroup(args.childId, args.groupId);
+          result.success = iface.removeChildGroupFromParentGroup(args.domainId, args.childId, args.groupId);
           result.setSuccessIsSet(true);
         } catch (org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
           result.sre = sre;
@@ -3798,7 +3893,7 @@
       public deleteEntityType_result getResult(I iface, deleteEntityType_args args) throws org.apache.thrift.TException {
         deleteEntityType_result result = new deleteEntityType_result();
         try {
-          result.success = iface.deleteEntityType(args.entityTypeId);
+          result.success = iface.deleteEntityType(args.domainId, args.entityTypeId);
           result.setSuccessIsSet(true);
         } catch (org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
           result.sre = sre;
@@ -3823,7 +3918,7 @@
       public getEntityType_result getResult(I iface, getEntityType_args args) throws org.apache.thrift.TException {
         getEntityType_result result = new getEntityType_result();
         try {
-          result.success = iface.getEntityType(args.entityTypeId);
+          result.success = iface.getEntityType(args.domainId, args.entityTypeId);
         } catch (org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
           result.sre = sre;
         }
@@ -3920,7 +4015,7 @@
       public deleteEntity_result getResult(I iface, deleteEntity_args args) throws org.apache.thrift.TException {
         deleteEntity_result result = new deleteEntity_result();
         try {
-          result.success = iface.deleteEntity(args.entityId);
+          result.success = iface.deleteEntity(args.domainId, args.entityId);
           result.setSuccessIsSet(true);
         } catch (org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
           result.sre = sre;
@@ -3945,7 +4040,7 @@
       public getEntity_result getResult(I iface, getEntity_args args) throws org.apache.thrift.TException {
         getEntity_result result = new getEntity_result();
         try {
-          result.success = iface.getEntity(args.entityId);
+          result.success = iface.getEntity(args.domainId, args.entityId);
         } catch (org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
           result.sre = sre;
         }
@@ -3969,7 +4064,7 @@
       public searchEntities_result getResult(I iface, searchEntities_args args) throws org.apache.thrift.TException {
         searchEntities_result result = new searchEntities_result();
         try {
-          result.success = iface.searchEntities(args.userId, args.entityTypeId, args.filters, args.offset, args.limit);
+          result.success = iface.searchEntities(args.domainId, args.userId, args.entityTypeId, args.filters, args.offset, args.limit);
         } catch (org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
           result.sre = sre;
         }
@@ -3993,7 +4088,7 @@
       public getListOfSharedUsers_result getResult(I iface, getListOfSharedUsers_args args) throws org.apache.thrift.TException {
         getListOfSharedUsers_result result = new getListOfSharedUsers_result();
         try {
-          result.success = iface.getListOfSharedUsers(args.entityId, args.permissionTypeId);
+          result.success = iface.getListOfSharedUsers(args.domainId, args.entityId, args.permissionTypeId);
         } catch (org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
           result.sre = sre;
         }
@@ -4017,7 +4112,7 @@
       public getListOfSharedGroups_result getResult(I iface, getListOfSharedGroups_args args) throws org.apache.thrift.TException {
         getListOfSharedGroups_result result = new getListOfSharedGroups_result();
         try {
-          result.success = iface.getListOfSharedGroups(args.entityId, args.permissionTypeId);
+          result.success = iface.getListOfSharedGroups(args.domainId, args.entityId, args.permissionTypeId);
         } catch (org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
           result.sre = sre;
         }
@@ -4090,7 +4185,7 @@
       public deletePermissionType_result getResult(I iface, deletePermissionType_args args) throws org.apache.thrift.TException {
         deletePermissionType_result result = new deletePermissionType_result();
         try {
-          result.success = iface.deletePermissionType(args.entityTypeId);
+          result.success = iface.deletePermissionType(args.domainId, args.permissionTypeId);
           result.setSuccessIsSet(true);
         } catch (org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
           result.sre = sre;
@@ -4115,7 +4210,7 @@
       public getPermissionType_result getResult(I iface, getPermissionType_args args) throws org.apache.thrift.TException {
         getPermissionType_result result = new getPermissionType_result();
         try {
-          result.success = iface.getPermissionType(args.permissionTypeId);
+          result.success = iface.getPermissionType(args.domainId, args.permissionTypeId);
         } catch (org.apache.airavata.sharing.registry.models.SharingRegistryException sre) {
           result.sre = sre;
         }
@@ -4787,7 +4882,7 @@
       }
 
       public void start(I iface, deleteUser_args args, org.apache.thrift.async.AsyncMethodCallback<Boolean> resultHandler) throws TException {
-        iface.deleteUser(args.userId,resultHandler);
+        iface.deleteUser(args.domainId, args.userId,resultHandler);
       }
     }
 
@@ -4844,7 +4939,7 @@
       }
 
       public void start(I iface, getUser_args args, org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.sharing.registry.models.User> resultHandler) throws TException {
-        iface.getUser(args.userId,resultHandler);
+        iface.getUser(args.domainId, args.userId,resultHandler);
       }
     }
 
@@ -5074,7 +5169,7 @@
       }
 
       public void start(I iface, deleteGroup_args args, org.apache.thrift.async.AsyncMethodCallback<Boolean> resultHandler) throws TException {
-        iface.deleteGroup(args.groupId,resultHandler);
+        iface.deleteGroup(args.domainId, args.groupId,resultHandler);
       }
     }
 
@@ -5131,7 +5226,7 @@
       }
 
       public void start(I iface, getGroup_args args, org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.sharing.registry.models.UserGroup> resultHandler) throws TException {
-        iface.getGroup(args.groupId,resultHandler);
+        iface.getGroup(args.domainId, args.groupId,resultHandler);
       }
     }
 
@@ -5240,7 +5335,7 @@
       }
 
       public void start(I iface, addUsersToGroup_args args, org.apache.thrift.async.AsyncMethodCallback<Boolean> resultHandler) throws TException {
-        iface.addUsersToGroup(args.userIds, args.groupId,resultHandler);
+        iface.addUsersToGroup(args.domainId, args.userIds, args.groupId,resultHandler);
       }
     }
 
@@ -5298,7 +5393,7 @@
       }
 
       public void start(I iface, removeUsersFromGroup_args args, org.apache.thrift.async.AsyncMethodCallback<Boolean> resultHandler) throws TException {
-        iface.removeUsersFromGroup(args.userIds, args.groupId,resultHandler);
+        iface.removeUsersFromGroup(args.domainId, args.userIds, args.groupId,resultHandler);
       }
     }
 
@@ -5355,7 +5450,7 @@
       }
 
       public void start(I iface, getGroupMembersOfTypeUser_args args, org.apache.thrift.async.AsyncMethodCallback<List<org.apache.airavata.sharing.registry.models.User>> resultHandler) throws TException {
-        iface.getGroupMembersOfTypeUser(args.groupId, args.offset, args.limit,resultHandler);
+        iface.getGroupMembersOfTypeUser(args.domainId, args.groupId, args.offset, args.limit,resultHandler);
       }
     }
 
@@ -5412,7 +5507,7 @@
       }
 
       public void start(I iface, getGroupMembersOfTypeGroup_args args, org.apache.thrift.async.AsyncMethodCallback<List<org.apache.airavata.sharing.registry.models.UserGroup>> resultHandler) throws TException {
-        iface.getGroupMembersOfTypeGroup(args.groupId, args.offset, args.limit,resultHandler);
+        iface.getGroupMembersOfTypeGroup(args.domainId, args.groupId, args.offset, args.limit,resultHandler);
       }
     }
 
@@ -5470,7 +5565,7 @@
       }
 
       public void start(I iface, addChildGroupsToParentGroup_args args, org.apache.thrift.async.AsyncMethodCallback<Boolean> resultHandler) throws TException {
-        iface.addChildGroupsToParentGroup(args.childIds, args.groupId,resultHandler);
+        iface.addChildGroupsToParentGroup(args.domainId, args.childIds, args.groupId,resultHandler);
       }
     }
 
@@ -5528,7 +5623,7 @@
       }
 
       public void start(I iface, removeChildGroupFromParentGroup_args args, org.apache.thrift.async.AsyncMethodCallback<Boolean> resultHandler) throws TException {
-        iface.removeChildGroupFromParentGroup(args.childId, args.groupId,resultHandler);
+        iface.removeChildGroupFromParentGroup(args.domainId, args.childId, args.groupId,resultHandler);
       }
     }
 
@@ -5701,7 +5796,7 @@
       }
 
       public void start(I iface, deleteEntityType_args args, org.apache.thrift.async.AsyncMethodCallback<Boolean> resultHandler) throws TException {
-        iface.deleteEntityType(args.entityTypeId,resultHandler);
+        iface.deleteEntityType(args.domainId, args.entityTypeId,resultHandler);
       }
     }
 
@@ -5758,7 +5853,7 @@
       }
 
       public void start(I iface, getEntityType_args args, org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.sharing.registry.models.EntityType> resultHandler) throws TException {
-        iface.getEntityType(args.entityTypeId,resultHandler);
+        iface.getEntityType(args.domainId, args.entityTypeId,resultHandler);
       }
     }
 
@@ -5988,7 +6083,7 @@
       }
 
       public void start(I iface, deleteEntity_args args, org.apache.thrift.async.AsyncMethodCallback<Boolean> resultHandler) throws TException {
-        iface.deleteEntity(args.entityId,resultHandler);
+        iface.deleteEntity(args.domainId, args.entityId,resultHandler);
       }
     }
 
@@ -6045,7 +6140,7 @@
       }
 
       public void start(I iface, getEntity_args args, org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.sharing.registry.models.Entity> resultHandler) throws TException {
-        iface.getEntity(args.entityId,resultHandler);
+        iface.getEntity(args.domainId, args.entityId,resultHandler);
       }
     }
 
@@ -6102,7 +6197,7 @@
       }
 
       public void start(I iface, searchEntities_args args, org.apache.thrift.async.AsyncMethodCallback<List<org.apache.airavata.sharing.registry.models.Entity>> resultHandler) throws TException {
-        iface.searchEntities(args.userId, args.entityTypeId, args.filters, args.offset, args.limit,resultHandler);
+        iface.searchEntities(args.domainId, args.userId, args.entityTypeId, args.filters, args.offset, args.limit,resultHandler);
       }
     }
 
@@ -6159,7 +6254,7 @@
       }
 
       public void start(I iface, getListOfSharedUsers_args args, org.apache.thrift.async.AsyncMethodCallback<List<org.apache.airavata.sharing.registry.models.User>> resultHandler) throws TException {
-        iface.getListOfSharedUsers(args.entityId, args.permissionTypeId,resultHandler);
+        iface.getListOfSharedUsers(args.domainId, args.entityId, args.permissionTypeId,resultHandler);
       }
     }
 
@@ -6216,7 +6311,7 @@
       }
 
       public void start(I iface, getListOfSharedGroups_args args, org.apache.thrift.async.AsyncMethodCallback<List<org.apache.airavata.sharing.registry.models.UserGroup>> resultHandler) throws TException {
-        iface.getListOfSharedGroups(args.entityId, args.permissionTypeId,resultHandler);
+        iface.getListOfSharedGroups(args.domainId, args.entityId, args.permissionTypeId,resultHandler);
       }
     }
 
@@ -6389,7 +6484,7 @@
       }
 
       public void start(I iface, deletePermissionType_args args, org.apache.thrift.async.AsyncMethodCallback<Boolean> resultHandler) throws TException {
-        iface.deletePermissionType(args.entityTypeId,resultHandler);
+        iface.deletePermissionType(args.domainId, args.permissionTypeId,resultHandler);
       }
     }
 
@@ -6446,7 +6541,7 @@
       }
 
       public void start(I iface, getPermissionType_args args, org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.sharing.registry.models.PermissionType> resultHandler) throws TException {
-        iface.getPermissionType(args.permissionTypeId,resultHandler);
+        iface.getPermissionType(args.domainId, args.permissionTypeId,resultHandler);
       }
     }
 
@@ -12730,7 +12825,8 @@
   public static class deleteUser_args implements org.apache.thrift.TBase<deleteUser_args, deleteUser_args._Fields>, java.io.Serializable, Cloneable, Comparable<deleteUser_args>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("deleteUser_args");
 
-    private static final org.apache.thrift.protocol.TField USER_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("userId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField USER_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("userId", org.apache.thrift.protocol.TType.STRING, (short)2);
 
     private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
     static {
@@ -12738,11 +12834,13 @@
       schemes.put(TupleScheme.class, new deleteUser_argsTupleSchemeFactory());
     }
 
+    public String domainId; // required
     public String userId; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-      USER_ID((short)1, "userId");
+      DOMAIN_ID((short)1, "domainId"),
+      USER_ID((short)2, "userId");
 
       private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -12757,7 +12855,9 @@
        */
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
-          case 1: // USER_ID
+          case 1: // DOMAIN_ID
+            return DOMAIN_ID;
+          case 2: // USER_ID
             return USER_ID;
           default:
             return null;
@@ -12802,6 +12902,8 @@
     public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.USER_ID, new org.apache.thrift.meta_data.FieldMetaData("userId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       metaDataMap = Collections.unmodifiableMap(tmpMap);
@@ -12812,9 +12914,11 @@
     }
 
     public deleteUser_args(
+      String domainId,
       String userId)
     {
       this();
+      this.domainId = domainId;
       this.userId = userId;
     }
 
@@ -12822,6 +12926,9 @@
      * Performs a deep copy on <i>other</i>.
      */
     public deleteUser_args(deleteUser_args other) {
+      if (other.isSetDomainId()) {
+        this.domainId = other.domainId;
+      }
       if (other.isSetUserId()) {
         this.userId = other.userId;
       }
@@ -12833,9 +12940,34 @@
 
     @Override
     public void clear() {
+      this.domainId = null;
       this.userId = null;
     }
 
+    public String getDomainId() {
+      return this.domainId;
+    }
+
+    public deleteUser_args setDomainId(String domainId) {
+      this.domainId = domainId;
+      return this;
+    }
+
+    public void unsetDomainId() {
+      this.domainId = null;
+    }
+
+    /** Returns true if field domainId is set (has been assigned a value) and false otherwise */
+    public boolean isSetDomainId() {
+      return this.domainId != null;
+    }
+
+    public void setDomainIdIsSet(boolean value) {
+      if (!value) {
+        this.domainId = null;
+      }
+    }
+
     public String getUserId() {
       return this.userId;
     }
@@ -12862,6 +12994,14 @@
 
     public void setFieldValue(_Fields field, Object value) {
       switch (field) {
+      case DOMAIN_ID:
+        if (value == null) {
+          unsetDomainId();
+        } else {
+          setDomainId((String)value);
+        }
+        break;
+
       case USER_ID:
         if (value == null) {
           unsetUserId();
@@ -12875,6 +13015,9 @@
 
     public Object getFieldValue(_Fields field) {
       switch (field) {
+      case DOMAIN_ID:
+        return getDomainId();
+
       case USER_ID:
         return getUserId();
 
@@ -12889,6 +13032,8 @@
       }
 
       switch (field) {
+      case DOMAIN_ID:
+        return isSetDomainId();
       case USER_ID:
         return isSetUserId();
       }
@@ -12908,6 +13053,15 @@
       if (that == null)
         return false;
 
+      boolean this_present_domainId = true && this.isSetDomainId();
+      boolean that_present_domainId = true && that.isSetDomainId();
+      if (this_present_domainId || that_present_domainId) {
+        if (!(this_present_domainId && that_present_domainId))
+          return false;
+        if (!this.domainId.equals(that.domainId))
+          return false;
+      }
+
       boolean this_present_userId = true && this.isSetUserId();
       boolean that_present_userId = true && that.isSetUserId();
       if (this_present_userId || that_present_userId) {
@@ -12924,6 +13078,11 @@
     public int hashCode() {
       List<Object> list = new ArrayList<Object>();
 
+      boolean present_domainId = true && (isSetDomainId());
+      list.add(present_domainId);
+      if (present_domainId)
+        list.add(domainId);
+
       boolean present_userId = true && (isSetUserId());
       list.add(present_userId);
       if (present_userId)
@@ -12940,6 +13099,16 @@
 
       int lastComparison = 0;
 
+      lastComparison = Boolean.valueOf(isSetDomainId()).compareTo(other.isSetDomainId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetDomainId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.domainId, other.domainId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       lastComparison = Boolean.valueOf(isSetUserId()).compareTo(other.isSetUserId());
       if (lastComparison != 0) {
         return lastComparison;
@@ -12970,6 +13139,14 @@
       StringBuilder sb = new StringBuilder("deleteUser_args(");
       boolean first = true;
 
+      sb.append("domainId:");
+      if (this.domainId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.domainId);
+      }
+      first = false;
+      if (!first) sb.append(", ");
       sb.append("userId:");
       if (this.userId == null) {
         sb.append("null");
@@ -12983,6 +13160,9 @@
 
     public void validate() throws org.apache.thrift.TException {
       // check for required fields
+      if (domainId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'domainId' was not present! Struct: " + toString());
+      }
       if (userId == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'userId' was not present! Struct: " + toString());
       }
@@ -13023,7 +13203,15 @@
             break;
           }
           switch (schemeField.id) {
-            case 1: // USER_ID
+            case 1: // DOMAIN_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.domainId = iprot.readString();
+                struct.setDomainIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // USER_ID
               if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
                 struct.userId = iprot.readString();
                 struct.setUserIdIsSet(true);
@@ -13046,6 +13234,11 @@
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.domainId != null) {
+          oprot.writeFieldBegin(DOMAIN_ID_FIELD_DESC);
+          oprot.writeString(struct.domainId);
+          oprot.writeFieldEnd();
+        }
         if (struct.userId != null) {
           oprot.writeFieldBegin(USER_ID_FIELD_DESC);
           oprot.writeString(struct.userId);
@@ -13068,12 +13261,15 @@
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, deleteUser_args struct) throws org.apache.thrift.TException {
         TTupleProtocol oprot = (TTupleProtocol) prot;
+        oprot.writeString(struct.domainId);
         oprot.writeString(struct.userId);
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, deleteUser_args struct) throws org.apache.thrift.TException {
         TTupleProtocol iprot = (TTupleProtocol) prot;
+        struct.domainId = iprot.readString();
+        struct.setDomainIdIsSet(true);
         struct.userId = iprot.readString();
         struct.setUserIdIsSet(true);
       }
@@ -13552,7 +13748,8 @@
   public static class getUser_args implements org.apache.thrift.TBase<getUser_args, getUser_args._Fields>, java.io.Serializable, Cloneable, Comparable<getUser_args>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getUser_args");
 
-    private static final org.apache.thrift.protocol.TField USER_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("userId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField USER_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("userId", org.apache.thrift.protocol.TType.STRING, (short)2);
 
     private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
     static {
@@ -13560,11 +13757,13 @@
       schemes.put(TupleScheme.class, new getUser_argsTupleSchemeFactory());
     }
 
+    public String domainId; // required
     public String userId; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-      USER_ID((short)1, "userId");
+      DOMAIN_ID((short)1, "domainId"),
+      USER_ID((short)2, "userId");
 
       private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -13579,7 +13778,9 @@
        */
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
-          case 1: // USER_ID
+          case 1: // DOMAIN_ID
+            return DOMAIN_ID;
+          case 2: // USER_ID
             return USER_ID;
           default:
             return null;
@@ -13624,6 +13825,8 @@
     public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.USER_ID, new org.apache.thrift.meta_data.FieldMetaData("userId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       metaDataMap = Collections.unmodifiableMap(tmpMap);
@@ -13634,9 +13837,11 @@
     }
 
     public getUser_args(
+      String domainId,
       String userId)
     {
       this();
+      this.domainId = domainId;
       this.userId = userId;
     }
 
@@ -13644,6 +13849,9 @@
      * Performs a deep copy on <i>other</i>.
      */
     public getUser_args(getUser_args other) {
+      if (other.isSetDomainId()) {
+        this.domainId = other.domainId;
+      }
       if (other.isSetUserId()) {
         this.userId = other.userId;
       }
@@ -13655,9 +13863,34 @@
 
     @Override
     public void clear() {
+      this.domainId = null;
       this.userId = null;
     }
 
+    public String getDomainId() {
+      return this.domainId;
+    }
+
+    public getUser_args setDomainId(String domainId) {
+      this.domainId = domainId;
+      return this;
+    }
+
+    public void unsetDomainId() {
+      this.domainId = null;
+    }
+
+    /** Returns true if field domainId is set (has been assigned a value) and false otherwise */
+    public boolean isSetDomainId() {
+      return this.domainId != null;
+    }
+
+    public void setDomainIdIsSet(boolean value) {
+      if (!value) {
+        this.domainId = null;
+      }
+    }
+
     public String getUserId() {
       return this.userId;
     }
@@ -13684,6 +13917,14 @@
 
     public void setFieldValue(_Fields field, Object value) {
       switch (field) {
+      case DOMAIN_ID:
+        if (value == null) {
+          unsetDomainId();
+        } else {
+          setDomainId((String)value);
+        }
+        break;
+
       case USER_ID:
         if (value == null) {
           unsetUserId();
@@ -13697,6 +13938,9 @@
 
     public Object getFieldValue(_Fields field) {
       switch (field) {
+      case DOMAIN_ID:
+        return getDomainId();
+
       case USER_ID:
         return getUserId();
 
@@ -13711,6 +13955,8 @@
       }
 
       switch (field) {
+      case DOMAIN_ID:
+        return isSetDomainId();
       case USER_ID:
         return isSetUserId();
       }
@@ -13730,6 +13976,15 @@
       if (that == null)
         return false;
 
+      boolean this_present_domainId = true && this.isSetDomainId();
+      boolean that_present_domainId = true && that.isSetDomainId();
+      if (this_present_domainId || that_present_domainId) {
+        if (!(this_present_domainId && that_present_domainId))
+          return false;
+        if (!this.domainId.equals(that.domainId))
+          return false;
+      }
+
       boolean this_present_userId = true && this.isSetUserId();
       boolean that_present_userId = true && that.isSetUserId();
       if (this_present_userId || that_present_userId) {
@@ -13746,6 +14001,11 @@
     public int hashCode() {
       List<Object> list = new ArrayList<Object>();
 
+      boolean present_domainId = true && (isSetDomainId());
+      list.add(present_domainId);
+      if (present_domainId)
+        list.add(domainId);
+
       boolean present_userId = true && (isSetUserId());
       list.add(present_userId);
       if (present_userId)
@@ -13762,6 +14022,16 @@
 
       int lastComparison = 0;
 
+      lastComparison = Boolean.valueOf(isSetDomainId()).compareTo(other.isSetDomainId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetDomainId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.domainId, other.domainId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       lastComparison = Boolean.valueOf(isSetUserId()).compareTo(other.isSetUserId());
       if (lastComparison != 0) {
         return lastComparison;
@@ -13792,6 +14062,14 @@
       StringBuilder sb = new StringBuilder("getUser_args(");
       boolean first = true;
 
+      sb.append("domainId:");
+      if (this.domainId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.domainId);
+      }
+      first = false;
+      if (!first) sb.append(", ");
       sb.append("userId:");
       if (this.userId == null) {
         sb.append("null");
@@ -13805,6 +14083,9 @@
 
     public void validate() throws org.apache.thrift.TException {
       // check for required fields
+      if (domainId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'domainId' was not present! Struct: " + toString());
+      }
       if (userId == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'userId' was not present! Struct: " + toString());
       }
@@ -13845,7 +14126,15 @@
             break;
           }
           switch (schemeField.id) {
-            case 1: // USER_ID
+            case 1: // DOMAIN_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.domainId = iprot.readString();
+                struct.setDomainIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // USER_ID
               if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
                 struct.userId = iprot.readString();
                 struct.setUserIdIsSet(true);
@@ -13868,6 +14157,11 @@
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.domainId != null) {
+          oprot.writeFieldBegin(DOMAIN_ID_FIELD_DESC);
+          oprot.writeString(struct.domainId);
+          oprot.writeFieldEnd();
+        }
         if (struct.userId != null) {
           oprot.writeFieldBegin(USER_ID_FIELD_DESC);
           oprot.writeString(struct.userId);
@@ -13890,12 +14184,15 @@
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, getUser_args struct) throws org.apache.thrift.TException {
         TTupleProtocol oprot = (TTupleProtocol) prot;
+        oprot.writeString(struct.domainId);
         oprot.writeString(struct.userId);
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, getUser_args struct) throws org.apache.thrift.TException {
         TTupleProtocol iprot = (TTupleProtocol) prot;
+        struct.domainId = iprot.readString();
+        struct.setDomainIdIsSet(true);
         struct.userId = iprot.readString();
         struct.setUserIdIsSet(true);
       }
@@ -17105,7 +17402,8 @@
   public static class deleteGroup_args implements org.apache.thrift.TBase<deleteGroup_args, deleteGroup_args._Fields>, java.io.Serializable, Cloneable, Comparable<deleteGroup_args>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("deleteGroup_args");
 
-    private static final org.apache.thrift.protocol.TField GROUP_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("groupId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField GROUP_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("groupId", org.apache.thrift.protocol.TType.STRING, (short)2);
 
     private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
     static {
@@ -17113,11 +17411,13 @@
       schemes.put(TupleScheme.class, new deleteGroup_argsTupleSchemeFactory());
     }
 
+    public String domainId; // required
     public String groupId; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-      GROUP_ID((short)1, "groupId");
+      DOMAIN_ID((short)1, "domainId"),
+      GROUP_ID((short)2, "groupId");
 
       private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -17132,7 +17432,9 @@
        */
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
-          case 1: // GROUP_ID
+          case 1: // DOMAIN_ID
+            return DOMAIN_ID;
+          case 2: // GROUP_ID
             return GROUP_ID;
           default:
             return null;
@@ -17177,6 +17479,8 @@
     public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.GROUP_ID, new org.apache.thrift.meta_data.FieldMetaData("groupId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       metaDataMap = Collections.unmodifiableMap(tmpMap);
@@ -17187,9 +17491,11 @@
     }
 
     public deleteGroup_args(
+      String domainId,
       String groupId)
     {
       this();
+      this.domainId = domainId;
       this.groupId = groupId;
     }
 
@@ -17197,6 +17503,9 @@
      * Performs a deep copy on <i>other</i>.
      */
     public deleteGroup_args(deleteGroup_args other) {
+      if (other.isSetDomainId()) {
+        this.domainId = other.domainId;
+      }
       if (other.isSetGroupId()) {
         this.groupId = other.groupId;
       }
@@ -17208,9 +17517,34 @@
 
     @Override
     public void clear() {
+      this.domainId = null;
       this.groupId = null;
     }
 
+    public String getDomainId() {
+      return this.domainId;
+    }
+
+    public deleteGroup_args setDomainId(String domainId) {
+      this.domainId = domainId;
+      return this;
+    }
+
+    public void unsetDomainId() {
+      this.domainId = null;
+    }
+
+    /** Returns true if field domainId is set (has been assigned a value) and false otherwise */
+    public boolean isSetDomainId() {
+      return this.domainId != null;
+    }
+
+    public void setDomainIdIsSet(boolean value) {
+      if (!value) {
+        this.domainId = null;
+      }
+    }
+
     public String getGroupId() {
       return this.groupId;
     }
@@ -17237,6 +17571,14 @@
 
     public void setFieldValue(_Fields field, Object value) {
       switch (field) {
+      case DOMAIN_ID:
+        if (value == null) {
+          unsetDomainId();
+        } else {
+          setDomainId((String)value);
+        }
+        break;
+
       case GROUP_ID:
         if (value == null) {
           unsetGroupId();
@@ -17250,6 +17592,9 @@
 
     public Object getFieldValue(_Fields field) {
       switch (field) {
+      case DOMAIN_ID:
+        return getDomainId();
+
       case GROUP_ID:
         return getGroupId();
 
@@ -17264,6 +17609,8 @@
       }
 
       switch (field) {
+      case DOMAIN_ID:
+        return isSetDomainId();
       case GROUP_ID:
         return isSetGroupId();
       }
@@ -17283,6 +17630,15 @@
       if (that == null)
         return false;
 
+      boolean this_present_domainId = true && this.isSetDomainId();
+      boolean that_present_domainId = true && that.isSetDomainId();
+      if (this_present_domainId || that_present_domainId) {
+        if (!(this_present_domainId && that_present_domainId))
+          return false;
+        if (!this.domainId.equals(that.domainId))
+          return false;
+      }
+
       boolean this_present_groupId = true && this.isSetGroupId();
       boolean that_present_groupId = true && that.isSetGroupId();
       if (this_present_groupId || that_present_groupId) {
@@ -17299,6 +17655,11 @@
     public int hashCode() {
       List<Object> list = new ArrayList<Object>();
 
+      boolean present_domainId = true && (isSetDomainId());
+      list.add(present_domainId);
+      if (present_domainId)
+        list.add(domainId);
+
       boolean present_groupId = true && (isSetGroupId());
       list.add(present_groupId);
       if (present_groupId)
@@ -17315,6 +17676,16 @@
 
       int lastComparison = 0;
 
+      lastComparison = Boolean.valueOf(isSetDomainId()).compareTo(other.isSetDomainId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetDomainId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.domainId, other.domainId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       lastComparison = Boolean.valueOf(isSetGroupId()).compareTo(other.isSetGroupId());
       if (lastComparison != 0) {
         return lastComparison;
@@ -17345,6 +17716,14 @@
       StringBuilder sb = new StringBuilder("deleteGroup_args(");
       boolean first = true;
 
+      sb.append("domainId:");
+      if (this.domainId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.domainId);
+      }
+      first = false;
+      if (!first) sb.append(", ");
       sb.append("groupId:");
       if (this.groupId == null) {
         sb.append("null");
@@ -17358,6 +17737,9 @@
 
     public void validate() throws org.apache.thrift.TException {
       // check for required fields
+      if (domainId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'domainId' was not present! Struct: " + toString());
+      }
       if (groupId == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'groupId' was not present! Struct: " + toString());
       }
@@ -17398,7 +17780,15 @@
             break;
           }
           switch (schemeField.id) {
-            case 1: // GROUP_ID
+            case 1: // DOMAIN_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.domainId = iprot.readString();
+                struct.setDomainIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // GROUP_ID
               if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
                 struct.groupId = iprot.readString();
                 struct.setGroupIdIsSet(true);
@@ -17421,6 +17811,11 @@
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.domainId != null) {
+          oprot.writeFieldBegin(DOMAIN_ID_FIELD_DESC);
+          oprot.writeString(struct.domainId);
+          oprot.writeFieldEnd();
+        }
         if (struct.groupId != null) {
           oprot.writeFieldBegin(GROUP_ID_FIELD_DESC);
           oprot.writeString(struct.groupId);
@@ -17443,12 +17838,15 @@
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, deleteGroup_args struct) throws org.apache.thrift.TException {
         TTupleProtocol oprot = (TTupleProtocol) prot;
+        oprot.writeString(struct.domainId);
         oprot.writeString(struct.groupId);
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, deleteGroup_args struct) throws org.apache.thrift.TException {
         TTupleProtocol iprot = (TTupleProtocol) prot;
+        struct.domainId = iprot.readString();
+        struct.setDomainIdIsSet(true);
         struct.groupId = iprot.readString();
         struct.setGroupIdIsSet(true);
       }
@@ -17927,7 +18325,8 @@
   public static class getGroup_args implements org.apache.thrift.TBase<getGroup_args, getGroup_args._Fields>, java.io.Serializable, Cloneable, Comparable<getGroup_args>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getGroup_args");
 
-    private static final org.apache.thrift.protocol.TField GROUP_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("groupId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField GROUP_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("groupId", org.apache.thrift.protocol.TType.STRING, (short)2);
 
     private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
     static {
@@ -17935,11 +18334,13 @@
       schemes.put(TupleScheme.class, new getGroup_argsTupleSchemeFactory());
     }
 
+    public String domainId; // required
     public String groupId; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-      GROUP_ID((short)1, "groupId");
+      DOMAIN_ID((short)1, "domainId"),
+      GROUP_ID((short)2, "groupId");
 
       private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -17954,7 +18355,9 @@
        */
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
-          case 1: // GROUP_ID
+          case 1: // DOMAIN_ID
+            return DOMAIN_ID;
+          case 2: // GROUP_ID
             return GROUP_ID;
           default:
             return null;
@@ -17999,6 +18402,8 @@
     public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.GROUP_ID, new org.apache.thrift.meta_data.FieldMetaData("groupId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       metaDataMap = Collections.unmodifiableMap(tmpMap);
@@ -18009,9 +18414,11 @@
     }
 
     public getGroup_args(
+      String domainId,
       String groupId)
     {
       this();
+      this.domainId = domainId;
       this.groupId = groupId;
     }
 
@@ -18019,6 +18426,9 @@
      * Performs a deep copy on <i>other</i>.
      */
     public getGroup_args(getGroup_args other) {
+      if (other.isSetDomainId()) {
+        this.domainId = other.domainId;
+      }
       if (other.isSetGroupId()) {
         this.groupId = other.groupId;
       }
@@ -18030,9 +18440,34 @@
 
     @Override
     public void clear() {
+      this.domainId = null;
       this.groupId = null;
     }
 
+    public String getDomainId() {
+      return this.domainId;
+    }
+
+    public getGroup_args setDomainId(String domainId) {
+      this.domainId = domainId;
+      return this;
+    }
+
+    public void unsetDomainId() {
+      this.domainId = null;
+    }
+
+    /** Returns true if field domainId is set (has been assigned a value) and false otherwise */
+    public boolean isSetDomainId() {
+      return this.domainId != null;
+    }
+
+    public void setDomainIdIsSet(boolean value) {
+      if (!value) {
+        this.domainId = null;
+      }
+    }
+
     public String getGroupId() {
       return this.groupId;
     }
@@ -18059,6 +18494,14 @@
 
     public void setFieldValue(_Fields field, Object value) {
       switch (field) {
+      case DOMAIN_ID:
+        if (value == null) {
+          unsetDomainId();
+        } else {
+          setDomainId((String)value);
+        }
+        break;
+
       case GROUP_ID:
         if (value == null) {
           unsetGroupId();
@@ -18072,6 +18515,9 @@
 
     public Object getFieldValue(_Fields field) {
       switch (field) {
+      case DOMAIN_ID:
+        return getDomainId();
+
       case GROUP_ID:
         return getGroupId();
 
@@ -18086,6 +18532,8 @@
       }
 
       switch (field) {
+      case DOMAIN_ID:
+        return isSetDomainId();
       case GROUP_ID:
         return isSetGroupId();
       }
@@ -18105,6 +18553,15 @@
       if (that == null)
         return false;
 
+      boolean this_present_domainId = true && this.isSetDomainId();
+      boolean that_present_domainId = true && that.isSetDomainId();
+      if (this_present_domainId || that_present_domainId) {
+        if (!(this_present_domainId && that_present_domainId))
+          return false;
+        if (!this.domainId.equals(that.domainId))
+          return false;
+      }
+
       boolean this_present_groupId = true && this.isSetGroupId();
       boolean that_present_groupId = true && that.isSetGroupId();
       if (this_present_groupId || that_present_groupId) {
@@ -18121,6 +18578,11 @@
     public int hashCode() {
       List<Object> list = new ArrayList<Object>();
 
+      boolean present_domainId = true && (isSetDomainId());
+      list.add(present_domainId);
+      if (present_domainId)
+        list.add(domainId);
+
       boolean present_groupId = true && (isSetGroupId());
       list.add(present_groupId);
       if (present_groupId)
@@ -18137,6 +18599,16 @@
 
       int lastComparison = 0;
 
+      lastComparison = Boolean.valueOf(isSetDomainId()).compareTo(other.isSetDomainId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetDomainId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.domainId, other.domainId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       lastComparison = Boolean.valueOf(isSetGroupId()).compareTo(other.isSetGroupId());
       if (lastComparison != 0) {
         return lastComparison;
@@ -18167,6 +18639,14 @@
       StringBuilder sb = new StringBuilder("getGroup_args(");
       boolean first = true;
 
+      sb.append("domainId:");
+      if (this.domainId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.domainId);
+      }
+      first = false;
+      if (!first) sb.append(", ");
       sb.append("groupId:");
       if (this.groupId == null) {
         sb.append("null");
@@ -18180,6 +18660,9 @@
 
     public void validate() throws org.apache.thrift.TException {
       // check for required fields
+      if (domainId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'domainId' was not present! Struct: " + toString());
+      }
       if (groupId == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'groupId' was not present! Struct: " + toString());
       }
@@ -18220,7 +18703,15 @@
             break;
           }
           switch (schemeField.id) {
-            case 1: // GROUP_ID
+            case 1: // DOMAIN_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.domainId = iprot.readString();
+                struct.setDomainIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // GROUP_ID
               if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
                 struct.groupId = iprot.readString();
                 struct.setGroupIdIsSet(true);
@@ -18243,6 +18734,11 @@
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.domainId != null) {
+          oprot.writeFieldBegin(DOMAIN_ID_FIELD_DESC);
+          oprot.writeString(struct.domainId);
+          oprot.writeFieldEnd();
+        }
         if (struct.groupId != null) {
           oprot.writeFieldBegin(GROUP_ID_FIELD_DESC);
           oprot.writeString(struct.groupId);
@@ -18265,12 +18761,15 @@
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, getGroup_args struct) throws org.apache.thrift.TException {
         TTupleProtocol oprot = (TTupleProtocol) prot;
+        oprot.writeString(struct.domainId);
         oprot.writeString(struct.groupId);
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, getGroup_args struct) throws org.apache.thrift.TException {
         TTupleProtocol iprot = (TTupleProtocol) prot;
+        struct.domainId = iprot.readString();
+        struct.setDomainIdIsSet(true);
         struct.groupId = iprot.readString();
         struct.setGroupIdIsSet(true);
       }
@@ -19719,8 +20218,9 @@
   public static class addUsersToGroup_args implements org.apache.thrift.TBase<addUsersToGroup_args, addUsersToGroup_args._Fields>, java.io.Serializable, Cloneable, Comparable<addUsersToGroup_args>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("addUsersToGroup_args");
 
-    private static final org.apache.thrift.protocol.TField USER_IDS_FIELD_DESC = new org.apache.thrift.protocol.TField("userIds", org.apache.thrift.protocol.TType.LIST, (short)1);
-    private static final org.apache.thrift.protocol.TField GROUP_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("groupId", org.apache.thrift.protocol.TType.STRING, (short)2);
+    private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField USER_IDS_FIELD_DESC = new org.apache.thrift.protocol.TField("userIds", org.apache.thrift.protocol.TType.LIST, (short)2);
+    private static final org.apache.thrift.protocol.TField GROUP_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("groupId", org.apache.thrift.protocol.TType.STRING, (short)3);
 
     private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
     static {
@@ -19728,13 +20228,15 @@
       schemes.put(TupleScheme.class, new addUsersToGroup_argsTupleSchemeFactory());
     }
 
+    public String domainId; // required
     public List<String> userIds; // required
     public String groupId; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-      USER_IDS((short)1, "userIds"),
-      GROUP_ID((short)2, "groupId");
+      DOMAIN_ID((short)1, "domainId"),
+      USER_IDS((short)2, "userIds"),
+      GROUP_ID((short)3, "groupId");
 
       private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -19749,9 +20251,11 @@
        */
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
-          case 1: // USER_IDS
+          case 1: // DOMAIN_ID
+            return DOMAIN_ID;
+          case 2: // USER_IDS
             return USER_IDS;
-          case 2: // GROUP_ID
+          case 3: // GROUP_ID
             return GROUP_ID;
           default:
             return null;
@@ -19796,6 +20300,8 @@
     public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.USER_IDS, new org.apache.thrift.meta_data.FieldMetaData("userIds", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
               new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING))));
@@ -19809,10 +20315,12 @@
     }
 
     public addUsersToGroup_args(
+      String domainId,
       List<String> userIds,
       String groupId)
     {
       this();
+      this.domainId = domainId;
       this.userIds = userIds;
       this.groupId = groupId;
     }
@@ -19821,6 +20329,9 @@
      * Performs a deep copy on <i>other</i>.
      */
     public addUsersToGroup_args(addUsersToGroup_args other) {
+      if (other.isSetDomainId()) {
+        this.domainId = other.domainId;
+      }
       if (other.isSetUserIds()) {
         List<String> __this__userIds = new ArrayList<String>(other.userIds);
         this.userIds = __this__userIds;
@@ -19836,10 +20347,35 @@
 
     @Override
     public void clear() {
+      this.domainId = null;
       this.userIds = null;
       this.groupId = null;
     }
 
+    public String getDomainId() {
+      return this.domainId;
+    }
+
+    public addUsersToGroup_args setDomainId(String domainId) {
+      this.domainId = domainId;
+      return this;
+    }
+
+    public void unsetDomainId() {
+      this.domainId = null;
+    }
+
+    /** Returns true if field domainId is set (has been assigned a value) and false otherwise */
+    public boolean isSetDomainId() {
+      return this.domainId != null;
+    }
+
+    public void setDomainIdIsSet(boolean value) {
+      if (!value) {
+        this.domainId = null;
+      }
+    }
+
     public int getUserIdsSize() {
       return (this.userIds == null) ? 0 : this.userIds.size();
     }
@@ -19905,6 +20441,14 @@
 
     public void setFieldValue(_Fields field, Object value) {
       switch (field) {
+      case DOMAIN_ID:
+        if (value == null) {
+          unsetDomainId();
+        } else {
+          setDomainId((String)value);
+        }
+        break;
+
       case USER_IDS:
         if (value == null) {
           unsetUserIds();
@@ -19926,6 +20470,9 @@
 
     public Object getFieldValue(_Fields field) {
       switch (field) {
+      case DOMAIN_ID:
+        return getDomainId();
+
       case USER_IDS:
         return getUserIds();
 
@@ -19943,6 +20490,8 @@
       }
 
       switch (field) {
+      case DOMAIN_ID:
+        return isSetDomainId();
       case USER_IDS:
         return isSetUserIds();
       case GROUP_ID:
@@ -19964,6 +20513,15 @@
       if (that == null)
         return false;
 
+      boolean this_present_domainId = true && this.isSetDomainId();
+      boolean that_present_domainId = true && that.isSetDomainId();
+      if (this_present_domainId || that_present_domainId) {
+        if (!(this_present_domainId && that_present_domainId))
+          return false;
+        if (!this.domainId.equals(that.domainId))
+          return false;
+      }
+
       boolean this_present_userIds = true && this.isSetUserIds();
       boolean that_present_userIds = true && that.isSetUserIds();
       if (this_present_userIds || that_present_userIds) {
@@ -19989,6 +20547,11 @@
     public int hashCode() {
       List<Object> list = new ArrayList<Object>();
 
+      boolean present_domainId = true && (isSetDomainId());
+      list.add(present_domainId);
+      if (present_domainId)
+        list.add(domainId);
+
       boolean present_userIds = true && (isSetUserIds());
       list.add(present_userIds);
       if (present_userIds)
@@ -20010,6 +20573,16 @@
 
       int lastComparison = 0;
 
+      lastComparison = Boolean.valueOf(isSetDomainId()).compareTo(other.isSetDomainId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetDomainId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.domainId, other.domainId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       lastComparison = Boolean.valueOf(isSetUserIds()).compareTo(other.isSetUserIds());
       if (lastComparison != 0) {
         return lastComparison;
@@ -20050,6 +20623,14 @@
       StringBuilder sb = new StringBuilder("addUsersToGroup_args(");
       boolean first = true;
 
+      sb.append("domainId:");
+      if (this.domainId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.domainId);
+      }
+      first = false;
+      if (!first) sb.append(", ");
       sb.append("userIds:");
       if (this.userIds == null) {
         sb.append("null");
@@ -20071,6 +20652,9 @@
 
     public void validate() throws org.apache.thrift.TException {
       // check for required fields
+      if (domainId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'domainId' was not present! Struct: " + toString());
+      }
       if (userIds == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'userIds' was not present! Struct: " + toString());
       }
@@ -20114,7 +20698,15 @@
             break;
           }
           switch (schemeField.id) {
-            case 1: // USER_IDS
+            case 1: // DOMAIN_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.domainId = iprot.readString();
+                struct.setDomainIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // USER_IDS
               if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
                 {
                   org.apache.thrift.protocol.TList _list24 = iprot.readListBegin();
@@ -20132,7 +20724,7 @@
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
-            case 2: // GROUP_ID
+            case 3: // GROUP_ID
               if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
                 struct.groupId = iprot.readString();
                 struct.setGroupIdIsSet(true);
@@ -20155,6 +20747,11 @@
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.domainId != null) {
+          oprot.writeFieldBegin(DOMAIN_ID_FIELD_DESC);
+          oprot.writeString(struct.domainId);
+          oprot.writeFieldEnd();
+        }
         if (struct.userIds != null) {
           oprot.writeFieldBegin(USER_IDS_FIELD_DESC);
           {
@@ -20189,6 +20786,7 @@
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, addUsersToGroup_args struct) throws org.apache.thrift.TException {
         TTupleProtocol oprot = (TTupleProtocol) prot;
+        oprot.writeString(struct.domainId);
         {
           oprot.writeI32(struct.userIds.size());
           for (String _iter28 : struct.userIds)
@@ -20202,6 +20800,8 @@
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, addUsersToGroup_args struct) throws org.apache.thrift.TException {
         TTupleProtocol iprot = (TTupleProtocol) prot;
+        struct.domainId = iprot.readString();
+        struct.setDomainIdIsSet(true);
         {
           org.apache.thrift.protocol.TList _list29 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
           struct.userIds = new ArrayList<String>(_list29.size);
@@ -20691,8 +21291,9 @@
   public static class removeUsersFromGroup_args implements org.apache.thrift.TBase<removeUsersFromGroup_args, removeUsersFromGroup_args._Fields>, java.io.Serializable, Cloneable, Comparable<removeUsersFromGroup_args>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("removeUsersFromGroup_args");
 
-    private static final org.apache.thrift.protocol.TField USER_IDS_FIELD_DESC = new org.apache.thrift.protocol.TField("userIds", org.apache.thrift.protocol.TType.LIST, (short)1);
-    private static final org.apache.thrift.protocol.TField GROUP_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("groupId", org.apache.thrift.protocol.TType.STRING, (short)2);
+    private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField USER_IDS_FIELD_DESC = new org.apache.thrift.protocol.TField("userIds", org.apache.thrift.protocol.TType.LIST, (short)2);
+    private static final org.apache.thrift.protocol.TField GROUP_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("groupId", org.apache.thrift.protocol.TType.STRING, (short)3);
 
     private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
     static {
@@ -20700,13 +21301,15 @@
       schemes.put(TupleScheme.class, new removeUsersFromGroup_argsTupleSchemeFactory());
     }
 
+    public String domainId; // required
     public List<String> userIds; // required
     public String groupId; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-      USER_IDS((short)1, "userIds"),
-      GROUP_ID((short)2, "groupId");
+      DOMAIN_ID((short)1, "domainId"),
+      USER_IDS((short)2, "userIds"),
+      GROUP_ID((short)3, "groupId");
 
       private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -20721,9 +21324,11 @@
        */
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
-          case 1: // USER_IDS
+          case 1: // DOMAIN_ID
+            return DOMAIN_ID;
+          case 2: // USER_IDS
             return USER_IDS;
-          case 2: // GROUP_ID
+          case 3: // GROUP_ID
             return GROUP_ID;
           default:
             return null;
@@ -20768,6 +21373,8 @@
     public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.USER_IDS, new org.apache.thrift.meta_data.FieldMetaData("userIds", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
               new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING))));
@@ -20781,10 +21388,12 @@
     }
 
     public removeUsersFromGroup_args(
+      String domainId,
       List<String> userIds,
       String groupId)
     {
       this();
+      this.domainId = domainId;
       this.userIds = userIds;
       this.groupId = groupId;
     }
@@ -20793,6 +21402,9 @@
      * Performs a deep copy on <i>other</i>.
      */
     public removeUsersFromGroup_args(removeUsersFromGroup_args other) {
+      if (other.isSetDomainId()) {
+        this.domainId = other.domainId;
+      }
       if (other.isSetUserIds()) {
         List<String> __this__userIds = new ArrayList<String>(other.userIds);
         this.userIds = __this__userIds;
@@ -20808,10 +21420,35 @@
 
     @Override
     public void clear() {
+      this.domainId = null;
       this.userIds = null;
       this.groupId = null;
     }
 
+    public String getDomainId() {
+      return this.domainId;
+    }
+
+    public removeUsersFromGroup_args setDomainId(String domainId) {
+      this.domainId = domainId;
+      return this;
+    }
+
+    public void unsetDomainId() {
+      this.domainId = null;
+    }
+
+    /** Returns true if field domainId is set (has been assigned a value) and false otherwise */
+    public boolean isSetDomainId() {
+      return this.domainId != null;
+    }
+
+    public void setDomainIdIsSet(boolean value) {
+      if (!value) {
+        this.domainId = null;
+      }
+    }
+
     public int getUserIdsSize() {
       return (this.userIds == null) ? 0 : this.userIds.size();
     }
@@ -20877,6 +21514,14 @@
 
     public void setFieldValue(_Fields field, Object value) {
       switch (field) {
+      case DOMAIN_ID:
+        if (value == null) {
+          unsetDomainId();
+        } else {
+          setDomainId((String)value);
+        }
+        break;
+
       case USER_IDS:
         if (value == null) {
           unsetUserIds();
@@ -20898,6 +21543,9 @@
 
     public Object getFieldValue(_Fields field) {
       switch (field) {
+      case DOMAIN_ID:
+        return getDomainId();
+
       case USER_IDS:
         return getUserIds();
 
@@ -20915,6 +21563,8 @@
       }
 
       switch (field) {
+      case DOMAIN_ID:
+        return isSetDomainId();
       case USER_IDS:
         return isSetUserIds();
       case GROUP_ID:
@@ -20936,6 +21586,15 @@
       if (that == null)
         return false;
 
+      boolean this_present_domainId = true && this.isSetDomainId();
+      boolean that_present_domainId = true && that.isSetDomainId();
+      if (this_present_domainId || that_present_domainId) {
+        if (!(this_present_domainId && that_present_domainId))
+          return false;
+        if (!this.domainId.equals(that.domainId))
+          return false;
+      }
+
       boolean this_present_userIds = true && this.isSetUserIds();
       boolean that_present_userIds = true && that.isSetUserIds();
       if (this_present_userIds || that_present_userIds) {
@@ -20961,6 +21620,11 @@
     public int hashCode() {
       List<Object> list = new ArrayList<Object>();
 
+      boolean present_domainId = true && (isSetDomainId());
+      list.add(present_domainId);
+      if (present_domainId)
+        list.add(domainId);
+
       boolean present_userIds = true && (isSetUserIds());
       list.add(present_userIds);
       if (present_userIds)
@@ -20982,6 +21646,16 @@
 
       int lastComparison = 0;
 
+      lastComparison = Boolean.valueOf(isSetDomainId()).compareTo(other.isSetDomainId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetDomainId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.domainId, other.domainId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       lastComparison = Boolean.valueOf(isSetUserIds()).compareTo(other.isSetUserIds());
       if (lastComparison != 0) {
         return lastComparison;
@@ -21022,6 +21696,14 @@
       StringBuilder sb = new StringBuilder("removeUsersFromGroup_args(");
       boolean first = true;
 
+      sb.append("domainId:");
+      if (this.domainId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.domainId);
+      }
+      first = false;
+      if (!first) sb.append(", ");
       sb.append("userIds:");
       if (this.userIds == null) {
         sb.append("null");
@@ -21043,6 +21725,9 @@
 
     public void validate() throws org.apache.thrift.TException {
       // check for required fields
+      if (domainId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'domainId' was not present! Struct: " + toString());
+      }
       if (userIds == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'userIds' was not present! Struct: " + toString());
       }
@@ -21086,7 +21771,15 @@
             break;
           }
           switch (schemeField.id) {
-            case 1: // USER_IDS
+            case 1: // DOMAIN_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.domainId = iprot.readString();
+                struct.setDomainIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // USER_IDS
               if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
                 {
                   org.apache.thrift.protocol.TList _list32 = iprot.readListBegin();
@@ -21104,7 +21797,7 @@
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
-            case 2: // GROUP_ID
+            case 3: // GROUP_ID
               if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
                 struct.groupId = iprot.readString();
                 struct.setGroupIdIsSet(true);
@@ -21127,6 +21820,11 @@
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.domainId != null) {
+          oprot.writeFieldBegin(DOMAIN_ID_FIELD_DESC);
+          oprot.writeString(struct.domainId);
+          oprot.writeFieldEnd();
+        }
         if (struct.userIds != null) {
           oprot.writeFieldBegin(USER_IDS_FIELD_DESC);
           {
@@ -21161,6 +21859,7 @@
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, removeUsersFromGroup_args struct) throws org.apache.thrift.TException {
         TTupleProtocol oprot = (TTupleProtocol) prot;
+        oprot.writeString(struct.domainId);
         {
           oprot.writeI32(struct.userIds.size());
           for (String _iter36 : struct.userIds)
@@ -21174,6 +21873,8 @@
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, removeUsersFromGroup_args struct) throws org.apache.thrift.TException {
         TTupleProtocol iprot = (TTupleProtocol) prot;
+        struct.domainId = iprot.readString();
+        struct.setDomainIdIsSet(true);
         {
           org.apache.thrift.protocol.TList _list37 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
           struct.userIds = new ArrayList<String>(_list37.size);
@@ -21663,9 +22364,10 @@
   public static class getGroupMembersOfTypeUser_args implements org.apache.thrift.TBase<getGroupMembersOfTypeUser_args, getGroupMembersOfTypeUser_args._Fields>, java.io.Serializable, Cloneable, Comparable<getGroupMembersOfTypeUser_args>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getGroupMembersOfTypeUser_args");
 
-    private static final org.apache.thrift.protocol.TField GROUP_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("groupId", org.apache.thrift.protocol.TType.STRING, (short)1);
-    private static final org.apache.thrift.protocol.TField OFFSET_FIELD_DESC = new org.apache.thrift.protocol.TField("offset", org.apache.thrift.protocol.TType.I32, (short)2);
-    private static final org.apache.thrift.protocol.TField LIMIT_FIELD_DESC = new org.apache.thrift.protocol.TField("limit", org.apache.thrift.protocol.TType.I32, (short)3);
+    private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField GROUP_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("groupId", org.apache.thrift.protocol.TType.STRING, (short)2);
+    private static final org.apache.thrift.protocol.TField OFFSET_FIELD_DESC = new org.apache.thrift.protocol.TField("offset", org.apache.thrift.protocol.TType.I32, (short)3);
+    private static final org.apache.thrift.protocol.TField LIMIT_FIELD_DESC = new org.apache.thrift.protocol.TField("limit", org.apache.thrift.protocol.TType.I32, (short)4);
 
     private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
     static {
@@ -21673,15 +22375,17 @@
       schemes.put(TupleScheme.class, new getGroupMembersOfTypeUser_argsTupleSchemeFactory());
     }
 
+    public String domainId; // required
     public String groupId; // required
     public int offset; // required
     public int limit; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-      GROUP_ID((short)1, "groupId"),
-      OFFSET((short)2, "offset"),
-      LIMIT((short)3, "limit");
+      DOMAIN_ID((short)1, "domainId"),
+      GROUP_ID((short)2, "groupId"),
+      OFFSET((short)3, "offset"),
+      LIMIT((short)4, "limit");
 
       private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -21696,11 +22400,13 @@
        */
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
-          case 1: // GROUP_ID
+          case 1: // DOMAIN_ID
+            return DOMAIN_ID;
+          case 2: // GROUP_ID
             return GROUP_ID;
-          case 2: // OFFSET
+          case 3: // OFFSET
             return OFFSET;
-          case 3: // LIMIT
+          case 4: // LIMIT
             return LIMIT;
           default:
             return null;
@@ -21748,6 +22454,8 @@
     public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.GROUP_ID, new org.apache.thrift.meta_data.FieldMetaData("groupId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.OFFSET, new org.apache.thrift.meta_data.FieldMetaData("offset", org.apache.thrift.TFieldRequirementType.REQUIRED, 
@@ -21762,11 +22470,13 @@
     }
 
     public getGroupMembersOfTypeUser_args(
+      String domainId,
       String groupId,
       int offset,
       int limit)
     {
       this();
+      this.domainId = domainId;
       this.groupId = groupId;
       this.offset = offset;
       setOffsetIsSet(true);
@@ -21779,6 +22489,9 @@
      */
     public getGroupMembersOfTypeUser_args(getGroupMembersOfTypeUser_args other) {
       __isset_bitfield = other.__isset_bitfield;
+      if (other.isSetDomainId()) {
+        this.domainId = other.domainId;
+      }
       if (other.isSetGroupId()) {
         this.groupId = other.groupId;
       }
@@ -21792,6 +22505,7 @@
 
     @Override
     public void clear() {
+      this.domainId = null;
       this.groupId = null;
       setOffsetIsSet(false);
       this.offset = 0;
@@ -21799,6 +22513,30 @@
       this.limit = 0;
     }
 
+    public String getDomainId() {
+      return this.domainId;
+    }
+
+    public getGroupMembersOfTypeUser_args setDomainId(String domainId) {
+      this.domainId = domainId;
+      return this;
+    }
+
+    public void unsetDomainId() {
+      this.domainId = null;
+    }
+
+    /** Returns true if field domainId is set (has been assigned a value) and false otherwise */
+    public boolean isSetDomainId() {
+      return this.domainId != null;
+    }
+
+    public void setDomainIdIsSet(boolean value) {
+      if (!value) {
+        this.domainId = null;
+      }
+    }
+
     public String getGroupId() {
       return this.groupId;
     }
@@ -21871,6 +22609,14 @@
 
     public void setFieldValue(_Fields field, Object value) {
       switch (field) {
+      case DOMAIN_ID:
+        if (value == null) {
+          unsetDomainId();
+        } else {
+          setDomainId((String)value);
+        }
+        break;
+
       case GROUP_ID:
         if (value == null) {
           unsetGroupId();
@@ -21900,6 +22646,9 @@
 
     public Object getFieldValue(_Fields field) {
       switch (field) {
+      case DOMAIN_ID:
+        return getDomainId();
+
       case GROUP_ID:
         return getGroupId();
 
@@ -21920,6 +22669,8 @@
       }
 
       switch (field) {
+      case DOMAIN_ID:
+        return isSetDomainId();
       case GROUP_ID:
         return isSetGroupId();
       case OFFSET:
@@ -21943,6 +22694,15 @@
       if (that == null)
         return false;
 
+      boolean this_present_domainId = true && this.isSetDomainId();
+      boolean that_present_domainId = true && that.isSetDomainId();
+      if (this_present_domainId || that_present_domainId) {
+        if (!(this_present_domainId && that_present_domainId))
+          return false;
+        if (!this.domainId.equals(that.domainId))
+          return false;
+      }
+
       boolean this_present_groupId = true && this.isSetGroupId();
       boolean that_present_groupId = true && that.isSetGroupId();
       if (this_present_groupId || that_present_groupId) {
@@ -21977,6 +22737,11 @@
     public int hashCode() {
       List<Object> list = new ArrayList<Object>();
 
+      boolean present_domainId = true && (isSetDomainId());
+      list.add(present_domainId);
+      if (present_domainId)
+        list.add(domainId);
+
       boolean present_groupId = true && (isSetGroupId());
       list.add(present_groupId);
       if (present_groupId)
@@ -22003,6 +22768,16 @@
 
       int lastComparison = 0;
 
+      lastComparison = Boolean.valueOf(isSetDomainId()).compareTo(other.isSetDomainId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetDomainId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.domainId, other.domainId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       lastComparison = Boolean.valueOf(isSetGroupId()).compareTo(other.isSetGroupId());
       if (lastComparison != 0) {
         return lastComparison;
@@ -22053,6 +22828,14 @@
       StringBuilder sb = new StringBuilder("getGroupMembersOfTypeUser_args(");
       boolean first = true;
 
+      sb.append("domainId:");
+      if (this.domainId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.domainId);
+      }
+      first = false;
+      if (!first) sb.append(", ");
       sb.append("groupId:");
       if (this.groupId == null) {
         sb.append("null");
@@ -22118,7 +22901,15 @@
             break;
           }
           switch (schemeField.id) {
-            case 1: // GROUP_ID
+            case 1: // DOMAIN_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.domainId = iprot.readString();
+                struct.setDomainIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // GROUP_ID
               if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
                 struct.groupId = iprot.readString();
                 struct.setGroupIdIsSet(true);
@@ -22126,7 +22917,7 @@
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
-            case 2: // OFFSET
+            case 3: // OFFSET
               if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
                 struct.offset = iprot.readI32();
                 struct.setOffsetIsSet(true);
@@ -22134,7 +22925,7 @@
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
-            case 3: // LIMIT
+            case 4: // LIMIT
               if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
                 struct.limit = iprot.readI32();
                 struct.setLimitIsSet(true);
@@ -22163,6 +22954,11 @@
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.domainId != null) {
+          oprot.writeFieldBegin(DOMAIN_ID_FIELD_DESC);
+          oprot.writeString(struct.domainId);
+          oprot.writeFieldEnd();
+        }
         if (struct.groupId != null) {
           oprot.writeFieldBegin(GROUP_ID_FIELD_DESC);
           oprot.writeString(struct.groupId);
@@ -22194,6 +22990,14 @@
         oprot.writeString(struct.groupId);
         oprot.writeI32(struct.offset);
         oprot.writeI32(struct.limit);
+        BitSet optionals = new BitSet();
+        if (struct.isSetDomainId()) {
+          optionals.set(0);
+        }
+        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetDomainId()) {
+          oprot.writeString(struct.domainId);
+        }
       }
 
       @Override
@@ -22205,6 +23009,11 @@
         struct.setOffsetIsSet(true);
         struct.limit = iprot.readI32();
         struct.setLimitIsSet(true);
+        BitSet incoming = iprot.readBitSet(1);
+        if (incoming.get(0)) {
+          struct.domainId = iprot.readString();
+          struct.setDomainIdIsSet(true);
+        }
       }
     }
 
@@ -22735,9 +23544,10 @@
   public static class getGroupMembersOfTypeGroup_args implements org.apache.thrift.TBase<getGroupMembersOfTypeGroup_args, getGroupMembersOfTypeGroup_args._Fields>, java.io.Serializable, Cloneable, Comparable<getGroupMembersOfTypeGroup_args>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getGroupMembersOfTypeGroup_args");
 
-    private static final org.apache.thrift.protocol.TField GROUP_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("groupId", org.apache.thrift.protocol.TType.STRING, (short)1);
-    private static final org.apache.thrift.protocol.TField OFFSET_FIELD_DESC = new org.apache.thrift.protocol.TField("offset", org.apache.thrift.protocol.TType.I32, (short)2);
-    private static final org.apache.thrift.protocol.TField LIMIT_FIELD_DESC = new org.apache.thrift.protocol.TField("limit", org.apache.thrift.protocol.TType.I32, (short)3);
+    private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField GROUP_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("groupId", org.apache.thrift.protocol.TType.STRING, (short)2);
+    private static final org.apache.thrift.protocol.TField OFFSET_FIELD_DESC = new org.apache.thrift.protocol.TField("offset", org.apache.thrift.protocol.TType.I32, (short)3);
+    private static final org.apache.thrift.protocol.TField LIMIT_FIELD_DESC = new org.apache.thrift.protocol.TField("limit", org.apache.thrift.protocol.TType.I32, (short)4);
 
     private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
     static {
@@ -22745,15 +23555,17 @@
       schemes.put(TupleScheme.class, new getGroupMembersOfTypeGroup_argsTupleSchemeFactory());
     }
 
+    public String domainId; // required
     public String groupId; // required
     public int offset; // required
     public int limit; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-      GROUP_ID((short)1, "groupId"),
-      OFFSET((short)2, "offset"),
-      LIMIT((short)3, "limit");
+      DOMAIN_ID((short)1, "domainId"),
+      GROUP_ID((short)2, "groupId"),
+      OFFSET((short)3, "offset"),
+      LIMIT((short)4, "limit");
 
       private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -22768,11 +23580,13 @@
        */
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
-          case 1: // GROUP_ID
+          case 1: // DOMAIN_ID
+            return DOMAIN_ID;
+          case 2: // GROUP_ID
             return GROUP_ID;
-          case 2: // OFFSET
+          case 3: // OFFSET
             return OFFSET;
-          case 3: // LIMIT
+          case 4: // LIMIT
             return LIMIT;
           default:
             return null;
@@ -22820,6 +23634,8 @@
     public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.GROUP_ID, new org.apache.thrift.meta_data.FieldMetaData("groupId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.OFFSET, new org.apache.thrift.meta_data.FieldMetaData("offset", org.apache.thrift.TFieldRequirementType.REQUIRED, 
@@ -22834,11 +23650,13 @@
     }
 
     public getGroupMembersOfTypeGroup_args(
+      String domainId,
       String groupId,
       int offset,
       int limit)
     {
       this();
+      this.domainId = domainId;
       this.groupId = groupId;
       this.offset = offset;
       setOffsetIsSet(true);
@@ -22851,6 +23669,9 @@
      */
     public getGroupMembersOfTypeGroup_args(getGroupMembersOfTypeGroup_args other) {
       __isset_bitfield = other.__isset_bitfield;
+      if (other.isSetDomainId()) {
+        this.domainId = other.domainId;
+      }
       if (other.isSetGroupId()) {
         this.groupId = other.groupId;
       }
@@ -22864,6 +23685,7 @@
 
     @Override
     public void clear() {
+      this.domainId = null;
       this.groupId = null;
       setOffsetIsSet(false);
       this.offset = 0;
@@ -22871,6 +23693,30 @@
       this.limit = 0;
     }
 
+    public String getDomainId() {
+      return this.domainId;
+    }
+
+    public getGroupMembersOfTypeGroup_args setDomainId(String domainId) {
+      this.domainId = domainId;
+      return this;
+    }
+
+    public void unsetDomainId() {
+      this.domainId = null;
+    }
+
+    /** Returns true if field domainId is set (has been assigned a value) and false otherwise */
+    public boolean isSetDomainId() {
+      return this.domainId != null;
+    }
+
+    public void setDomainIdIsSet(boolean value) {
+      if (!value) {
+        this.domainId = null;
+      }
+    }
+
     public String getGroupId() {
       return this.groupId;
     }
@@ -22943,6 +23789,14 @@
 
     public void setFieldValue(_Fields field, Object value) {
       switch (field) {
+      case DOMAIN_ID:
+        if (value == null) {
+          unsetDomainId();
+        } else {
+          setDomainId((String)value);
+        }
+        break;
+
       case GROUP_ID:
         if (value == null) {
           unsetGroupId();
@@ -22972,6 +23826,9 @@
 
     public Object getFieldValue(_Fields field) {
       switch (field) {
+      case DOMAIN_ID:
+        return getDomainId();
+
       case GROUP_ID:
         return getGroupId();
 
@@ -22992,6 +23849,8 @@
       }
 
       switch (field) {
+      case DOMAIN_ID:
+        return isSetDomainId();
       case GROUP_ID:
         return isSetGroupId();
       case OFFSET:
@@ -23015,6 +23874,15 @@
       if (that == null)
         return false;
 
+      boolean this_present_domainId = true && this.isSetDomainId();
+      boolean that_present_domainId = true && that.isSetDomainId();
+      if (this_present_domainId || that_present_domainId) {
+        if (!(this_present_domainId && that_present_domainId))
+          return false;
+        if (!this.domainId.equals(that.domainId))
+          return false;
+      }
+
       boolean this_present_groupId = true && this.isSetGroupId();
       boolean that_present_groupId = true && that.isSetGroupId();
       if (this_present_groupId || that_present_groupId) {
@@ -23049,6 +23917,11 @@
     public int hashCode() {
       List<Object> list = new ArrayList<Object>();
 
+      boolean present_domainId = true && (isSetDomainId());
+      list.add(present_domainId);
+      if (present_domainId)
+        list.add(domainId);
+
       boolean present_groupId = true && (isSetGroupId());
       list.add(present_groupId);
       if (present_groupId)
@@ -23075,6 +23948,16 @@
 
       int lastComparison = 0;
 
+      lastComparison = Boolean.valueOf(isSetDomainId()).compareTo(other.isSetDomainId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetDomainId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.domainId, other.domainId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       lastComparison = Boolean.valueOf(isSetGroupId()).compareTo(other.isSetGroupId());
       if (lastComparison != 0) {
         return lastComparison;
@@ -23125,6 +24008,14 @@
       StringBuilder sb = new StringBuilder("getGroupMembersOfTypeGroup_args(");
       boolean first = true;
 
+      sb.append("domainId:");
+      if (this.domainId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.domainId);
+      }
+      first = false;
+      if (!first) sb.append(", ");
       sb.append("groupId:");
       if (this.groupId == null) {
         sb.append("null");
@@ -23146,6 +24037,9 @@
 
     public void validate() throws org.apache.thrift.TException {
       // check for required fields
+      if (domainId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'domainId' was not present! Struct: " + toString());
+      }
       if (groupId == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'groupId' was not present! Struct: " + toString());
       }
@@ -23190,7 +24084,15 @@
             break;
           }
           switch (schemeField.id) {
-            case 1: // GROUP_ID
+            case 1: // DOMAIN_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.domainId = iprot.readString();
+                struct.setDomainIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // GROUP_ID
               if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
                 struct.groupId = iprot.readString();
                 struct.setGroupIdIsSet(true);
@@ -23198,7 +24100,7 @@
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
-            case 2: // OFFSET
+            case 3: // OFFSET
               if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
                 struct.offset = iprot.readI32();
                 struct.setOffsetIsSet(true);
@@ -23206,7 +24108,7 @@
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
-            case 3: // LIMIT
+            case 4: // LIMIT
               if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
                 struct.limit = iprot.readI32();
                 struct.setLimitIsSet(true);
@@ -23235,6 +24137,11 @@
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.domainId != null) {
+          oprot.writeFieldBegin(DOMAIN_ID_FIELD_DESC);
+          oprot.writeString(struct.domainId);
+          oprot.writeFieldEnd();
+        }
         if (struct.groupId != null) {
           oprot.writeFieldBegin(GROUP_ID_FIELD_DESC);
           oprot.writeString(struct.groupId);
@@ -23263,6 +24170,7 @@
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, getGroupMembersOfTypeGroup_args struct) throws org.apache.thrift.TException {
         TTupleProtocol oprot = (TTupleProtocol) prot;
+        oprot.writeString(struct.domainId);
         oprot.writeString(struct.groupId);
         oprot.writeI32(struct.offset);
         oprot.writeI32(struct.limit);
@@ -23271,6 +24179,8 @@
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, getGroupMembersOfTypeGroup_args struct) throws org.apache.thrift.TException {
         TTupleProtocol iprot = (TTupleProtocol) prot;
+        struct.domainId = iprot.readString();
+        struct.setDomainIdIsSet(true);
         struct.groupId = iprot.readString();
         struct.setGroupIdIsSet(true);
         struct.offset = iprot.readI32();
@@ -23807,8 +24717,9 @@
   public static class addChildGroupsToParentGroup_args implements org.apache.thrift.TBase<addChildGroupsToParentGroup_args, addChildGroupsToParentGroup_args._Fields>, java.io.Serializable, Cloneable, Comparable<addChildGroupsToParentGroup_args>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("addChildGroupsToParentGroup_args");
 
-    private static final org.apache.thrift.protocol.TField CHILD_IDS_FIELD_DESC = new org.apache.thrift.protocol.TField("childIds", org.apache.thrift.protocol.TType.LIST, (short)1);
-    private static final org.apache.thrift.protocol.TField GROUP_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("groupId", org.apache.thrift.protocol.TType.STRING, (short)2);
+    private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField CHILD_IDS_FIELD_DESC = new org.apache.thrift.protocol.TField("childIds", org.apache.thrift.protocol.TType.LIST, (short)2);
+    private static final org.apache.thrift.protocol.TField GROUP_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("groupId", org.apache.thrift.protocol.TType.STRING, (short)3);
 
     private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
     static {
@@ -23816,13 +24727,15 @@
       schemes.put(TupleScheme.class, new addChildGroupsToParentGroup_argsTupleSchemeFactory());
     }
 
+    public String domainId; // required
     public List<String> childIds; // required
     public String groupId; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-      CHILD_IDS((short)1, "childIds"),
-      GROUP_ID((short)2, "groupId");
+      DOMAIN_ID((short)1, "domainId"),
+      CHILD_IDS((short)2, "childIds"),
+      GROUP_ID((short)3, "groupId");
 
       private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -23837,9 +24750,11 @@
        */
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
-          case 1: // CHILD_IDS
+          case 1: // DOMAIN_ID
+            return DOMAIN_ID;
+          case 2: // CHILD_IDS
             return CHILD_IDS;
-          case 2: // GROUP_ID
+          case 3: // GROUP_ID
             return GROUP_ID;
           default:
             return null;
@@ -23884,6 +24799,8 @@
     public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.CHILD_IDS, new org.apache.thrift.meta_data.FieldMetaData("childIds", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
               new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING))));
@@ -23897,10 +24814,12 @@
     }
 
     public addChildGroupsToParentGroup_args(
+      String domainId,
       List<String> childIds,
       String groupId)
     {
       this();
+      this.domainId = domainId;
       this.childIds = childIds;
       this.groupId = groupId;
     }
@@ -23909,6 +24828,9 @@
      * Performs a deep copy on <i>other</i>.
      */
     public addChildGroupsToParentGroup_args(addChildGroupsToParentGroup_args other) {
+      if (other.isSetDomainId()) {
+        this.domainId = other.domainId;
+      }
       if (other.isSetChildIds()) {
         List<String> __this__childIds = new ArrayList<String>(other.childIds);
         this.childIds = __this__childIds;
@@ -23924,10 +24846,35 @@
 
     @Override
     public void clear() {
+      this.domainId = null;
       this.childIds = null;
       this.groupId = null;
     }
 
+    public String getDomainId() {
+      return this.domainId;
+    }
+
+    public addChildGroupsToParentGroup_args setDomainId(String domainId) {
+      this.domainId = domainId;
+      return this;
+    }
+
+    public void unsetDomainId() {
+      this.domainId = null;
+    }
+
+    /** Returns true if field domainId is set (has been assigned a value) and false otherwise */
+    public boolean isSetDomainId() {
+      return this.domainId != null;
+    }
+
+    public void setDomainIdIsSet(boolean value) {
+      if (!value) {
+        this.domainId = null;
+      }
+    }
+
     public int getChildIdsSize() {
       return (this.childIds == null) ? 0 : this.childIds.size();
     }
@@ -23993,6 +24940,14 @@
 
     public void setFieldValue(_Fields field, Object value) {
       switch (field) {
+      case DOMAIN_ID:
+        if (value == null) {
+          unsetDomainId();
+        } else {
+          setDomainId((String)value);
+        }
+        break;
+
       case CHILD_IDS:
         if (value == null) {
           unsetChildIds();
@@ -24014,6 +24969,9 @@
 
     public Object getFieldValue(_Fields field) {
       switch (field) {
+      case DOMAIN_ID:
+        return getDomainId();
+
       case CHILD_IDS:
         return getChildIds();
 
@@ -24031,6 +24989,8 @@
       }
 
       switch (field) {
+      case DOMAIN_ID:
+        return isSetDomainId();
       case CHILD_IDS:
         return isSetChildIds();
       case GROUP_ID:
@@ -24052,6 +25012,15 @@
       if (that == null)
         return false;
 
+      boolean this_present_domainId = true && this.isSetDomainId();
+      boolean that_present_domainId = true && that.isSetDomainId();
+      if (this_present_domainId || that_present_domainId) {
+        if (!(this_present_domainId && that_present_domainId))
+          return false;
+        if (!this.domainId.equals(that.domainId))
+          return false;
+      }
+
       boolean this_present_childIds = true && this.isSetChildIds();
       boolean that_present_childIds = true && that.isSetChildIds();
       if (this_present_childIds || that_present_childIds) {
@@ -24077,6 +25046,11 @@
     public int hashCode() {
       List<Object> list = new ArrayList<Object>();
 
+      boolean present_domainId = true && (isSetDomainId());
+      list.add(present_domainId);
+      if (present_domainId)
+        list.add(domainId);
+
       boolean present_childIds = true && (isSetChildIds());
       list.add(present_childIds);
       if (present_childIds)
@@ -24098,6 +25072,16 @@
 
       int lastComparison = 0;
 
+      lastComparison = Boolean.valueOf(isSetDomainId()).compareTo(other.isSetDomainId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetDomainId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.domainId, other.domainId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       lastComparison = Boolean.valueOf(isSetChildIds()).compareTo(other.isSetChildIds());
       if (lastComparison != 0) {
         return lastComparison;
@@ -24138,6 +25122,14 @@
       StringBuilder sb = new StringBuilder("addChildGroupsToParentGroup_args(");
       boolean first = true;
 
+      sb.append("domainId:");
+      if (this.domainId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.domainId);
+      }
+      first = false;
+      if (!first) sb.append(", ");
       sb.append("childIds:");
       if (this.childIds == null) {
         sb.append("null");
@@ -24159,6 +25151,9 @@
 
     public void validate() throws org.apache.thrift.TException {
       // check for required fields
+      if (domainId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'domainId' was not present! Struct: " + toString());
+      }
       if (childIds == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'childIds' was not present! Struct: " + toString());
       }
@@ -24202,7 +25197,15 @@
             break;
           }
           switch (schemeField.id) {
-            case 1: // CHILD_IDS
+            case 1: // DOMAIN_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.domainId = iprot.readString();
+                struct.setDomainIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // CHILD_IDS
               if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
                 {
                   org.apache.thrift.protocol.TList _list56 = iprot.readListBegin();
@@ -24220,7 +25223,7 @@
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
-            case 2: // GROUP_ID
+            case 3: // GROUP_ID
               if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
                 struct.groupId = iprot.readString();
                 struct.setGroupIdIsSet(true);
@@ -24243,6 +25246,11 @@
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.domainId != null) {
+          oprot.writeFieldBegin(DOMAIN_ID_FIELD_DESC);
+          oprot.writeString(struct.domainId);
+          oprot.writeFieldEnd();
+        }
         if (struct.childIds != null) {
           oprot.writeFieldBegin(CHILD_IDS_FIELD_DESC);
           {
@@ -24277,6 +25285,7 @@
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, addChildGroupsToParentGroup_args struct) throws org.apache.thrift.TException {
         TTupleProtocol oprot = (TTupleProtocol) prot;
+        oprot.writeString(struct.domainId);
         {
           oprot.writeI32(struct.childIds.size());
           for (String _iter60 : struct.childIds)
@@ -24290,6 +25299,8 @@
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, addChildGroupsToParentGroup_args struct) throws org.apache.thrift.TException {
         TTupleProtocol iprot = (TTupleProtocol) prot;
+        struct.domainId = iprot.readString();
+        struct.setDomainIdIsSet(true);
         {
           org.apache.thrift.protocol.TList _list61 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
           struct.childIds = new ArrayList<String>(_list61.size);
@@ -24779,8 +25790,9 @@
   public static class removeChildGroupFromParentGroup_args implements org.apache.thrift.TBase<removeChildGroupFromParentGroup_args, removeChildGroupFromParentGroup_args._Fields>, java.io.Serializable, Cloneable, Comparable<removeChildGroupFromParentGroup_args>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("removeChildGroupFromParentGroup_args");
 
-    private static final org.apache.thrift.protocol.TField CHILD_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("childId", org.apache.thrift.protocol.TType.STRING, (short)1);
-    private static final org.apache.thrift.protocol.TField GROUP_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("groupId", org.apache.thrift.protocol.TType.STRING, (short)2);
+    private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField CHILD_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("childId", org.apache.thrift.protocol.TType.STRING, (short)2);
+    private static final org.apache.thrift.protocol.TField GROUP_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("groupId", org.apache.thrift.protocol.TType.STRING, (short)3);
 
     private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
     static {
@@ -24788,13 +25800,15 @@
       schemes.put(TupleScheme.class, new removeChildGroupFromParentGroup_argsTupleSchemeFactory());
     }
 
+    public String domainId; // required
     public String childId; // required
     public String groupId; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-      CHILD_ID((short)1, "childId"),
-      GROUP_ID((short)2, "groupId");
+      DOMAIN_ID((short)1, "domainId"),
+      CHILD_ID((short)2, "childId"),
+      GROUP_ID((short)3, "groupId");
 
       private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -24809,9 +25823,11 @@
        */
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
-          case 1: // CHILD_ID
+          case 1: // DOMAIN_ID
+            return DOMAIN_ID;
+          case 2: // CHILD_ID
             return CHILD_ID;
-          case 2: // GROUP_ID
+          case 3: // GROUP_ID
             return GROUP_ID;
           default:
             return null;
@@ -24856,6 +25872,8 @@
     public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.CHILD_ID, new org.apache.thrift.meta_data.FieldMetaData("childId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.GROUP_ID, new org.apache.thrift.meta_data.FieldMetaData("groupId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
@@ -24868,10 +25886,12 @@
     }
 
     public removeChildGroupFromParentGroup_args(
+      String domainId,
       String childId,
       String groupId)
     {
       this();
+      this.domainId = domainId;
       this.childId = childId;
       this.groupId = groupId;
     }
@@ -24880,6 +25900,9 @@
      * Performs a deep copy on <i>other</i>.
      */
     public removeChildGroupFromParentGroup_args(removeChildGroupFromParentGroup_args other) {
+      if (other.isSetDomainId()) {
+        this.domainId = other.domainId;
+      }
       if (other.isSetChildId()) {
         this.childId = other.childId;
       }
@@ -24894,10 +25917,35 @@
 
     @Override
     public void clear() {
+      this.domainId = null;
       this.childId = null;
       this.groupId = null;
     }
 
+    public String getDomainId() {
+      return this.domainId;
+    }
+
+    public removeChildGroupFromParentGroup_args setDomainId(String domainId) {
+      this.domainId = domainId;
+      return this;
+    }
+
+    public void unsetDomainId() {
+      this.domainId = null;
+    }
+
+    /** Returns true if field domainId is set (has been assigned a value) and false otherwise */
+    public boolean isSetDomainId() {
+      return this.domainId != null;
+    }
+
+    public void setDomainIdIsSet(boolean value) {
+      if (!value) {
+        this.domainId = null;
+      }
+    }
+
     public String getChildId() {
       return this.childId;
     }
@@ -24948,6 +25996,14 @@
 
     public void setFieldValue(_Fields field, Object value) {
       switch (field) {
+      case DOMAIN_ID:
+        if (value == null) {
+          unsetDomainId();
+        } else {
+          setDomainId((String)value);
+        }
+        break;
+
       case CHILD_ID:
         if (value == null) {
           unsetChildId();
@@ -24969,6 +26025,9 @@
 
     public Object getFieldValue(_Fields field) {
       switch (field) {
+      case DOMAIN_ID:
+        return getDomainId();
+
       case CHILD_ID:
         return getChildId();
 
@@ -24986,6 +26045,8 @@
       }
 
       switch (field) {
+      case DOMAIN_ID:
+        return isSetDomainId();
       case CHILD_ID:
         return isSetChildId();
       case GROUP_ID:
@@ -25007,6 +26068,15 @@
       if (that == null)
         return false;
 
+      boolean this_present_domainId = true && this.isSetDomainId();
+      boolean that_present_domainId = true && that.isSetDomainId();
+      if (this_present_domainId || that_present_domainId) {
+        if (!(this_present_domainId && that_present_domainId))
+          return false;
+        if (!this.domainId.equals(that.domainId))
+          return false;
+      }
+
       boolean this_present_childId = true && this.isSetChildId();
       boolean that_present_childId = true && that.isSetChildId();
       if (this_present_childId || that_present_childId) {
@@ -25032,6 +26102,11 @@
     public int hashCode() {
       List<Object> list = new ArrayList<Object>();
 
+      boolean present_domainId = true && (isSetDomainId());
+      list.add(present_domainId);
+      if (present_domainId)
+        list.add(domainId);
+
       boolean present_childId = true && (isSetChildId());
       list.add(present_childId);
       if (present_childId)
@@ -25053,6 +26128,16 @@
 
       int lastComparison = 0;
 
+      lastComparison = Boolean.valueOf(isSetDomainId()).compareTo(other.isSetDomainId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetDomainId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.domainId, other.domainId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       lastComparison = Boolean.valueOf(isSetChildId()).compareTo(other.isSetChildId());
       if (lastComparison != 0) {
         return lastComparison;
@@ -25093,6 +26178,14 @@
       StringBuilder sb = new StringBuilder("removeChildGroupFromParentGroup_args(");
       boolean first = true;
 
+      sb.append("domainId:");
+      if (this.domainId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.domainId);
+      }
+      first = false;
+      if (!first) sb.append(", ");
       sb.append("childId:");
       if (this.childId == null) {
         sb.append("null");
@@ -25114,6 +26207,9 @@
 
     public void validate() throws org.apache.thrift.TException {
       // check for required fields
+      if (domainId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'domainId' was not present! Struct: " + toString());
+      }
       if (childId == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'childId' was not present! Struct: " + toString());
       }
@@ -25157,7 +26253,15 @@
             break;
           }
           switch (schemeField.id) {
-            case 1: // CHILD_ID
+            case 1: // DOMAIN_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.domainId = iprot.readString();
+                struct.setDomainIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // CHILD_ID
               if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
                 struct.childId = iprot.readString();
                 struct.setChildIdIsSet(true);
@@ -25165,7 +26269,7 @@
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
-            case 2: // GROUP_ID
+            case 3: // GROUP_ID
               if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
                 struct.groupId = iprot.readString();
                 struct.setGroupIdIsSet(true);
@@ -25188,6 +26292,11 @@
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.domainId != null) {
+          oprot.writeFieldBegin(DOMAIN_ID_FIELD_DESC);
+          oprot.writeString(struct.domainId);
+          oprot.writeFieldEnd();
+        }
         if (struct.childId != null) {
           oprot.writeFieldBegin(CHILD_ID_FIELD_DESC);
           oprot.writeString(struct.childId);
@@ -25215,6 +26324,7 @@
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, removeChildGroupFromParentGroup_args struct) throws org.apache.thrift.TException {
         TTupleProtocol oprot = (TTupleProtocol) prot;
+        oprot.writeString(struct.domainId);
         oprot.writeString(struct.childId);
         oprot.writeString(struct.groupId);
       }
@@ -25222,6 +26332,8 @@
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, removeChildGroupFromParentGroup_args struct) throws org.apache.thrift.TException {
         TTupleProtocol iprot = (TTupleProtocol) prot;
+        struct.domainId = iprot.readString();
+        struct.setDomainIdIsSet(true);
         struct.childId = iprot.readString();
         struct.setChildIdIsSet(true);
         struct.groupId = iprot.readString();
@@ -27356,7 +28468,8 @@
   public static class deleteEntityType_args implements org.apache.thrift.TBase<deleteEntityType_args, deleteEntityType_args._Fields>, java.io.Serializable, Cloneable, Comparable<deleteEntityType_args>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("deleteEntityType_args");
 
-    private static final org.apache.thrift.protocol.TField ENTITY_TYPE_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("entityTypeId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField ENTITY_TYPE_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("entityTypeId", org.apache.thrift.protocol.TType.STRING, (short)2);
 
     private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
     static {
@@ -27364,11 +28477,13 @@
       schemes.put(TupleScheme.class, new deleteEntityType_argsTupleSchemeFactory());
     }
 
+    public String domainId; // required
     public String entityTypeId; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-      ENTITY_TYPE_ID((short)1, "entityTypeId");
+      DOMAIN_ID((short)1, "domainId"),
+      ENTITY_TYPE_ID((short)2, "entityTypeId");
 
       private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -27383,7 +28498,9 @@
        */
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
-          case 1: // ENTITY_TYPE_ID
+          case 1: // DOMAIN_ID
+            return DOMAIN_ID;
+          case 2: // ENTITY_TYPE_ID
             return ENTITY_TYPE_ID;
           default:
             return null;
@@ -27428,6 +28545,8 @@
     public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.ENTITY_TYPE_ID, new org.apache.thrift.meta_data.FieldMetaData("entityTypeId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       metaDataMap = Collections.unmodifiableMap(tmpMap);
@@ -27438,9 +28557,11 @@
     }
 
     public deleteEntityType_args(
+      String domainId,
       String entityTypeId)
     {
       this();
+      this.domainId = domainId;
       this.entityTypeId = entityTypeId;
     }
 
@@ -27448,6 +28569,9 @@
      * Performs a deep copy on <i>other</i>.
      */
     public deleteEntityType_args(deleteEntityType_args other) {
+      if (other.isSetDomainId()) {
+        this.domainId = other.domainId;
+      }
       if (other.isSetEntityTypeId()) {
         this.entityTypeId = other.entityTypeId;
       }
@@ -27459,9 +28583,34 @@
 
     @Override
     public void clear() {
+      this.domainId = null;
       this.entityTypeId = null;
     }
 
+    public String getDomainId() {
+      return this.domainId;
+    }
+
+    public deleteEntityType_args setDomainId(String domainId) {
+      this.domainId = domainId;
+      return this;
+    }
+
+    public void unsetDomainId() {
+      this.domainId = null;
+    }
+
+    /** Returns true if field domainId is set (has been assigned a value) and false otherwise */
+    public boolean isSetDomainId() {
+      return this.domainId != null;
+    }
+
+    public void setDomainIdIsSet(boolean value) {
+      if (!value) {
+        this.domainId = null;
+      }
+    }
+
     public String getEntityTypeId() {
       return this.entityTypeId;
     }
@@ -27488,6 +28637,14 @@
 
     public void setFieldValue(_Fields field, Object value) {
       switch (field) {
+      case DOMAIN_ID:
+        if (value == null) {
+          unsetDomainId();
+        } else {
+          setDomainId((String)value);
+        }
+        break;
+
       case ENTITY_TYPE_ID:
         if (value == null) {
           unsetEntityTypeId();
@@ -27501,6 +28658,9 @@
 
     public Object getFieldValue(_Fields field) {
       switch (field) {
+      case DOMAIN_ID:
+        return getDomainId();
+
       case ENTITY_TYPE_ID:
         return getEntityTypeId();
 
@@ -27515,6 +28675,8 @@
       }
 
       switch (field) {
+      case DOMAIN_ID:
+        return isSetDomainId();
       case ENTITY_TYPE_ID:
         return isSetEntityTypeId();
       }
@@ -27534,6 +28696,15 @@
       if (that == null)
         return false;
 
+      boolean this_present_domainId = true && this.isSetDomainId();
+      boolean that_present_domainId = true && that.isSetDomainId();
+      if (this_present_domainId || that_present_domainId) {
+        if (!(this_present_domainId && that_present_domainId))
+          return false;
+        if (!this.domainId.equals(that.domainId))
+          return false;
+      }
+
       boolean this_present_entityTypeId = true && this.isSetEntityTypeId();
       boolean that_present_entityTypeId = true && that.isSetEntityTypeId();
       if (this_present_entityTypeId || that_present_entityTypeId) {
@@ -27550,6 +28721,11 @@
     public int hashCode() {
       List<Object> list = new ArrayList<Object>();
 
+      boolean present_domainId = true && (isSetDomainId());
+      list.add(present_domainId);
+      if (present_domainId)
+        list.add(domainId);
+
       boolean present_entityTypeId = true && (isSetEntityTypeId());
       list.add(present_entityTypeId);
       if (present_entityTypeId)
@@ -27566,6 +28742,16 @@
 
       int lastComparison = 0;
 
+      lastComparison = Boolean.valueOf(isSetDomainId()).compareTo(other.isSetDomainId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetDomainId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.domainId, other.domainId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       lastComparison = Boolean.valueOf(isSetEntityTypeId()).compareTo(other.isSetEntityTypeId());
       if (lastComparison != 0) {
         return lastComparison;
@@ -27596,6 +28782,14 @@
       StringBuilder sb = new StringBuilder("deleteEntityType_args(");
       boolean first = true;
 
+      sb.append("domainId:");
+      if (this.domainId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.domainId);
+      }
+      first = false;
+      if (!first) sb.append(", ");
       sb.append("entityTypeId:");
       if (this.entityTypeId == null) {
         sb.append("null");
@@ -27609,6 +28803,9 @@
 
     public void validate() throws org.apache.thrift.TException {
       // check for required fields
+      if (domainId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'domainId' was not present! Struct: " + toString());
+      }
       if (entityTypeId == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'entityTypeId' was not present! Struct: " + toString());
       }
@@ -27649,7 +28846,15 @@
             break;
           }
           switch (schemeField.id) {
-            case 1: // ENTITY_TYPE_ID
+            case 1: // DOMAIN_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.domainId = iprot.readString();
+                struct.setDomainIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // ENTITY_TYPE_ID
               if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
                 struct.entityTypeId = iprot.readString();
                 struct.setEntityTypeIdIsSet(true);
@@ -27672,6 +28877,11 @@
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.domainId != null) {
+          oprot.writeFieldBegin(DOMAIN_ID_FIELD_DESC);
+          oprot.writeString(struct.domainId);
+          oprot.writeFieldEnd();
+        }
         if (struct.entityTypeId != null) {
           oprot.writeFieldBegin(ENTITY_TYPE_ID_FIELD_DESC);
           oprot.writeString(struct.entityTypeId);
@@ -27694,12 +28904,15 @@
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, deleteEntityType_args struct) throws org.apache.thrift.TException {
         TTupleProtocol oprot = (TTupleProtocol) prot;
+        oprot.writeString(struct.domainId);
         oprot.writeString(struct.entityTypeId);
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, deleteEntityType_args struct) throws org.apache.thrift.TException {
         TTupleProtocol iprot = (TTupleProtocol) prot;
+        struct.domainId = iprot.readString();
+        struct.setDomainIdIsSet(true);
         struct.entityTypeId = iprot.readString();
         struct.setEntityTypeIdIsSet(true);
       }
@@ -28178,7 +29391,8 @@
   public static class getEntityType_args implements org.apache.thrift.TBase<getEntityType_args, getEntityType_args._Fields>, java.io.Serializable, Cloneable, Comparable<getEntityType_args>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getEntityType_args");
 
-    private static final org.apache.thrift.protocol.TField ENTITY_TYPE_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("entityTypeId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField ENTITY_TYPE_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("entityTypeId", org.apache.thrift.protocol.TType.STRING, (short)2);
 
     private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
     static {
@@ -28186,11 +29400,13 @@
       schemes.put(TupleScheme.class, new getEntityType_argsTupleSchemeFactory());
     }
 
+    public String domainId; // required
     public String entityTypeId; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-      ENTITY_TYPE_ID((short)1, "entityTypeId");
+      DOMAIN_ID((short)1, "domainId"),
+      ENTITY_TYPE_ID((short)2, "entityTypeId");
 
       private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -28205,7 +29421,9 @@
        */
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
-          case 1: // ENTITY_TYPE_ID
+          case 1: // DOMAIN_ID
+            return DOMAIN_ID;
+          case 2: // ENTITY_TYPE_ID
             return ENTITY_TYPE_ID;
           default:
             return null;
@@ -28250,6 +29468,8 @@
     public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.ENTITY_TYPE_ID, new org.apache.thrift.meta_data.FieldMetaData("entityTypeId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       metaDataMap = Collections.unmodifiableMap(tmpMap);
@@ -28260,9 +29480,11 @@
     }
 
     public getEntityType_args(
+      String domainId,
       String entityTypeId)
     {
       this();
+      this.domainId = domainId;
       this.entityTypeId = entityTypeId;
     }
 
@@ -28270,6 +29492,9 @@
      * Performs a deep copy on <i>other</i>.
      */
     public getEntityType_args(getEntityType_args other) {
+      if (other.isSetDomainId()) {
+        this.domainId = other.domainId;
+      }
       if (other.isSetEntityTypeId()) {
         this.entityTypeId = other.entityTypeId;
       }
@@ -28281,9 +29506,34 @@
 
     @Override
     public void clear() {
+      this.domainId = null;
       this.entityTypeId = null;
     }
 
+    public String getDomainId() {
+      return this.domainId;
+    }
+
+    public getEntityType_args setDomainId(String domainId) {
+      this.domainId = domainId;
+      return this;
+    }
+
+    public void unsetDomainId() {
+      this.domainId = null;
+    }
+
+    /** Returns true if field domainId is set (has been assigned a value) and false otherwise */
+    public boolean isSetDomainId() {
+      return this.domainId != null;
+    }
+
+    public void setDomainIdIsSet(boolean value) {
+      if (!value) {
+        this.domainId = null;
+      }
+    }
+
     public String getEntityTypeId() {
       return this.entityTypeId;
     }
@@ -28310,6 +29560,14 @@
 
     public void setFieldValue(_Fields field, Object value) {
       switch (field) {
+      case DOMAIN_ID:
+        if (value == null) {
+          unsetDomainId();
+        } else {
+          setDomainId((String)value);
+        }
+        break;
+
       case ENTITY_TYPE_ID:
         if (value == null) {
           unsetEntityTypeId();
@@ -28323,6 +29581,9 @@
 
     public Object getFieldValue(_Fields field) {
       switch (field) {
+      case DOMAIN_ID:
+        return getDomainId();
+
       case ENTITY_TYPE_ID:
         return getEntityTypeId();
 
@@ -28337,6 +29598,8 @@
       }
 
       switch (field) {
+      case DOMAIN_ID:
+        return isSetDomainId();
       case ENTITY_TYPE_ID:
         return isSetEntityTypeId();
       }
@@ -28356,6 +29619,15 @@
       if (that == null)
         return false;
 
+      boolean this_present_domainId = true && this.isSetDomainId();
+      boolean that_present_domainId = true && that.isSetDomainId();
+      if (this_present_domainId || that_present_domainId) {
+        if (!(this_present_domainId && that_present_domainId))
+          return false;
+        if (!this.domainId.equals(that.domainId))
+          return false;
+      }
+
       boolean this_present_entityTypeId = true && this.isSetEntityTypeId();
       boolean that_present_entityTypeId = true && that.isSetEntityTypeId();
       if (this_present_entityTypeId || that_present_entityTypeId) {
@@ -28372,6 +29644,11 @@
     public int hashCode() {
       List<Object> list = new ArrayList<Object>();
 
+      boolean present_domainId = true && (isSetDomainId());
+      list.add(present_domainId);
+      if (present_domainId)
+        list.add(domainId);
+
       boolean present_entityTypeId = true && (isSetEntityTypeId());
       list.add(present_entityTypeId);
       if (present_entityTypeId)
@@ -28388,6 +29665,16 @@
 
       int lastComparison = 0;
 
+      lastComparison = Boolean.valueOf(isSetDomainId()).compareTo(other.isSetDomainId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetDomainId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.domainId, other.domainId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       lastComparison = Boolean.valueOf(isSetEntityTypeId()).compareTo(other.isSetEntityTypeId());
       if (lastComparison != 0) {
         return lastComparison;
@@ -28418,6 +29705,14 @@
       StringBuilder sb = new StringBuilder("getEntityType_args(");
       boolean first = true;
 
+      sb.append("domainId:");
+      if (this.domainId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.domainId);
+      }
+      first = false;
+      if (!first) sb.append(", ");
       sb.append("entityTypeId:");
       if (this.entityTypeId == null) {
         sb.append("null");
@@ -28431,6 +29726,9 @@
 
     public void validate() throws org.apache.thrift.TException {
       // check for required fields
+      if (domainId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'domainId' was not present! Struct: " + toString());
+      }
       if (entityTypeId == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'entityTypeId' was not present! Struct: " + toString());
       }
@@ -28471,7 +29769,15 @@
             break;
           }
           switch (schemeField.id) {
-            case 1: // ENTITY_TYPE_ID
+            case 1: // DOMAIN_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.domainId = iprot.readString();
+                struct.setDomainIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // ENTITY_TYPE_ID
               if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
                 struct.entityTypeId = iprot.readString();
                 struct.setEntityTypeIdIsSet(true);
@@ -28494,6 +29800,11 @@
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.domainId != null) {
+          oprot.writeFieldBegin(DOMAIN_ID_FIELD_DESC);
+          oprot.writeString(struct.domainId);
+          oprot.writeFieldEnd();
+        }
         if (struct.entityTypeId != null) {
           oprot.writeFieldBegin(ENTITY_TYPE_ID_FIELD_DESC);
           oprot.writeString(struct.entityTypeId);
@@ -28516,12 +29827,15 @@
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, getEntityType_args struct) throws org.apache.thrift.TException {
         TTupleProtocol oprot = (TTupleProtocol) prot;
+        oprot.writeString(struct.domainId);
         oprot.writeString(struct.entityTypeId);
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, getEntityType_args struct) throws org.apache.thrift.TException {
         TTupleProtocol iprot = (TTupleProtocol) prot;
+        struct.domainId = iprot.readString();
+        struct.setDomainIdIsSet(true);
         struct.entityTypeId = iprot.readString();
         struct.setEntityTypeIdIsSet(true);
       }
@@ -31731,7 +33045,8 @@
   public static class deleteEntity_args implements org.apache.thrift.TBase<deleteEntity_args, deleteEntity_args._Fields>, java.io.Serializable, Cloneable, Comparable<deleteEntity_args>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("deleteEntity_args");
 
-    private static final org.apache.thrift.protocol.TField ENTITY_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("entityId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField ENTITY_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("entityId", org.apache.thrift.protocol.TType.STRING, (short)2);
 
     private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
     static {
@@ -31739,11 +33054,13 @@
       schemes.put(TupleScheme.class, new deleteEntity_argsTupleSchemeFactory());
     }
 
+    public String domainId; // required
     public String entityId; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-      ENTITY_ID((short)1, "entityId");
+      DOMAIN_ID((short)1, "domainId"),
+      ENTITY_ID((short)2, "entityId");
 
       private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -31758,7 +33075,9 @@
        */
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
-          case 1: // ENTITY_ID
+          case 1: // DOMAIN_ID
+            return DOMAIN_ID;
+          case 2: // ENTITY_ID
             return ENTITY_ID;
           default:
             return null;
@@ -31803,6 +33122,8 @@
     public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.ENTITY_ID, new org.apache.thrift.meta_data.FieldMetaData("entityId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       metaDataMap = Collections.unmodifiableMap(tmpMap);
@@ -31813,9 +33134,11 @@
     }
 
     public deleteEntity_args(
+      String domainId,
       String entityId)
     {
       this();
+      this.domainId = domainId;
       this.entityId = entityId;
     }
 
@@ -31823,6 +33146,9 @@
      * Performs a deep copy on <i>other</i>.
      */
     public deleteEntity_args(deleteEntity_args other) {
+      if (other.isSetDomainId()) {
+        this.domainId = other.domainId;
+      }
       if (other.isSetEntityId()) {
         this.entityId = other.entityId;
       }
@@ -31834,9 +33160,34 @@
 
     @Override
     public void clear() {
+      this.domainId = null;
       this.entityId = null;
     }
 
+    public String getDomainId() {
+      return this.domainId;
+    }
+
+    public deleteEntity_args setDomainId(String domainId) {
+      this.domainId = domainId;
+      return this;
+    }
+
+    public void unsetDomainId() {
+      this.domainId = null;
+    }
+
+    /** Returns true if field domainId is set (has been assigned a value) and false otherwise */
+    public boolean isSetDomainId() {
+      return this.domainId != null;
+    }
+
+    public void setDomainIdIsSet(boolean value) {
+      if (!value) {
+        this.domainId = null;
+      }
+    }
+
     public String getEntityId() {
       return this.entityId;
     }
@@ -31863,6 +33214,14 @@
 
     public void setFieldValue(_Fields field, Object value) {
       switch (field) {
+      case DOMAIN_ID:
+        if (value == null) {
+          unsetDomainId();
+        } else {
+          setDomainId((String)value);
+        }
+        break;
+
       case ENTITY_ID:
         if (value == null) {
           unsetEntityId();
@@ -31876,6 +33235,9 @@
 
     public Object getFieldValue(_Fields field) {
       switch (field) {
+      case DOMAIN_ID:
+        return getDomainId();
+
       case ENTITY_ID:
         return getEntityId();
 
@@ -31890,6 +33252,8 @@
       }
 
       switch (field) {
+      case DOMAIN_ID:
+        return isSetDomainId();
       case ENTITY_ID:
         return isSetEntityId();
       }
@@ -31909,6 +33273,15 @@
       if (that == null)
         return false;
 
+      boolean this_present_domainId = true && this.isSetDomainId();
+      boolean that_present_domainId = true && that.isSetDomainId();
+      if (this_present_domainId || that_present_domainId) {
+        if (!(this_present_domainId && that_present_domainId))
+          return false;
+        if (!this.domainId.equals(that.domainId))
+          return false;
+      }
+
       boolean this_present_entityId = true && this.isSetEntityId();
       boolean that_present_entityId = true && that.isSetEntityId();
       if (this_present_entityId || that_present_entityId) {
@@ -31925,6 +33298,11 @@
     public int hashCode() {
       List<Object> list = new ArrayList<Object>();
 
+      boolean present_domainId = true && (isSetDomainId());
+      list.add(present_domainId);
+      if (present_domainId)
+        list.add(domainId);
+
       boolean present_entityId = true && (isSetEntityId());
       list.add(present_entityId);
       if (present_entityId)
@@ -31941,6 +33319,16 @@
 
       int lastComparison = 0;
 
+      lastComparison = Boolean.valueOf(isSetDomainId()).compareTo(other.isSetDomainId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetDomainId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.domainId, other.domainId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       lastComparison = Boolean.valueOf(isSetEntityId()).compareTo(other.isSetEntityId());
       if (lastComparison != 0) {
         return lastComparison;
@@ -31971,6 +33359,14 @@
       StringBuilder sb = new StringBuilder("deleteEntity_args(");
       boolean first = true;
 
+      sb.append("domainId:");
+      if (this.domainId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.domainId);
+      }
+      first = false;
+      if (!first) sb.append(", ");
       sb.append("entityId:");
       if (this.entityId == null) {
         sb.append("null");
@@ -31984,6 +33380,9 @@
 
     public void validate() throws org.apache.thrift.TException {
       // check for required fields
+      if (domainId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'domainId' was not present! Struct: " + toString());
+      }
       if (entityId == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'entityId' was not present! Struct: " + toString());
       }
@@ -32024,7 +33423,15 @@
             break;
           }
           switch (schemeField.id) {
-            case 1: // ENTITY_ID
+            case 1: // DOMAIN_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.domainId = iprot.readString();
+                struct.setDomainIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // ENTITY_ID
               if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
                 struct.entityId = iprot.readString();
                 struct.setEntityIdIsSet(true);
@@ -32047,6 +33454,11 @@
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.domainId != null) {
+          oprot.writeFieldBegin(DOMAIN_ID_FIELD_DESC);
+          oprot.writeString(struct.domainId);
+          oprot.writeFieldEnd();
+        }
         if (struct.entityId != null) {
           oprot.writeFieldBegin(ENTITY_ID_FIELD_DESC);
           oprot.writeString(struct.entityId);
@@ -32069,12 +33481,15 @@
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, deleteEntity_args struct) throws org.apache.thrift.TException {
         TTupleProtocol oprot = (TTupleProtocol) prot;
+        oprot.writeString(struct.domainId);
         oprot.writeString(struct.entityId);
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, deleteEntity_args struct) throws org.apache.thrift.TException {
         TTupleProtocol iprot = (TTupleProtocol) prot;
+        struct.domainId = iprot.readString();
+        struct.setDomainIdIsSet(true);
         struct.entityId = iprot.readString();
         struct.setEntityIdIsSet(true);
       }
@@ -32553,7 +33968,8 @@
   public static class getEntity_args implements org.apache.thrift.TBase<getEntity_args, getEntity_args._Fields>, java.io.Serializable, Cloneable, Comparable<getEntity_args>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getEntity_args");
 
-    private static final org.apache.thrift.protocol.TField ENTITY_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("entityId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField ENTITY_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("entityId", org.apache.thrift.protocol.TType.STRING, (short)2);
 
     private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
     static {
@@ -32561,11 +33977,13 @@
       schemes.put(TupleScheme.class, new getEntity_argsTupleSchemeFactory());
     }
 
+    public String domainId; // required
     public String entityId; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-      ENTITY_ID((short)1, "entityId");
+      DOMAIN_ID((short)1, "domainId"),
+      ENTITY_ID((short)2, "entityId");
 
       private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -32580,7 +33998,9 @@
        */
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
-          case 1: // ENTITY_ID
+          case 1: // DOMAIN_ID
+            return DOMAIN_ID;
+          case 2: // ENTITY_ID
             return ENTITY_ID;
           default:
             return null;
@@ -32625,6 +34045,8 @@
     public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.ENTITY_ID, new org.apache.thrift.meta_data.FieldMetaData("entityId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       metaDataMap = Collections.unmodifiableMap(tmpMap);
@@ -32635,9 +34057,11 @@
     }
 
     public getEntity_args(
+      String domainId,
       String entityId)
     {
       this();
+      this.domainId = domainId;
       this.entityId = entityId;
     }
 
@@ -32645,6 +34069,9 @@
      * Performs a deep copy on <i>other</i>.
      */
     public getEntity_args(getEntity_args other) {
+      if (other.isSetDomainId()) {
+        this.domainId = other.domainId;
+      }
       if (other.isSetEntityId()) {
         this.entityId = other.entityId;
       }
@@ -32656,9 +34083,34 @@
 
     @Override
     public void clear() {
+      this.domainId = null;
       this.entityId = null;
     }
 
+    public String getDomainId() {
+      return this.domainId;
+    }
+
+    public getEntity_args setDomainId(String domainId) {
+      this.domainId = domainId;
+      return this;
+    }
+
+    public void unsetDomainId() {
+      this.domainId = null;
+    }
+
+    /** Returns true if field domainId is set (has been assigned a value) and false otherwise */
+    public boolean isSetDomainId() {
+      return this.domainId != null;
+    }
+
+    public void setDomainIdIsSet(boolean value) {
+      if (!value) {
+        this.domainId = null;
+      }
+    }
+
     public String getEntityId() {
       return this.entityId;
     }
@@ -32685,6 +34137,14 @@
 
     public void setFieldValue(_Fields field, Object value) {
       switch (field) {
+      case DOMAIN_ID:
+        if (value == null) {
+          unsetDomainId();
+        } else {
+          setDomainId((String)value);
+        }
+        break;
+
       case ENTITY_ID:
         if (value == null) {
           unsetEntityId();
@@ -32698,6 +34158,9 @@
 
     public Object getFieldValue(_Fields field) {
       switch (field) {
+      case DOMAIN_ID:
+        return getDomainId();
+
       case ENTITY_ID:
         return getEntityId();
 
@@ -32712,6 +34175,8 @@
       }
 
       switch (field) {
+      case DOMAIN_ID:
+        return isSetDomainId();
       case ENTITY_ID:
         return isSetEntityId();
       }
@@ -32731,6 +34196,15 @@
       if (that == null)
         return false;
 
+      boolean this_present_domainId = true && this.isSetDomainId();
+      boolean that_present_domainId = true && that.isSetDomainId();
+      if (this_present_domainId || that_present_domainId) {
+        if (!(this_present_domainId && that_present_domainId))
+          return false;
+        if (!this.domainId.equals(that.domainId))
+          return false;
+      }
+
       boolean this_present_entityId = true && this.isSetEntityId();
       boolean that_present_entityId = true && that.isSetEntityId();
       if (this_present_entityId || that_present_entityId) {
@@ -32747,6 +34221,11 @@
     public int hashCode() {
       List<Object> list = new ArrayList<Object>();
 
+      boolean present_domainId = true && (isSetDomainId());
+      list.add(present_domainId);
+      if (present_domainId)
+        list.add(domainId);
+
       boolean present_entityId = true && (isSetEntityId());
       list.add(present_entityId);
       if (present_entityId)
@@ -32763,6 +34242,16 @@
 
       int lastComparison = 0;
 
+      lastComparison = Boolean.valueOf(isSetDomainId()).compareTo(other.isSetDomainId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetDomainId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.domainId, other.domainId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       lastComparison = Boolean.valueOf(isSetEntityId()).compareTo(other.isSetEntityId());
       if (lastComparison != 0) {
         return lastComparison;
@@ -32793,6 +34282,14 @@
       StringBuilder sb = new StringBuilder("getEntity_args(");
       boolean first = true;
 
+      sb.append("domainId:");
+      if (this.domainId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.domainId);
+      }
+      first = false;
+      if (!first) sb.append(", ");
       sb.append("entityId:");
       if (this.entityId == null) {
         sb.append("null");
@@ -32806,6 +34303,9 @@
 
     public void validate() throws org.apache.thrift.TException {
       // check for required fields
+      if (domainId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'domainId' was not present! Struct: " + toString());
+      }
       if (entityId == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'entityId' was not present! Struct: " + toString());
       }
@@ -32846,7 +34346,15 @@
             break;
           }
           switch (schemeField.id) {
-            case 1: // ENTITY_ID
+            case 1: // DOMAIN_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.domainId = iprot.readString();
+                struct.setDomainIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // ENTITY_ID
               if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
                 struct.entityId = iprot.readString();
                 struct.setEntityIdIsSet(true);
@@ -32869,6 +34377,11 @@
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.domainId != null) {
+          oprot.writeFieldBegin(DOMAIN_ID_FIELD_DESC);
+          oprot.writeString(struct.domainId);
+          oprot.writeFieldEnd();
+        }
         if (struct.entityId != null) {
           oprot.writeFieldBegin(ENTITY_ID_FIELD_DESC);
           oprot.writeString(struct.entityId);
@@ -32891,12 +34404,15 @@
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, getEntity_args struct) throws org.apache.thrift.TException {
         TTupleProtocol oprot = (TTupleProtocol) prot;
+        oprot.writeString(struct.domainId);
         oprot.writeString(struct.entityId);
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, getEntity_args struct) throws org.apache.thrift.TException {
         TTupleProtocol iprot = (TTupleProtocol) prot;
+        struct.domainId = iprot.readString();
+        struct.setDomainIdIsSet(true);
         struct.entityId = iprot.readString();
         struct.setEntityIdIsSet(true);
       }
@@ -33380,11 +34896,12 @@
   public static class searchEntities_args implements org.apache.thrift.TBase<searchEntities_args, searchEntities_args._Fields>, java.io.Serializable, Cloneable, Comparable<searchEntities_args>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("searchEntities_args");
 
-    private static final org.apache.thrift.protocol.TField USER_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("userId", org.apache.thrift.protocol.TType.STRING, (short)1);
-    private static final org.apache.thrift.protocol.TField ENTITY_TYPE_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("entityTypeId", org.apache.thrift.protocol.TType.STRING, (short)2);
-    private static final org.apache.thrift.protocol.TField FILTERS_FIELD_DESC = new org.apache.thrift.protocol.TField("filters", org.apache.thrift.protocol.TType.LIST, (short)3);
-    private static final org.apache.thrift.protocol.TField OFFSET_FIELD_DESC = new org.apache.thrift.protocol.TField("offset", org.apache.thrift.protocol.TType.I32, (short)4);
-    private static final org.apache.thrift.protocol.TField LIMIT_FIELD_DESC = new org.apache.thrift.protocol.TField("limit", org.apache.thrift.protocol.TType.I32, (short)5);
+    private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField USER_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("userId", org.apache.thrift.protocol.TType.STRING, (short)2);
+    private static final org.apache.thrift.protocol.TField ENTITY_TYPE_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("entityTypeId", org.apache.thrift.protocol.TType.STRING, (short)3);
+    private static final org.apache.thrift.protocol.TField FILTERS_FIELD_DESC = new org.apache.thrift.protocol.TField("filters", org.apache.thrift.protocol.TType.LIST, (short)4);
+    private static final org.apache.thrift.protocol.TField OFFSET_FIELD_DESC = new org.apache.thrift.protocol.TField("offset", org.apache.thrift.protocol.TType.I32, (short)5);
+    private static final org.apache.thrift.protocol.TField LIMIT_FIELD_DESC = new org.apache.thrift.protocol.TField("limit", org.apache.thrift.protocol.TType.I32, (short)6);
 
     private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
     static {
@@ -33392,6 +34909,7 @@
       schemes.put(TupleScheme.class, new searchEntities_argsTupleSchemeFactory());
     }
 
+    public String domainId; // required
     public String userId; // required
     public String entityTypeId; // required
     public List<org.apache.airavata.sharing.registry.models.SearchCriteria> filters; // required
@@ -33400,11 +34918,12 @@
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-      USER_ID((short)1, "userId"),
-      ENTITY_TYPE_ID((short)2, "entityTypeId"),
-      FILTERS((short)3, "filters"),
-      OFFSET((short)4, "offset"),
-      LIMIT((short)5, "limit");
+      DOMAIN_ID((short)1, "domainId"),
+      USER_ID((short)2, "userId"),
+      ENTITY_TYPE_ID((short)3, "entityTypeId"),
+      FILTERS((short)4, "filters"),
+      OFFSET((short)5, "offset"),
+      LIMIT((short)6, "limit");
 
       private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -33419,15 +34938,17 @@
        */
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
-          case 1: // USER_ID
+          case 1: // DOMAIN_ID
+            return DOMAIN_ID;
+          case 2: // USER_ID
             return USER_ID;
-          case 2: // ENTITY_TYPE_ID
+          case 3: // ENTITY_TYPE_ID
             return ENTITY_TYPE_ID;
-          case 3: // FILTERS
+          case 4: // FILTERS
             return FILTERS;
-          case 4: // OFFSET
+          case 5: // OFFSET
             return OFFSET;
-          case 5: // LIMIT
+          case 6: // LIMIT
             return LIMIT;
           default:
             return null;
@@ -33475,6 +34996,8 @@
     public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.USER_ID, new org.apache.thrift.meta_data.FieldMetaData("userId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.ENTITY_TYPE_ID, new org.apache.thrift.meta_data.FieldMetaData("entityTypeId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
@@ -33494,6 +35017,7 @@
     }
 
     public searchEntities_args(
+      String domainId,
       String userId,
       String entityTypeId,
       List<org.apache.airavata.sharing.registry.models.SearchCriteria> filters,
@@ -33501,6 +35025,7 @@
       int limit)
     {
       this();
+      this.domainId = domainId;
       this.userId = userId;
       this.entityTypeId = entityTypeId;
       this.filters = filters;
@@ -33515,6 +35040,9 @@
      */
     public searchEntities_args(searchEntities_args other) {
       __isset_bitfield = other.__isset_bitfield;
+      if (other.isSetDomainId()) {
+        this.domainId = other.domainId;
+      }
       if (other.isSetUserId()) {
         this.userId = other.userId;
       }
@@ -33538,6 +35066,7 @@
 
     @Override
     public void clear() {
+      this.domainId = null;
       this.userId = null;
       this.entityTypeId = null;
       this.filters = null;
@@ -33547,6 +35076,30 @@
       this.limit = 0;
     }
 
+    public String getDomainId() {
+      return this.domainId;
+    }
+
+    public searchEntities_args setDomainId(String domainId) {
+      this.domainId = domainId;
+      return this;
+    }
+
+    public void unsetDomainId() {
+      this.domainId = null;
+    }
+
+    /** Returns true if field domainId is set (has been assigned a value) and false otherwise */
+    public boolean isSetDomainId() {
+      return this.domainId != null;
+    }
+
+    public void setDomainIdIsSet(boolean value) {
+      if (!value) {
+        this.domainId = null;
+      }
+    }
+
     public String getUserId() {
       return this.userId;
     }
@@ -33682,6 +35235,14 @@
 
     public void setFieldValue(_Fields field, Object value) {
       switch (field) {
+      case DOMAIN_ID:
+        if (value == null) {
+          unsetDomainId();
+        } else {
+          setDomainId((String)value);
+        }
+        break;
+
       case USER_ID:
         if (value == null) {
           unsetUserId();
@@ -33727,6 +35288,9 @@
 
     public Object getFieldValue(_Fields field) {
       switch (field) {
+      case DOMAIN_ID:
+        return getDomainId();
+
       case USER_ID:
         return getUserId();
 
@@ -33753,6 +35317,8 @@
       }
 
       switch (field) {
+      case DOMAIN_ID:
+        return isSetDomainId();
       case USER_ID:
         return isSetUserId();
       case ENTITY_TYPE_ID:
@@ -33780,6 +35346,15 @@
       if (that == null)
         return false;
 
+      boolean this_present_domainId = true && this.isSetDomainId();
+      boolean that_present_domainId = true && that.isSetDomainId();
+      if (this_present_domainId || that_present_domainId) {
+        if (!(this_present_domainId && that_present_domainId))
+          return false;
+        if (!this.domainId.equals(that.domainId))
+          return false;
+      }
+
       boolean this_present_userId = true && this.isSetUserId();
       boolean that_present_userId = true && that.isSetUserId();
       if (this_present_userId || that_present_userId) {
@@ -33832,6 +35407,11 @@
     public int hashCode() {
       List<Object> list = new ArrayList<Object>();
 
+      boolean present_domainId = true && (isSetDomainId());
+      list.add(present_domainId);
+      if (present_domainId)
+        list.add(domainId);
+
       boolean present_userId = true && (isSetUserId());
       list.add(present_userId);
       if (present_userId)
@@ -33868,6 +35448,16 @@
 
       int lastComparison = 0;
 
+      lastComparison = Boolean.valueOf(isSetDomainId()).compareTo(other.isSetDomainId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetDomainId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.domainId, other.domainId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       lastComparison = Boolean.valueOf(isSetUserId()).compareTo(other.isSetUserId());
       if (lastComparison != 0) {
         return lastComparison;
@@ -33938,6 +35528,14 @@
       StringBuilder sb = new StringBuilder("searchEntities_args(");
       boolean first = true;
 
+      sb.append("domainId:");
+      if (this.domainId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.domainId);
+      }
+      first = false;
+      if (!first) sb.append(", ");
       sb.append("userId:");
       if (this.userId == null) {
         sb.append("null");
@@ -33975,6 +35573,9 @@
 
     public void validate() throws org.apache.thrift.TException {
       // check for required fields
+      if (domainId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'domainId' was not present! Struct: " + toString());
+      }
       if (userId == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'userId' was not present! Struct: " + toString());
       }
@@ -34025,7 +35626,15 @@
             break;
           }
           switch (schemeField.id) {
-            case 1: // USER_ID
+            case 1: // DOMAIN_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.domainId = iprot.readString();
+                struct.setDomainIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // USER_ID
               if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
                 struct.userId = iprot.readString();
                 struct.setUserIdIsSet(true);
@@ -34033,7 +35642,7 @@
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
-            case 2: // ENTITY_TYPE_ID
+            case 3: // ENTITY_TYPE_ID
               if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
                 struct.entityTypeId = iprot.readString();
                 struct.setEntityTypeIdIsSet(true);
@@ -34041,7 +35650,7 @@
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
-            case 3: // FILTERS
+            case 4: // FILTERS
               if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
                 {
                   org.apache.thrift.protocol.TList _list72 = iprot.readListBegin();
@@ -34060,7 +35669,7 @@
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
-            case 4: // OFFSET
+            case 5: // OFFSET
               if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
                 struct.offset = iprot.readI32();
                 struct.setOffsetIsSet(true);
@@ -34068,7 +35677,7 @@
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
-            case 5: // LIMIT
+            case 6: // LIMIT
               if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
                 struct.limit = iprot.readI32();
                 struct.setLimitIsSet(true);
@@ -34097,6 +35706,11 @@
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.domainId != null) {
+          oprot.writeFieldBegin(DOMAIN_ID_FIELD_DESC);
+          oprot.writeString(struct.domainId);
+          oprot.writeFieldEnd();
+        }
         if (struct.userId != null) {
           oprot.writeFieldBegin(USER_ID_FIELD_DESC);
           oprot.writeString(struct.userId);
@@ -34142,6 +35756,7 @@
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, searchEntities_args struct) throws org.apache.thrift.TException {
         TTupleProtocol oprot = (TTupleProtocol) prot;
+        oprot.writeString(struct.domainId);
         oprot.writeString(struct.userId);
         oprot.writeString(struct.entityTypeId);
         {
@@ -34158,6 +35773,8 @@
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, searchEntities_args struct) throws org.apache.thrift.TException {
         TTupleProtocol iprot = (TTupleProtocol) prot;
+        struct.domainId = iprot.readString();
+        struct.setDomainIdIsSet(true);
         struct.userId = iprot.readString();
         struct.setUserIdIsSet(true);
         struct.entityTypeId = iprot.readString();
@@ -34708,8 +36325,9 @@
   public static class getListOfSharedUsers_args implements org.apache.thrift.TBase<getListOfSharedUsers_args, getListOfSharedUsers_args._Fields>, java.io.Serializable, Cloneable, Comparable<getListOfSharedUsers_args>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getListOfSharedUsers_args");
 
-    private static final org.apache.thrift.protocol.TField ENTITY_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("entityId", org.apache.thrift.protocol.TType.STRING, (short)1);
-    private static final org.apache.thrift.protocol.TField PERMISSION_TYPE_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("permissionTypeId", org.apache.thrift.protocol.TType.STRING, (short)2);
+    private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField ENTITY_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("entityId", org.apache.thrift.protocol.TType.STRING, (short)2);
+    private static final org.apache.thrift.protocol.TField PERMISSION_TYPE_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("permissionTypeId", org.apache.thrift.protocol.TType.STRING, (short)3);
 
     private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
     static {
@@ -34717,13 +36335,15 @@
       schemes.put(TupleScheme.class, new getListOfSharedUsers_argsTupleSchemeFactory());
     }
 
+    public String domainId; // required
     public String entityId; // required
     public String permissionTypeId; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-      ENTITY_ID((short)1, "entityId"),
-      PERMISSION_TYPE_ID((short)2, "permissionTypeId");
+      DOMAIN_ID((short)1, "domainId"),
+      ENTITY_ID((short)2, "entityId"),
+      PERMISSION_TYPE_ID((short)3, "permissionTypeId");
 
       private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -34738,9 +36358,11 @@
        */
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
-          case 1: // ENTITY_ID
+          case 1: // DOMAIN_ID
+            return DOMAIN_ID;
+          case 2: // ENTITY_ID
             return ENTITY_ID;
-          case 2: // PERMISSION_TYPE_ID
+          case 3: // PERMISSION_TYPE_ID
             return PERMISSION_TYPE_ID;
           default:
             return null;
@@ -34785,6 +36407,8 @@
     public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.ENTITY_ID, new org.apache.thrift.meta_data.FieldMetaData("entityId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.PERMISSION_TYPE_ID, new org.apache.thrift.meta_data.FieldMetaData("permissionTypeId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
@@ -34797,10 +36421,12 @@
     }
 
     public getListOfSharedUsers_args(
+      String domainId,
       String entityId,
       String permissionTypeId)
     {
       this();
+      this.domainId = domainId;
       this.entityId = entityId;
       this.permissionTypeId = permissionTypeId;
     }
@@ -34809,6 +36435,9 @@
      * Performs a deep copy on <i>other</i>.
      */
     public getListOfSharedUsers_args(getListOfSharedUsers_args other) {
+      if (other.isSetDomainId()) {
+        this.domainId = other.domainId;
+      }
       if (other.isSetEntityId()) {
         this.entityId = other.entityId;
       }
@@ -34823,10 +36452,35 @@
 
     @Override
     public void clear() {
+      this.domainId = null;
       this.entityId = null;
       this.permissionTypeId = null;
     }
 
+    public String getDomainId() {
+      return this.domainId;
+    }
+
+    public getListOfSharedUsers_args setDomainId(String domainId) {
+      this.domainId = domainId;
+      return this;
+    }
+
+    public void unsetDomainId() {
+      this.domainId = null;
+    }
+
+    /** Returns true if field domainId is set (has been assigned a value) and false otherwise */
+    public boolean isSetDomainId() {
+      return this.domainId != null;
+    }
+
+    public void setDomainIdIsSet(boolean value) {
+      if (!value) {
+        this.domainId = null;
+      }
+    }
+
     public String getEntityId() {
       return this.entityId;
     }
@@ -34877,6 +36531,14 @@
 
     public void setFieldValue(_Fields field, Object value) {
       switch (field) {
+      case DOMAIN_ID:
+        if (value == null) {
+          unsetDomainId();
+        } else {
+          setDomainId((String)value);
+        }
+        break;
+
       case ENTITY_ID:
         if (value == null) {
           unsetEntityId();
@@ -34898,6 +36560,9 @@
 
     public Object getFieldValue(_Fields field) {
       switch (field) {
+      case DOMAIN_ID:
+        return getDomainId();
+
       case ENTITY_ID:
         return getEntityId();
 
@@ -34915,6 +36580,8 @@
       }
 
       switch (field) {
+      case DOMAIN_ID:
+        return isSetDomainId();
       case ENTITY_ID:
         return isSetEntityId();
       case PERMISSION_TYPE_ID:
@@ -34936,6 +36603,15 @@
       if (that == null)
         return false;
 
+      boolean this_present_domainId = true && this.isSetDomainId();
+      boolean that_present_domainId = true && that.isSetDomainId();
+      if (this_present_domainId || that_present_domainId) {
+        if (!(this_present_domainId && that_present_domainId))
+          return false;
+        if (!this.domainId.equals(that.domainId))
+          return false;
+      }
+
       boolean this_present_entityId = true && this.isSetEntityId();
       boolean that_present_entityId = true && that.isSetEntityId();
       if (this_present_entityId || that_present_entityId) {
@@ -34961,6 +36637,11 @@
     public int hashCode() {
       List<Object> list = new ArrayList<Object>();
 
+      boolean present_domainId = true && (isSetDomainId());
+      list.add(present_domainId);
+      if (present_domainId)
+        list.add(domainId);
+
       boolean present_entityId = true && (isSetEntityId());
       list.add(present_entityId);
       if (present_entityId)
@@ -34982,6 +36663,16 @@
 
       int lastComparison = 0;
 
+      lastComparison = Boolean.valueOf(isSetDomainId()).compareTo(other.isSetDomainId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetDomainId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.domainId, other.domainId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       lastComparison = Boolean.valueOf(isSetEntityId()).compareTo(other.isSetEntityId());
       if (lastComparison != 0) {
         return lastComparison;
@@ -35022,6 +36713,14 @@
       StringBuilder sb = new StringBuilder("getListOfSharedUsers_args(");
       boolean first = true;
 
+      sb.append("domainId:");
+      if (this.domainId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.domainId);
+      }
+      first = false;
+      if (!first) sb.append(", ");
       sb.append("entityId:");
       if (this.entityId == null) {
         sb.append("null");
@@ -35043,6 +36742,9 @@
 
     public void validate() throws org.apache.thrift.TException {
       // check for required fields
+      if (domainId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'domainId' was not present! Struct: " + toString());
+      }
       if (entityId == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'entityId' was not present! Struct: " + toString());
       }
@@ -35086,7 +36788,15 @@
             break;
           }
           switch (schemeField.id) {
-            case 1: // ENTITY_ID
+            case 1: // DOMAIN_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.domainId = iprot.readString();
+                struct.setDomainIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // ENTITY_ID
               if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
                 struct.entityId = iprot.readString();
                 struct.setEntityIdIsSet(true);
@@ -35094,7 +36804,7 @@
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
-            case 2: // PERMISSION_TYPE_ID
+            case 3: // PERMISSION_TYPE_ID
               if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
                 struct.permissionTypeId = iprot.readString();
                 struct.setPermissionTypeIdIsSet(true);
@@ -35117,6 +36827,11 @@
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.domainId != null) {
+          oprot.writeFieldBegin(DOMAIN_ID_FIELD_DESC);
+          oprot.writeString(struct.domainId);
+          oprot.writeFieldEnd();
+        }
         if (struct.entityId != null) {
           oprot.writeFieldBegin(ENTITY_ID_FIELD_DESC);
           oprot.writeString(struct.entityId);
@@ -35144,6 +36859,7 @@
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, getListOfSharedUsers_args struct) throws org.apache.thrift.TException {
         TTupleProtocol oprot = (TTupleProtocol) prot;
+        oprot.writeString(struct.domainId);
         oprot.writeString(struct.entityId);
         oprot.writeString(struct.permissionTypeId);
       }
@@ -35151,6 +36867,8 @@
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, getListOfSharedUsers_args struct) throws org.apache.thrift.TException {
         TTupleProtocol iprot = (TTupleProtocol) prot;
+        struct.domainId = iprot.readString();
+        struct.setDomainIdIsSet(true);
         struct.entityId = iprot.readString();
         struct.setEntityIdIsSet(true);
         struct.permissionTypeId = iprot.readString();
@@ -35685,8 +37403,9 @@
   public static class getListOfSharedGroups_args implements org.apache.thrift.TBase<getListOfSharedGroups_args, getListOfSharedGroups_args._Fields>, java.io.Serializable, Cloneable, Comparable<getListOfSharedGroups_args>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getListOfSharedGroups_args");
 
-    private static final org.apache.thrift.protocol.TField ENTITY_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("entityId", org.apache.thrift.protocol.TType.STRING, (short)1);
-    private static final org.apache.thrift.protocol.TField PERMISSION_TYPE_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("permissionTypeId", org.apache.thrift.protocol.TType.STRING, (short)2);
+    private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField ENTITY_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("entityId", org.apache.thrift.protocol.TType.STRING, (short)2);
+    private static final org.apache.thrift.protocol.TField PERMISSION_TYPE_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("permissionTypeId", org.apache.thrift.protocol.TType.STRING, (short)3);
 
     private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
     static {
@@ -35694,13 +37413,15 @@
       schemes.put(TupleScheme.class, new getListOfSharedGroups_argsTupleSchemeFactory());
     }
 
+    public String domainId; // required
     public String entityId; // required
     public String permissionTypeId; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-      ENTITY_ID((short)1, "entityId"),
-      PERMISSION_TYPE_ID((short)2, "permissionTypeId");
+      DOMAIN_ID((short)1, "domainId"),
+      ENTITY_ID((short)2, "entityId"),
+      PERMISSION_TYPE_ID((short)3, "permissionTypeId");
 
       private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -35715,9 +37436,11 @@
        */
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
-          case 1: // ENTITY_ID
+          case 1: // DOMAIN_ID
+            return DOMAIN_ID;
+          case 2: // ENTITY_ID
             return ENTITY_ID;
-          case 2: // PERMISSION_TYPE_ID
+          case 3: // PERMISSION_TYPE_ID
             return PERMISSION_TYPE_ID;
           default:
             return null;
@@ -35762,6 +37485,8 @@
     public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.ENTITY_ID, new org.apache.thrift.meta_data.FieldMetaData("entityId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.PERMISSION_TYPE_ID, new org.apache.thrift.meta_data.FieldMetaData("permissionTypeId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
@@ -35774,10 +37499,12 @@
     }
 
     public getListOfSharedGroups_args(
+      String domainId,
       String entityId,
       String permissionTypeId)
     {
       this();
+      this.domainId = domainId;
       this.entityId = entityId;
       this.permissionTypeId = permissionTypeId;
     }
@@ -35786,6 +37513,9 @@
      * Performs a deep copy on <i>other</i>.
      */
     public getListOfSharedGroups_args(getListOfSharedGroups_args other) {
+      if (other.isSetDomainId()) {
+        this.domainId = other.domainId;
+      }
       if (other.isSetEntityId()) {
         this.entityId = other.entityId;
       }
@@ -35800,10 +37530,35 @@
 
     @Override
     public void clear() {
+      this.domainId = null;
       this.entityId = null;
       this.permissionTypeId = null;
     }
 
+    public String getDomainId() {
+      return this.domainId;
+    }
+
+    public getListOfSharedGroups_args setDomainId(String domainId) {
+      this.domainId = domainId;
+      return this;
+    }
+
+    public void unsetDomainId() {
+      this.domainId = null;
+    }
+
+    /** Returns true if field domainId is set (has been assigned a value) and false otherwise */
+    public boolean isSetDomainId() {
+      return this.domainId != null;
+    }
+
+    public void setDomainIdIsSet(boolean value) {
+      if (!value) {
+        this.domainId = null;
+      }
+    }
+
     public String getEntityId() {
       return this.entityId;
     }
@@ -35854,6 +37609,14 @@
 
     public void setFieldValue(_Fields field, Object value) {
       switch (field) {
+      case DOMAIN_ID:
+        if (value == null) {
+          unsetDomainId();
+        } else {
+          setDomainId((String)value);
+        }
+        break;
+
       case ENTITY_ID:
         if (value == null) {
           unsetEntityId();
@@ -35875,6 +37638,9 @@
 
     public Object getFieldValue(_Fields field) {
       switch (field) {
+      case DOMAIN_ID:
+        return getDomainId();
+
       case ENTITY_ID:
         return getEntityId();
 
@@ -35892,6 +37658,8 @@
       }
 
       switch (field) {
+      case DOMAIN_ID:
+        return isSetDomainId();
       case ENTITY_ID:
         return isSetEntityId();
       case PERMISSION_TYPE_ID:
@@ -35913,6 +37681,15 @@
       if (that == null)
         return false;
 
+      boolean this_present_domainId = true && this.isSetDomainId();
+      boolean that_present_domainId = true && that.isSetDomainId();
+      if (this_present_domainId || that_present_domainId) {
+        if (!(this_present_domainId && that_present_domainId))
+          return false;
+        if (!this.domainId.equals(that.domainId))
+          return false;
+      }
+
       boolean this_present_entityId = true && this.isSetEntityId();
       boolean that_present_entityId = true && that.isSetEntityId();
       if (this_present_entityId || that_present_entityId) {
@@ -35938,6 +37715,11 @@
     public int hashCode() {
       List<Object> list = new ArrayList<Object>();
 
+      boolean present_domainId = true && (isSetDomainId());
+      list.add(present_domainId);
+      if (present_domainId)
+        list.add(domainId);
+
       boolean present_entityId = true && (isSetEntityId());
       list.add(present_entityId);
       if (present_entityId)
@@ -35959,6 +37741,16 @@
 
       int lastComparison = 0;
 
+      lastComparison = Boolean.valueOf(isSetDomainId()).compareTo(other.isSetDomainId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetDomainId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.domainId, other.domainId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       lastComparison = Boolean.valueOf(isSetEntityId()).compareTo(other.isSetEntityId());
       if (lastComparison != 0) {
         return lastComparison;
@@ -35999,6 +37791,14 @@
       StringBuilder sb = new StringBuilder("getListOfSharedGroups_args(");
       boolean first = true;
 
+      sb.append("domainId:");
+      if (this.domainId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.domainId);
+      }
+      first = false;
+      if (!first) sb.append(", ");
       sb.append("entityId:");
       if (this.entityId == null) {
         sb.append("null");
@@ -36020,6 +37820,9 @@
 
     public void validate() throws org.apache.thrift.TException {
       // check for required fields
+      if (domainId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'domainId' was not present! Struct: " + toString());
+      }
       if (entityId == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'entityId' was not present! Struct: " + toString());
       }
@@ -36063,7 +37866,15 @@
             break;
           }
           switch (schemeField.id) {
-            case 1: // ENTITY_ID
+            case 1: // DOMAIN_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.domainId = iprot.readString();
+                struct.setDomainIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // ENTITY_ID
               if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
                 struct.entityId = iprot.readString();
                 struct.setEntityIdIsSet(true);
@@ -36071,7 +37882,7 @@
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
-            case 2: // PERMISSION_TYPE_ID
+            case 3: // PERMISSION_TYPE_ID
               if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
                 struct.permissionTypeId = iprot.readString();
                 struct.setPermissionTypeIdIsSet(true);
@@ -36094,6 +37905,11 @@
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.domainId != null) {
+          oprot.writeFieldBegin(DOMAIN_ID_FIELD_DESC);
+          oprot.writeString(struct.domainId);
+          oprot.writeFieldEnd();
+        }
         if (struct.entityId != null) {
           oprot.writeFieldBegin(ENTITY_ID_FIELD_DESC);
           oprot.writeString(struct.entityId);
@@ -36121,6 +37937,7 @@
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, getListOfSharedGroups_args struct) throws org.apache.thrift.TException {
         TTupleProtocol oprot = (TTupleProtocol) prot;
+        oprot.writeString(struct.domainId);
         oprot.writeString(struct.entityId);
         oprot.writeString(struct.permissionTypeId);
       }
@@ -36128,6 +37945,8 @@
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, getListOfSharedGroups_args struct) throws org.apache.thrift.TException {
         TTupleProtocol iprot = (TTupleProtocol) prot;
+        struct.domainId = iprot.readString();
+        struct.setDomainIdIsSet(true);
         struct.entityId = iprot.readString();
         struct.setEntityIdIsSet(true);
         struct.permissionTypeId = iprot.readString();
@@ -38316,7 +40135,8 @@
   public static class deletePermissionType_args implements org.apache.thrift.TBase<deletePermissionType_args, deletePermissionType_args._Fields>, java.io.Serializable, Cloneable, Comparable<deletePermissionType_args>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("deletePermissionType_args");
 
-    private static final org.apache.thrift.protocol.TField ENTITY_TYPE_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("entityTypeId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField PERMISSION_TYPE_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("permissionTypeId", org.apache.thrift.protocol.TType.STRING, (short)2);
 
     private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
     static {
@@ -38324,11 +40144,13 @@
       schemes.put(TupleScheme.class, new deletePermissionType_argsTupleSchemeFactory());
     }
 
-    public String entityTypeId; // required
+    public String domainId; // required
+    public String permissionTypeId; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-      ENTITY_TYPE_ID((short)1, "entityTypeId");
+      DOMAIN_ID((short)1, "domainId"),
+      PERMISSION_TYPE_ID((short)2, "permissionTypeId");
 
       private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -38343,8 +40165,10 @@
        */
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
-          case 1: // ENTITY_TYPE_ID
-            return ENTITY_TYPE_ID;
+          case 1: // DOMAIN_ID
+            return DOMAIN_ID;
+          case 2: // PERMISSION_TYPE_ID
+            return PERMISSION_TYPE_ID;
           default:
             return null;
         }
@@ -38388,7 +40212,9 @@
     public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
-      tmpMap.put(_Fields.ENTITY_TYPE_ID, new org.apache.thrift.meta_data.FieldMetaData("entityTypeId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+      tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+      tmpMap.put(_Fields.PERMISSION_TYPE_ID, new org.apache.thrift.meta_data.FieldMetaData("permissionTypeId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       metaDataMap = Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(deletePermissionType_args.class, metaDataMap);
@@ -38398,18 +40224,23 @@
     }
 
     public deletePermissionType_args(
-      String entityTypeId)
+      String domainId,
+      String permissionTypeId)
     {
       this();
-      this.entityTypeId = entityTypeId;
+      this.domainId = domainId;
+      this.permissionTypeId = permissionTypeId;
     }
 
     /**
      * Performs a deep copy on <i>other</i>.
      */
     public deletePermissionType_args(deletePermissionType_args other) {
-      if (other.isSetEntityTypeId()) {
-        this.entityTypeId = other.entityTypeId;
+      if (other.isSetDomainId()) {
+        this.domainId = other.domainId;
+      }
+      if (other.isSetPermissionTypeId()) {
+        this.permissionTypeId = other.permissionTypeId;
       }
     }
 
@@ -38419,40 +40250,73 @@
 
     @Override
     public void clear() {
-      this.entityTypeId = null;
+      this.domainId = null;
+      this.permissionTypeId = null;
     }
 
-    public String getEntityTypeId() {
-      return this.entityTypeId;
+    public String getDomainId() {
+      return this.domainId;
     }
 
-    public deletePermissionType_args setEntityTypeId(String entityTypeId) {
-      this.entityTypeId = entityTypeId;
+    public deletePermissionType_args setDomainId(String domainId) {
+      this.domainId = domainId;
       return this;
     }
 
-    public void unsetEntityTypeId() {
-      this.entityTypeId = null;
+    public void unsetDomainId() {
+      this.domainId = null;
     }
 
-    /** Returns true if field entityTypeId is set (has been assigned a value) and false otherwise */
-    public boolean isSetEntityTypeId() {
-      return this.entityTypeId != null;
+    /** Returns true if field domainId is set (has been assigned a value) and false otherwise */
+    public boolean isSetDomainId() {
+      return this.domainId != null;
     }
 
-    public void setEntityTypeIdIsSet(boolean value) {
+    public void setDomainIdIsSet(boolean value) {
       if (!value) {
-        this.entityTypeId = null;
+        this.domainId = null;
+      }
+    }
+
+    public String getPermissionTypeId() {
+      return this.permissionTypeId;
+    }
+
+    public deletePermissionType_args setPermissionTypeId(String permissionTypeId) {
+      this.permissionTypeId = permissionTypeId;
+      return this;
+    }
+
+    public void unsetPermissionTypeId() {
+      this.permissionTypeId = null;
+    }
+
+    /** Returns true if field permissionTypeId is set (has been assigned a value) and false otherwise */
+    public boolean isSetPermissionTypeId() {
+      return this.permissionTypeId != null;
+    }
+
+    public void setPermissionTypeIdIsSet(boolean value) {
+      if (!value) {
+        this.permissionTypeId = null;
       }
     }
 
     public void setFieldValue(_Fields field, Object value) {
       switch (field) {
-      case ENTITY_TYPE_ID:
+      case DOMAIN_ID:
         if (value == null) {
-          unsetEntityTypeId();
+          unsetDomainId();
         } else {
-          setEntityTypeId((String)value);
+          setDomainId((String)value);
+        }
+        break;
+
+      case PERMISSION_TYPE_ID:
+        if (value == null) {
+          unsetPermissionTypeId();
+        } else {
+          setPermissionTypeId((String)value);
         }
         break;
 
@@ -38461,8 +40325,11 @@
 
     public Object getFieldValue(_Fields field) {
       switch (field) {
-      case ENTITY_TYPE_ID:
-        return getEntityTypeId();
+      case DOMAIN_ID:
+        return getDomainId();
+
+      case PERMISSION_TYPE_ID:
+        return getPermissionTypeId();
 
       }
       throw new IllegalStateException();
@@ -38475,8 +40342,10 @@
       }
 
       switch (field) {
-      case ENTITY_TYPE_ID:
-        return isSetEntityTypeId();
+      case DOMAIN_ID:
+        return isSetDomainId();
+      case PERMISSION_TYPE_ID:
+        return isSetPermissionTypeId();
       }
       throw new IllegalStateException();
     }
@@ -38494,12 +40363,21 @@
       if (that == null)
         return false;
 
-      boolean this_present_entityTypeId = true && this.isSetEntityTypeId();
-      boolean that_present_entityTypeId = true && that.isSetEntityTypeId();
-      if (this_present_entityTypeId || that_present_entityTypeId) {
-        if (!(this_present_entityTypeId && that_present_entityTypeId))
+      boolean this_present_domainId = true && this.isSetDomainId();
+      boolean that_present_domainId = true && that.isSetDomainId();
+      if (this_present_domainId || that_present_domainId) {
+        if (!(this_present_domainId && that_present_domainId))
           return false;
-        if (!this.entityTypeId.equals(that.entityTypeId))
+        if (!this.domainId.equals(that.domainId))
+          return false;
+      }
+
+      boolean this_present_permissionTypeId = true && this.isSetPermissionTypeId();
+      boolean that_present_permissionTypeId = true && that.isSetPermissionTypeId();
+      if (this_present_permissionTypeId || that_present_permissionTypeId) {
+        if (!(this_present_permissionTypeId && that_present_permissionTypeId))
+          return false;
+        if (!this.permissionTypeId.equals(that.permissionTypeId))
           return false;
       }
 
@@ -38510,10 +40388,15 @@
     public int hashCode() {
       List<Object> list = new ArrayList<Object>();
 
-      boolean present_entityTypeId = true && (isSetEntityTypeId());
-      list.add(present_entityTypeId);
-      if (present_entityTypeId)
-        list.add(entityTypeId);
+      boolean present_domainId = true && (isSetDomainId());
+      list.add(present_domainId);
+      if (present_domainId)
+        list.add(domainId);
+
+      boolean present_permissionTypeId = true && (isSetPermissionTypeId());
+      list.add(present_permissionTypeId);
+      if (present_permissionTypeId)
+        list.add(permissionTypeId);
 
       return list.hashCode();
     }
@@ -38526,12 +40409,22 @@
 
       int lastComparison = 0;
 
-      lastComparison = Boolean.valueOf(isSetEntityTypeId()).compareTo(other.isSetEntityTypeId());
+      lastComparison = Boolean.valueOf(isSetDomainId()).compareTo(other.isSetDomainId());
       if (lastComparison != 0) {
         return lastComparison;
       }
-      if (isSetEntityTypeId()) {
-        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.entityTypeId, other.entityTypeId);
+      if (isSetDomainId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.domainId, other.domainId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = Boolean.valueOf(isSetPermissionTypeId()).compareTo(other.isSetPermissionTypeId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetPermissionTypeId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.permissionTypeId, other.permissionTypeId);
         if (lastComparison != 0) {
           return lastComparison;
         }
@@ -38556,11 +40449,19 @@
       StringBuilder sb = new StringBuilder("deletePermissionType_args(");
       boolean first = true;
 
-      sb.append("entityTypeId:");
-      if (this.entityTypeId == null) {
+      sb.append("domainId:");
+      if (this.domainId == null) {
         sb.append("null");
       } else {
-        sb.append(this.entityTypeId);
+        sb.append(this.domainId);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("permissionTypeId:");
+      if (this.permissionTypeId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.permissionTypeId);
       }
       first = false;
       sb.append(")");
@@ -38569,8 +40470,11 @@
 
     public void validate() throws org.apache.thrift.TException {
       // check for required fields
-      if (entityTypeId == null) {
-        throw new org.apache.thrift.protocol.TProtocolException("Required field 'entityTypeId' was not present! Struct: " + toString());
+      if (domainId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'domainId' was not present! Struct: " + toString());
+      }
+      if (permissionTypeId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'permissionTypeId' was not present! Struct: " + toString());
       }
       // check for sub-struct validity
     }
@@ -38609,10 +40513,18 @@
             break;
           }
           switch (schemeField.id) {
-            case 1: // ENTITY_TYPE_ID
+            case 1: // DOMAIN_ID
               if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
-                struct.entityTypeId = iprot.readString();
-                struct.setEntityTypeIdIsSet(true);
+                struct.domainId = iprot.readString();
+                struct.setDomainIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // PERMISSION_TYPE_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.permissionTypeId = iprot.readString();
+                struct.setPermissionTypeIdIsSet(true);
               } else { 
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
@@ -38632,9 +40544,14 @@
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
-        if (struct.entityTypeId != null) {
-          oprot.writeFieldBegin(ENTITY_TYPE_ID_FIELD_DESC);
-          oprot.writeString(struct.entityTypeId);
+        if (struct.domainId != null) {
+          oprot.writeFieldBegin(DOMAIN_ID_FIELD_DESC);
+          oprot.writeString(struct.domainId);
+          oprot.writeFieldEnd();
+        }
+        if (struct.permissionTypeId != null) {
+          oprot.writeFieldBegin(PERMISSION_TYPE_ID_FIELD_DESC);
+          oprot.writeString(struct.permissionTypeId);
           oprot.writeFieldEnd();
         }
         oprot.writeFieldStop();
@@ -38654,14 +40571,17 @@
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, deletePermissionType_args struct) throws org.apache.thrift.TException {
         TTupleProtocol oprot = (TTupleProtocol) prot;
-        oprot.writeString(struct.entityTypeId);
+        oprot.writeString(struct.domainId);
+        oprot.writeString(struct.permissionTypeId);
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, deletePermissionType_args struct) throws org.apache.thrift.TException {
         TTupleProtocol iprot = (TTupleProtocol) prot;
-        struct.entityTypeId = iprot.readString();
-        struct.setEntityTypeIdIsSet(true);
+        struct.domainId = iprot.readString();
+        struct.setDomainIdIsSet(true);
+        struct.permissionTypeId = iprot.readString();
+        struct.setPermissionTypeIdIsSet(true);
       }
     }
 
@@ -39138,7 +41058,8 @@
   public static class getPermissionType_args implements org.apache.thrift.TBase<getPermissionType_args, getPermissionType_args._Fields>, java.io.Serializable, Cloneable, Comparable<getPermissionType_args>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getPermissionType_args");
 
-    private static final org.apache.thrift.protocol.TField PERMISSION_TYPE_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("permissionTypeId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField DOMAIN_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("domainId", org.apache.thrift.protocol.TType.STRING, (short)1);
+    private static final org.apache.thrift.protocol.TField PERMISSION_TYPE_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("permissionTypeId", org.apache.thrift.protocol.TType.STRING, (short)2);
 
     private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
     static {
@@ -39146,11 +41067,13 @@
       schemes.put(TupleScheme.class, new getPermissionType_argsTupleSchemeFactory());
     }
 
+    public String domainId; // required
     public String permissionTypeId; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-      PERMISSION_TYPE_ID((short)1, "permissionTypeId");
+      DOMAIN_ID((short)1, "domainId"),
+      PERMISSION_TYPE_ID((short)2, "permissionTypeId");
 
       private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -39165,7 +41088,9 @@
        */
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
-          case 1: // PERMISSION_TYPE_ID
+          case 1: // DOMAIN_ID
+            return DOMAIN_ID;
+          case 2: // PERMISSION_TYPE_ID
             return PERMISSION_TYPE_ID;
           default:
             return null;
@@ -39210,6 +41135,8 @@
     public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.DOMAIN_ID, new org.apache.thrift.meta_data.FieldMetaData("domainId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       tmpMap.put(_Fields.PERMISSION_TYPE_ID, new org.apache.thrift.meta_data.FieldMetaData("permissionTypeId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       metaDataMap = Collections.unmodifiableMap(tmpMap);
@@ -39220,9 +41147,11 @@
     }
 
     public getPermissionType_args(
+      String domainId,
       String permissionTypeId)
     {
       this();
+      this.domainId = domainId;
       this.permissionTypeId = permissionTypeId;
     }
 
@@ -39230,6 +41159,9 @@
      * Performs a deep copy on <i>other</i>.
      */
     public getPermissionType_args(getPermissionType_args other) {
+      if (other.isSetDomainId()) {
+        this.domainId = other.domainId;
+      }
       if (other.isSetPermissionTypeId()) {
         this.permissionTypeId = other.permissionTypeId;
       }
@@ -39241,9 +41173,34 @@
 
     @Override
     public void clear() {
+      this.domainId = null;
       this.permissionTypeId = null;
     }
 
+    public String getDomainId() {
+      return this.domainId;
+    }
+
+    public getPermissionType_args setDomainId(String domainId) {
+      this.domainId = domainId;
+      return this;
+    }
+
+    public void unsetDomainId() {
+      this.domainId = null;
+    }
+
+    /** Returns true if field domainId is set (has been assigned a value) and false otherwise */
+    public boolean isSetDomainId() {
+      return this.domainId != null;
+    }
+
+    public void setDomainIdIsSet(boolean value) {
+      if (!value) {
+        this.domainId = null;
+      }
+    }
+
     public String getPermissionTypeId() {
       return this.permissionTypeId;
     }
@@ -39270,6 +41227,14 @@
 
     public void setFieldValue(_Fields field, Object value) {
       switch (field) {
+      case DOMAIN_ID:
+        if (value == null) {
+          unsetDomainId();
+        } else {
+          setDomainId((String)value);
+        }
+        break;
+
       case PERMISSION_TYPE_ID:
         if (value == null) {
           unsetPermissionTypeId();
@@ -39283,6 +41248,9 @@
 
     public Object getFieldValue(_Fields field) {
       switch (field) {
+      case DOMAIN_ID:
+        return getDomainId();
+
       case PERMISSION_TYPE_ID:
         return getPermissionTypeId();
 
@@ -39297,6 +41265,8 @@
       }
 
       switch (field) {
+      case DOMAIN_ID:
+        return isSetDomainId();
       case PERMISSION_TYPE_ID:
         return isSetPermissionTypeId();
       }
@@ -39316,6 +41286,15 @@
       if (that == null)
         return false;
 
+      boolean this_present_domainId = true && this.isSetDomainId();
+      boolean that_present_domainId = true && that.isSetDomainId();
+      if (this_present_domainId || that_present_domainId) {
+        if (!(this_present_domainId && that_present_domainId))
+          return false;
+        if (!this.domainId.equals(that.domainId))
+          return false;
+      }
+
       boolean this_present_permissionTypeId = true && this.isSetPermissionTypeId();
       boolean that_present_permissionTypeId = true && that.isSetPermissionTypeId();
       if (this_present_permissionTypeId || that_present_permissionTypeId) {
@@ -39332,6 +41311,11 @@
     public int hashCode() {
       List<Object> list = new ArrayList<Object>();
 
+      boolean present_domainId = true && (isSetDomainId());
+      list.add(present_domainId);
+      if (present_domainId)
+        list.add(domainId);
+
       boolean present_permissionTypeId = true && (isSetPermissionTypeId());
       list.add(present_permissionTypeId);
       if (present_permissionTypeId)
@@ -39348,6 +41332,16 @@
 
       int lastComparison = 0;
 
+      lastComparison = Boolean.valueOf(isSetDomainId()).compareTo(other.isSetDomainId());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetDomainId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.domainId, other.domainId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       lastComparison = Boolean.valueOf(isSetPermissionTypeId()).compareTo(other.isSetPermissionTypeId());
       if (lastComparison != 0) {
         return lastComparison;
@@ -39378,6 +41372,14 @@
       StringBuilder sb = new StringBuilder("getPermissionType_args(");
       boolean first = true;
 
+      sb.append("domainId:");
+      if (this.domainId == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.domainId);
+      }
+      first = false;
+      if (!first) sb.append(", ");
       sb.append("permissionTypeId:");
       if (this.permissionTypeId == null) {
         sb.append("null");
@@ -39391,6 +41393,9 @@
 
     public void validate() throws org.apache.thrift.TException {
       // check for required fields
+      if (domainId == null) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'domainId' was not present! Struct: " + toString());
+      }
       if (permissionTypeId == null) {
         throw new org.apache.thrift.protocol.TProtocolException("Required field 'permissionTypeId' was not present! Struct: " + toString());
       }
@@ -39431,7 +41436,15 @@
             break;
           }
           switch (schemeField.id) {
-            case 1: // PERMISSION_TYPE_ID
+            case 1: // DOMAIN_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.domainId = iprot.readString();
+                struct.setDomainIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // PERMISSION_TYPE_ID
               if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
                 struct.permissionTypeId = iprot.readString();
                 struct.setPermissionTypeIdIsSet(true);
@@ -39454,6 +41467,11 @@
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.domainId != null) {
+          oprot.writeFieldBegin(DOMAIN_ID_FIELD_DESC);
+          oprot.writeString(struct.domainId);
+          oprot.writeFieldEnd();
+        }
         if (struct.permissionTypeId != null) {
           oprot.writeFieldBegin(PERMISSION_TYPE_ID_FIELD_DESC);
           oprot.writeString(struct.permissionTypeId);
@@ -39476,12 +41494,15 @@
       @Override
       public void write(org.apache.thrift.protocol.TProtocol prot, getPermissionType_args struct) throws org.apache.thrift.TException {
         TTupleProtocol oprot = (TTupleProtocol) prot;
+        oprot.writeString(struct.domainId);
         oprot.writeString(struct.permissionTypeId);
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, getPermissionType_args struct) throws org.apache.thrift.TException {
         TTupleProtocol iprot = (TTupleProtocol) prot;
+        struct.domainId = iprot.readString();
+        struct.setDomainIdIsSet(true);
         struct.permissionTypeId = iprot.readString();
         struct.setPermissionTypeIdIsSet(true);
       }
diff --git a/modules/sharing-registry/sharing-service-docs/api-docs/sharing_cpi.html b/modules/sharing-registry/sharing-service-docs/api-docs/sharing_cpi.html
index 9b6253d..ed7fb89 100644
--- a/modules/sharing-registry/sharing-service-docs/api-docs/sharing_cpi.html
+++ b/modules/sharing-registry/sharing-service-docs/api-docs/sharing_cpi.html
@@ -91,11 +91,13 @@
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
 </pre><p>API method to update existing user</p>
 <br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_deleteUser">Function: SharingRegistryService.deleteUser</h4>
-<pre><code>bool</code> deleteUser(<code>string</code> userId)
+<pre><code>bool</code> deleteUser(<code>string</code> domainId,
+                <code>string</code> userId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
 </pre><p>API method to delete user</p>
 <br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getUser">Function: SharingRegistryService.getUser</h4>
-<pre><code><a href="sharing_models.html#Struct_User">sharing_models.User</a></code> getUser(<code>string</code> userId)
+<pre><code><a href="sharing_models.html#Struct_User">sharing_models.User</a></code> getUser(<code>string</code> domainId,
+                            <code>string</code> userId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
 </pre><p>API method to get a user</p>
 <br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getUsers">Function: SharingRegistryService.getUsers</h4>
@@ -116,11 +118,13 @@
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
 </pre><p>API method to update a group</p>
 <br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_deleteGroup">Function: SharingRegistryService.deleteGroup</h4>
-<pre><code>bool</code> deleteGroup(<code>string</code> groupId)
+<pre><code>bool</code> deleteGroup(<code>string</code> domainId,
+                 <code>string</code> groupId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
 </pre><p>API method to delete a group</p>
 <br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getGroup">Function: SharingRegistryService.getGroup</h4>
-<pre><code><a href="sharing_models.html#Struct_UserGroup">sharing_models.UserGroup</a></code> getGroup(<code>string</code> groupId)
+<pre><code><a href="sharing_models.html#Struct_UserGroup">sharing_models.UserGroup</a></code> getGroup(<code>string</code> domainId,
+                                  <code>string</code> groupId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
 </pre><p>API method to get a group</p>
 <br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getGroups">Function: SharingRegistryService.getGroups</h4>
@@ -129,34 +133,40 @@
                                          <code>i32</code> limit)
 </pre><p>API method to get groups in a domainId. Results are reverse sorted based on created time.</p>
 <br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_addUsersToGroup">Function: SharingRegistryService.addUsersToGroup</h4>
-<pre><code>bool</code> addUsersToGroup(<code>list&lt;<code>string</code>&gt;</code> userIds,
+<pre><code>bool</code> addUsersToGroup(<code>string</code> domainId,
+                     <code>list&lt;<code>string</code>&gt;</code> userIds,
                      <code>string</code> groupId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
 </pre><p>API method to add list of users to a group</p>
 <br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_removeUsersFromGroup">Function: SharingRegistryService.removeUsersFromGroup</h4>
-<pre><code>bool</code> removeUsersFromGroup(<code>list&lt;<code>string</code>&gt;</code> userIds,
+<pre><code>bool</code> removeUsersFromGroup(<code>string</code> domainId,
+                          <code>list&lt;<code>string</code>&gt;</code> userIds,
                           <code>string</code> groupId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
 </pre><p>API method to remove users from a group</p>
 <br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getGroupMembersOfTypeUser">Function: SharingRegistryService.getGroupMembersOfTypeUser</h4>
-<pre><code>list&lt;<code><a href="sharing_models.html#Struct_User">sharing_models.User</a></code>&gt;</code> getGroupMembersOfTypeUser(<code>string</code> groupId,
+<pre><code>list&lt;<code><a href="sharing_models.html#Struct_User">sharing_models.User</a></code>&gt;</code> getGroupMembersOfTypeUser(<code>string</code> domainId,
+                                                    <code>string</code> groupId,
                                                     <code>i32</code> offset,
                                                     <code>i32</code> limit)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
 </pre><p>API method to get list of child users in a group. Only the direct members will be returned. Results are reverse time sorted based on creation time</p>
 <br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getGroupMembersOfTypeGroup">Function: SharingRegistryService.getGroupMembersOfTypeGroup</h4>
-<pre><code>list&lt;<code><a href="sharing_models.html#Struct_UserGroup">sharing_models.UserGroup</a></code>&gt;</code> getGroupMembersOfTypeGroup(<code>string</code> groupId,
+<pre><code>list&lt;<code><a href="sharing_models.html#Struct_UserGroup">sharing_models.UserGroup</a></code>&gt;</code> getGroupMembersOfTypeGroup(<code>string</code> domainId,
+                                                          <code>string</code> groupId,
                                                           <code>i32</code> offset,
                                                           <code>i32</code> limit)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
 </pre><p>API method to get list of child groups in a group. Only the direct members will be returned. Results are reverse time sorted based on creation time</p>
 <br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_addChildGroupsToParentGroup">Function: SharingRegistryService.addChildGroupsToParentGroup</h4>
-<pre><code>bool</code> addChildGroupsToParentGroup(<code>list&lt;<code>string</code>&gt;</code> childIds,
+<pre><code>bool</code> addChildGroupsToParentGroup(<code>string</code> domainId,
+                                 <code>list&lt;<code>string</code>&gt;</code> childIds,
                                  <code>string</code> groupId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
 </pre><p>API method to add a child group to a parent group.</p>
 <br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_removeChildGroupFromParentGroup">Function: SharingRegistryService.removeChildGroupFromParentGroup</h4>
-<pre><code>bool</code> removeChildGroupFromParentGroup(<code>string</code> childId,
+<pre><code>bool</code> removeChildGroupFromParentGroup(<code>string</code> domainId,
+                                     <code>string</code> childId,
                                      <code>string</code> groupId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
 </pre><p>API method to remove a child group from parent group.</p>
@@ -169,11 +179,13 @@
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
 </pre><p>API method to update entity type</p>
 <br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_deleteEntityType">Function: SharingRegistryService.deleteEntityType</h4>
-<pre><code>bool</code> deleteEntityType(<code>string</code> entityTypeId)
+<pre><code>bool</code> deleteEntityType(<code>string</code> domainId,
+                      <code>string</code> entityTypeId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
 </pre><p>API method to delete entity type</p>
 <br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getEntityType">Function: SharingRegistryService.getEntityType</h4>
-<pre><code><a href="sharing_models.html#Struct_EntityType">sharing_models.EntityType</a></code> getEntityType(<code>string</code> entityTypeId)
+<pre><code><a href="sharing_models.html#Struct_EntityType">sharing_models.EntityType</a></code> getEntityType(<code>string</code> domainId,
+                                        <code>string</code> entityTypeId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
 </pre><p>API method to get an entity type</p>
 <br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getEntityTypes">Function: SharingRegistryService.getEntityTypes</h4>
@@ -191,15 +203,18 @@
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
 </pre><p>API method to update entity</p>
 <br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_deleteEntity">Function: SharingRegistryService.deleteEntity</h4>
-<pre><code>bool</code> deleteEntity(<code>string</code> entityId)
+<pre><code>bool</code> deleteEntity(<code>string</code> domainId,
+                  <code>string</code> entityId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
 </pre><p>API method to delete entity</p>
 <br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getEntity">Function: SharingRegistryService.getEntity</h4>
-<pre><code><a href="sharing_models.html#Struct_Entity">sharing_models.Entity</a></code> getEntity(<code>string</code> entityId)
+<pre><code><a href="sharing_models.html#Struct_Entity">sharing_models.Entity</a></code> getEntity(<code>string</code> domainId,
+                                <code>string</code> entityId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
 </pre><p>API method to get entity</p>
 <br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_searchEntities">Function: SharingRegistryService.searchEntities</h4>
-<pre><code>list&lt;<code><a href="sharing_models.html#Struct_Entity">sharing_models.Entity</a></code>&gt;</code> searchEntities(<code>string</code> userId,
+<pre><code>list&lt;<code><a href="sharing_models.html#Struct_Entity">sharing_models.Entity</a></code>&gt;</code> searchEntities(<code>string</code> domainId,
+                                           <code>string</code> userId,
                                            <code>string</code> entityTypeId,
                                            <code>list&lt;<code><a href="sharing_models.html#Struct_SearchCriteria">sharing_models.SearchCriteria</a></code>&gt;</code> filters,
                                            <code>i32</code> offset,
@@ -207,12 +222,14 @@
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
 </pre><p>API method to search entities</p>
 <br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getListOfSharedUsers">Function: SharingRegistryService.getListOfSharedUsers</h4>
-<pre><code>list&lt;<code><a href="sharing_models.html#Struct_User">sharing_models.User</a></code>&gt;</code> getListOfSharedUsers(<code>string</code> entityId,
+<pre><code>list&lt;<code><a href="sharing_models.html#Struct_User">sharing_models.User</a></code>&gt;</code> getListOfSharedUsers(<code>string</code> domainId,
+                                               <code>string</code> entityId,
                                                <code>string</code> permissionTypeId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
 </pre><p>API method to get a list of shared users given the entity id</p>
 <br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getListOfSharedGroups">Function: SharingRegistryService.getListOfSharedGroups</h4>
-<pre><code>list&lt;<code><a href="sharing_models.html#Struct_UserGroup">sharing_models.UserGroup</a></code>&gt;</code> getListOfSharedGroups(<code>string</code> entityId,
+<pre><code>list&lt;<code><a href="sharing_models.html#Struct_UserGroup">sharing_models.UserGroup</a></code>&gt;</code> getListOfSharedGroups(<code>string</code> domainId,
+                                                     <code>string</code> entityId,
                                                      <code>string</code> permissionTypeId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
 </pre><p>API method to get a list of shared groups given the entity id</p>
@@ -225,11 +242,13 @@
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
 </pre><p>API method to update permission type</p>
 <br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_deletePermissionType">Function: SharingRegistryService.deletePermissionType</h4>
-<pre><code>bool</code> deletePermissionType(<code>string</code> entityTypeId)
+<pre><code>bool</code> deletePermissionType(<code>string</code> domainId,
+                          <code>string</code> permissionTypeId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
 </pre><p>API method to delete permission type</p>
 <br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getPermissionType">Function: SharingRegistryService.getPermissionType</h4>
-<pre><code><a href="sharing_models.html#Struct_PermissionType">sharing_models.PermissionType</a></code> getPermissionType(<code>string</code> permissionTypeId)
+<pre><code><a href="sharing_models.html#Struct_PermissionType">sharing_models.PermissionType</a></code> getPermissionType(<code>string</code> domainId,
+                                                <code>string</code> permissionTypeId)
     throws <code><a href="sharing_models.html#Struct_SharingRegistryException">sharing_models.SharingRegistryException</a></code>
 </pre><p>API method to get permission type</p>
 <br/></div><div class="definition"><h4 id="Fn_SharingRegistryService_getPermissionTypes">Function: SharingRegistryService.getPermissionTypes</h4>
diff --git a/modules/sharing-registry/sharing-service-docs/api-docs/sharing_models.html b/modules/sharing-registry/sharing-service-docs/api-docs/sharing_models.html
index 1d4dff8..5065c95 100644
--- a/modules/sharing-registry/sharing-service-docs/api-docs/sharing_models.html
+++ b/modules/sharing-registry/sharing-service-docs/api-docs/sharing_models.html
@@ -145,7 +145,7 @@
 <tr><td>9</td><td>updatedTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
 </table><br/><p>User is the model used to register a user in the system. Minimal user information will be required to provide
 regarding the user.</p>
-<li><b>userId</b> : Client provided user id. (The id is not system generated and it is a must to provide this id)</li>
+<li><b>userId</b> : User id provided by the client</li>
 <li><b>domainId</b> : Domain id for that user</li>
 <li><b>userName</b> : User name for the user</li>
 <li><b>firstName</b> : First name of the user</li>
@@ -157,7 +157,7 @@
 
 <br/></div><div class="definition"><h3 id="Struct_UserGroup">Struct: UserGroup</h3>
 <table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
-<tr><td>1</td><td>groupId</td><td><code>string</code></td><td></td><td>optional</td><td><code>"DO_NOT_SET_AT_CLIENTS_ID"</code></td></tr>
+<tr><td>1</td><td>groupId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>2</td><td>domainId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>3</td><td>name</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>4</td><td>description</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
@@ -167,7 +167,7 @@
 <tr><td>8</td><td>createdTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>9</td><td>updatedTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
 </table><br/><p>User group is a collection of users.</p>
- <li>groupId : System generated grouo id. In the current implementation this is of the form domainId:name</li>
+ <li><b>groupId</b> : Group id provided by the client</li>
  <li><b>domainId</b> : Domain id for this user group</li>
  <li><b>name</b> : Name for the user group. should be one word</li>
  <li>description : Short description for the group.</li>
@@ -181,21 +181,22 @@
 <table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
 <tr><td>1</td><td>parentId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>2</td><td>childId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
-<tr><td>3</td><td>childType</td><td><code><a href="#Enum_GroupChildType">GroupChildType</a></code></td><td></td><td>optional</td><td></td></tr>
-<tr><td>4</td><td>createdTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
-<tr><td>5</td><td>updatedTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
+<tr><td>3</td><td>domainId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
+<tr><td>4</td><td>childType</td><td><code><a href="#Enum_GroupChildType">GroupChildType</a></code></td><td></td><td>optional</td><td></td></tr>
+<tr><td>5</td><td>createdTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
+<tr><td>6</td><td>updatedTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
 </table><br/><p>System internal data type to map group memberships</p>
 
 <br/></div><div class="definition"><h3 id="Struct_EntityType">Struct: EntityType</h3>
 <table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
-<tr><td>1</td><td>entityTypeId</td><td><code>string</code></td><td></td><td>optional</td><td><code>"DO_NOT_SET_AT_CLIENTS_ID"</code></td></tr>
+<tr><td>1</td><td>entityTypeId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>2</td><td>domainId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>3</td><td>name</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>4</td><td>description</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>5</td><td>createdTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>6</td><td>updatedTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
 </table><br/><p>client defined entity types</p>
-<li>entityTypeId : System generated entity type id. In the current implementation it will of the form domainId:name</li>
+<li><b>entityTypeId</b> : Entity type id provided by the client</li>
 <li><b>domainId</b> : Domain id of the domain.</li>
 <li><b>name</b> : Name for the entity type. Should be a single word.</li>
 <li>description : Short description for the entity type.</li>
@@ -221,33 +222,33 @@
 <tr><td>5</td><td>parentEntityId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>6</td><td>name</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>7</td><td>description</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
-<tr><td>8</td><td>metadata</td><td><code>map&lt;<code>string</code>, <code>string</code>&gt;</code></td><td></td><td>optional</td><td></td></tr>
+<tr><td>8</td><td>binaryData</td><td><code>binary</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>9</td><td>fullText</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>10</td><td>createdTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>11</td><td>updatedTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
 </table><br/><p>Entity object which is used to register an entity in the system.</p>
-<li><b>entityId</b> : Client id provided by the client</li>
+<li><b>entityId</b> : Entity id provided by the client</li>
 <li><b>domainId</b> : Domain id</li>
 <li><b>entityTypeId</b> : Entity type id</li>
 <li><b>ownerId</b> : Owner id</li>
 <li>parentEntityId : Parent entity id</li>
 <li><b>name</b> : Name</li>
 <li>description : Short description for the entity</li>
-<li>metadata : Map of optional metadata</li>
+<li>binaryData : Any information stored in binary format</li>
 <li>fullText : A string which will be considered for full text search</li>
 <li>createdTime : If client provides this value then the system will use it if not the current time will be set</li>
 <li>updatedTime : If client provides this value then the system will use it if not the current time will be set</li>
 
 <br/></div><div class="definition"><h3 id="Struct_PermissionType">Struct: PermissionType</h3>
 <table class="table-bordered table-striped table-condensed"><thead><th>Key</th><th>Field</th><th>Type</th><th>Description</th><th>Requiredness</th><th>Default value</th></thead>
-<tr><td>1</td><td>permissionTypeId</td><td><code>string</code></td><td></td><td>optional</td><td><code>"DO_NOT_SET_AT_CLIENTS_ID"</code></td></tr>
+<tr><td>1</td><td>permissionTypeId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>2</td><td>domainId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>3</td><td>name</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>4</td><td>description</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>5</td><td>createdTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>6</td><td>updatedTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
 </table><br/><p>Object for creating client defined permission type</p>
-<li>permissionTypeId : System generated permission type id. In the current implementation it will of the form domainId:name</li>
+<li><b>permissionTypeId</b> : Permission type id provided by the client</li>
 <li><b>domainId</b> : Domain id</li>
 <li><b>name</b> : Single word name for the permission</li>
 <li>description : Short description for the permission type</li>
@@ -260,9 +261,10 @@
 <tr><td>2</td><td>entityId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>3</td><td>groupId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
 <tr><td>4</td><td>sharingType</td><td><code><a href="#Enum_SharingType">SharingType</a></code></td><td></td><td>optional</td><td></td></tr>
-<tr><td>5</td><td>inheritedParentId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
-<tr><td>6</td><td>createdTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
-<tr><td>7</td><td>updatedTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
+<tr><td>5</td><td>domainId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
+<tr><td>6</td><td>inheritedParentId</td><td><code>string</code></td><td></td><td>optional</td><td></td></tr>
+<tr><td>7</td><td>createdTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
+<tr><td>8</td><td>updatedTime</td><td><code>i64</code></td><td></td><td>optional</td><td></td></tr>
 </table><br/><p>This is an internal enum type for managing sharings</p>
 
 <br/></div><div class="definition"><h3 id="Struct_SharingRegistryException">Exception: SharingRegistryException</h3>
diff --git a/modules/sharing-registry/sharing-service-docs/index.html b/modules/sharing-registry/sharing-service-docs/index.html
index 14f730b..d7a7868 100644
--- a/modules/sharing-registry/sharing-service-docs/index.html
+++ b/modules/sharing-registry/sharing-service-docs/index.html
@@ -7,7 +7,8 @@
 <div class="container-fluid">
     <h2>Welcome to Airavata Sharing Registry Service Documentation</h2>
 
-    <p>Airavata Data Sharing Registry Service is a general purpose data sharing and access controlling service.</p>
+    <p>Airavata Data Sharing Registry Service is a general purpose <em>Collaborative User Space Management Component</em> that can solve
+        your Scientific Data Management requirements related to sharing and access controlling.</p>
 
     <div>
         <ul><a href="#getting-started">Getting Started</a></ul>
diff --git a/modules/sharing-registry/thrift_models/sharing_cpi.thrift b/modules/sharing-registry/thrift_models/sharing_cpi.thrift
index 274eb4b..f180738 100644
--- a/modules/sharing-registry/thrift_models/sharing_cpi.thrift
+++ b/modules/sharing-registry/thrift_models/sharing_cpi.thrift
@@ -56,11 +56,11 @@
     /**
      <p>API method to delete user</p>
     */
-    bool deleteUser(1: required string userId) throws (1: sharing_models.SharingRegistryException sre)
+    bool deleteUser(1: required string domainId, 2: required string userId) throws (1: sharing_models.SharingRegistryException sre)
     /**
      <p>API method to get a user</p>
     */
-    sharing_models.User getUser(1: required string userId) throws (1: sharing_models.SharingRegistryException sre)
+    sharing_models.User getUser(1: required string domainId, 2: required string userId) throws (1: sharing_models.SharingRegistryException sre)
     /**
      <p>API method to get a list of users in a specific domain Users will be reverse sorted based on the created time.</p>
      <li>domainId : Domain id</li>
@@ -80,11 +80,11 @@
     /**
      <p>API method to delete a group</p>
     */
-    bool deleteGroup(1: required string groupId) throws (1: sharing_models.SharingRegistryException sre)
+    bool deleteGroup(1: required string domainId, 2: required string groupId) throws (1: sharing_models.SharingRegistryException sre)
     /**
      <p>API method to get a group</p>
     */
-    sharing_models.UserGroup getGroup(1: required string groupId) throws (1: sharing_models.SharingRegistryException sre)
+    sharing_models.UserGroup getGroup(1: required string domainId, 2: required string groupId) throws (1: sharing_models.SharingRegistryException sre)
     /**
      <p>API method to get groups in a domainId. Results are reverse sorted based on created time.</p>
     */
@@ -93,27 +93,27 @@
     /**
      <p>API method to add list of users to a group</p>
     */
-    bool addUsersToGroup(1: required list<string> userIds, 2: required string groupId) throws (1: sharing_models.SharingRegistryException sre);
+    bool addUsersToGroup(1: required string domainId, 2: required list<string> userIds, 3: required string groupId) throws (1: sharing_models.SharingRegistryException sre);
     /**
      <p>API method to remove users from a group</p>
     */
-    bool removeUsersFromGroup(1: required list<string> userIds, 2: required string groupId) throws (1: sharing_models.SharingRegistryException sre);
+    bool removeUsersFromGroup(1: required string domainId, 2: required list<string> userIds, 3: required string groupId) throws (1: sharing_models.SharingRegistryException sre);
     /**
      <p>API method to get list of child users in a group. Only the direct members will be returned. Results are reverse time sorted based on creation time</p>
     */
-    list<sharing_models.User> getGroupMembersOfTypeUser(1: required string groupId, 2: required i32 offset, 3: required i32 limit) throws (1: sharing_models.SharingRegistryException sre);
+    list<sharing_models.User> getGroupMembersOfTypeUser(1: string domainId, 2: required string groupId, 3: required i32 offset, 4: required i32 limit) throws (1: sharing_models.SharingRegistryException sre);
     /**
      <p>API method to get list of child groups in a group. Only the direct members will be returned. Results are reverse time sorted based on creation time</p>
     */
-    list<sharing_models.UserGroup> getGroupMembersOfTypeGroup(1: required string groupId, 2: required i32 offset, 3: required i32 limit) throws (1: sharing_models.SharingRegistryException sre);
+    list<sharing_models.UserGroup> getGroupMembersOfTypeGroup(1: required string domainId, 2: required string groupId, 3: required i32 offset, 4: required i32 limit) throws (1: sharing_models.SharingRegistryException sre);
     /**
      <p>API method to add a child group to a parent group.</p>
     */
-    bool addChildGroupsToParentGroup(1: required list<string> childIds, 2: required string groupId) throws (1: sharing_models.SharingRegistryException sre);
+    bool addChildGroupsToParentGroup(1: required string domainId, 2: required list<string> childIds, 3: required string groupId) throws (1: sharing_models.SharingRegistryException sre);
     /**
      <p>API method to remove a child group from parent group.</p>
     */
-    bool removeChildGroupFromParentGroup(1: required string childId, 2: required string groupId) throws (1: sharing_models.SharingRegistryException sre);
+    bool removeChildGroupFromParentGroup(1: required string domainId, 2: required string childId, 3: required string groupId) throws (1: sharing_models.SharingRegistryException sre);
 
     /**
      <p>API method to create a new entity type</p>
@@ -126,11 +126,11 @@
     /**
      <p>API method to delete entity type</p>
     */
-    bool deleteEntityType(1: required string entityTypeId) throws (1: sharing_models.SharingRegistryException sre)
+    bool deleteEntityType(1: required string domainId, 2: required string entityTypeId) throws (1: sharing_models.SharingRegistryException sre)
     /**
      <p>API method to get an entity type</p>
     */
-    sharing_models.EntityType getEntityType(1: required string entityTypeId) throws (1: sharing_models.SharingRegistryException sre)
+    sharing_models.EntityType getEntityType(1: required string domainId, 2: required string entityTypeId) throws (1: sharing_models.SharingRegistryException sre)
     /**
      <p>API method to get entity types in a domainId. Results are reverse time sorted based on creation time</p>
     */
@@ -148,23 +148,23 @@
     /**
      <p>API method to delete entity</p>
     */
-    bool deleteEntity(1: required string entityId) throws (1: sharing_models.SharingRegistryException sre)
+    bool deleteEntity(1: required string domainId, 2: required string entityId) throws (1: sharing_models.SharingRegistryException sre)
     /**
      <p>API method to get entity</p>
     */
-    sharing_models.Entity getEntity(1: required string entityId) throws (1: sharing_models.SharingRegistryException sre)
+    sharing_models.Entity getEntity(1: required string domainId, 2: required string entityId) throws (1: sharing_models.SharingRegistryException sre)
     /**
      <p>API method to search entities</p>
     */
-    list<sharing_models.Entity> searchEntities(1: required string userId, 2: required string entityTypeId, 3: required list<sharing_models.SearchCriteria> filters, 4: required i32 offset, 5: required i32 limit) throws (1: sharing_models.SharingRegistryException sre)
+    list<sharing_models.Entity> searchEntities(1: required string domainId, 2: required string userId, 3: required string entityTypeId, 4: required list<sharing_models.SearchCriteria> filters, 5: required i32 offset, 6: required i32 limit) throws (1: sharing_models.SharingRegistryException sre)
     /**
      <p>API method to get a list of shared users given the entity id</p>
     */
-    list<sharing_models.User> getListOfSharedUsers(1: required string entityId, 2: required string permissionTypeId) throws (1: sharing_models.SharingRegistryException sre)
+    list<sharing_models.User> getListOfSharedUsers(1: required string domainId, 2: required string entityId, 3: required string permissionTypeId) throws (1: sharing_models.SharingRegistryException sre)
     /**
      <p>API method to get a list of shared groups given the entity id</p>
     */
-    list<sharing_models.UserGroup> getListOfSharedGroups(1: required string entityId, 2: required string permissionTypeId) throws (1: sharing_models.SharingRegistryException sre)
+    list<sharing_models.UserGroup> getListOfSharedGroups(1: required string domainId, 2: required string entityId, 3: required string permissionTypeId) throws (1: sharing_models.SharingRegistryException sre)
 
     /**
      <p>API method to create permission type</p>
@@ -177,11 +177,11 @@
     /**
      <p>API method to delete permission type</p>
     */
-    bool deletePermissionType(1: required string entityTypeId) throws (1: sharing_models.SharingRegistryException sre)
+    bool deletePermissionType(1: required string domainId, 2: required string permissionTypeId) throws (1: sharing_models.SharingRegistryException sre)
     /**
      <p>API method to get permission type</p>
     */
-    sharing_models.PermissionType getPermissionType(1: required string permissionTypeId) throws (1: sharing_models.SharingRegistryException sre)
+    sharing_models.PermissionType getPermissionType(1: required string domainId, 2: required string permissionTypeId) throws (1: sharing_models.SharingRegistryException sre)
     /**
      <p>API method to get list of permission types in a given domainId. Results are reverse time sorted based on creation time</p>
     */
diff --git a/modules/sharing-registry/thrift_models/sharing_models.thrift b/modules/sharing-registry/thrift_models/sharing_models.thrift
index f8c6f31..d4d15c4 100644
--- a/modules/sharing-registry/thrift_models/sharing_models.thrift
+++ b/modules/sharing-registry/thrift_models/sharing_models.thrift
@@ -43,7 +43,7 @@
 /**
 * <p>User is the model used to register a user in the system. Minimal user information will be required to provide
 * regarding the user.</p>
-* <li><b>userId</b> : Client provided user id. (The id is not system generated and it is a must to provide this id)</li>
+* <li><b>userId</b> : User id provided by the client</li>
 * <li><b>domainId</b> : Domain id for that user</li>
 * <li><b>userName</b> : User name for the user</li>
 * <li><b>firstName</b> : First name of the user</li>
@@ -84,7 +84,7 @@
 
 /**
 *<p>User group is a collection of users.</p>
-* <li>groupId : System generated grouo id. In the current implementation this is of the form domainId:name</li>
+* <li><b>groupId</b> : Group id provided by the client</li>
 * <li><b>domainId</b> : Domain id for this user group</li>
 * <li><b>name</b> : Name for the user group. should be one word</li>
 * <li>description : Short description for the group.</li>
@@ -95,7 +95,7 @@
 * <li>updatedTime : Will be set by the system</li>
 **/
 struct UserGroup {
- 1: optional string groupId = DO_NOT_SET_AT_CLIENTS_ID,
+ 1: optional string groupId,
  2: optional string domainId,
  3: optional string name,
  4: optional string description,
@@ -118,17 +118,18 @@
 * <p>System internal data type to map group memberships</p>
 **/
 struct GroupMembership {
-1: optional string parentId,
-2: optional string childId,
-3: optional GroupChildType childType
-4: optional i64 createdTime,
-5: optional i64 updatedTime
+    1: optional string parentId,
+    2: optional string childId,
+    3: optional string domainId,
+    4: optional GroupChildType childType
+    5: optional i64 createdTime,
+    6: optional i64 updatedTime
 }
 
 
 /**
 * <p>client defined entity types</p>
-* <li>entityTypeId : System generated entity type id. In the current implementation it will of the form domainId:name</li>
+* <li><b>entityTypeId</b> : Entity type id provided by the client</li>
 * <li><b>domainId</b> : Domain id of the domain.</li>
 * <li><b>name</b> : Name for the entity type. Should be a single word.</li>
 * <li>description : Short description for the entity type.</li>
@@ -136,7 +137,7 @@
 * <li>updatedTime : Will be set by the system</li>
 **/
 struct EntityType {
-    1: optional string entityTypeId = DO_NOT_SET_AT_CLIENTS_ID,
+    1: optional string entityTypeId,
     2: optional string domainId,
     3: optional string name,
     4: optional string description,
@@ -192,14 +193,14 @@
 
 /**
 * <p>Entity object which is used to register an entity in the system.</p>
-* <li><b>entityId</b> : Client id provided by the client</li>
+* <li><b>entityId</b> : Entity id provided by the client</li>
 * <li><b>domainId</b> : Domain id</li>
 * <li><b>entityTypeId</b> : Entity type id</li>
 * <li><b>ownerId</b> : Owner id</li>
 * <li>parentEntityId : Parent entity id</li>
 * <li><b>name</b> : Name</li>
 * <li>description : Short description for the entity</li>
-* <li>metadata : Map of optional metadata</li>
+* <li>binaryData : Any information stored in binary format</li>
 * <li>fullText : A string which will be considered for full text search</li>
 * <li>createdTime : If client provides this value then the system will use it if not the current time will be set</li>
 * <li>updatedTime : If client provides this value then the system will use it if not the current time will be set</li>
@@ -212,7 +213,7 @@
     5: optional string parentEntityId,
     6: optional string name,
     7: optional string description,
-    8: optional map<string,string> metadata,
+    8: optional binary binaryData,
     9: optional string fullText,
     10: optional i64 createdTime,
     11: optional i64 updatedTime
@@ -220,7 +221,7 @@
 
 /**
 * <p>Object for creating client defined permission type</p>
-* <li>permissionTypeId : System generated permission type id. In the current implementation it will of the form domainId:name</li>
+* <li><b>permissionTypeId</b> : Permission type id provided by the client</li>
 * <li><b>domainId</b> : Domain id</li>
 * <li><b>name</b> : Single word name for the permission</li>
 * <li>description : Short description for the permission type</li>
@@ -228,7 +229,7 @@
 * <li>updatedTime : Will be set by the system</li>
 **/
 struct PermissionType {
-    1: optional string permissionTypeId = DO_NOT_SET_AT_CLIENTS_ID,
+    1: optional string permissionTypeId,
     2: optional string domainId,
     3: optional string name,
     4: optional string description,
@@ -253,9 +254,10 @@
     2: optional string entityId,
     3: optional string groupId,
     4: optional SharingType sharingType,
-    5: optional string inheritedParentId,
-    6: optional i64 createdTime,
-    7: optional i64 updatedTime
+    5: optional string domainId,
+    6: optional string inheritedParentId,
+    7: optional i64 createdTime,
+    8: optional i64 updatedTime
 }
 
 /**