http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/adf19ed6/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java
----------------------------------------------------------------------
diff --git 
a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java
 
b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java
index 548127c..a881cbb 100644
--- 
a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java
+++ 
b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java
@@ -28,6 +28,9 @@ import com.netflix.hystrix.HystrixCommand;
 import com.netflix.hystrix.HystrixCommandGroupKey;
 import com.netflix.hystrix.HystrixThreadPoolProperties;
 
+import org.apache.usergrid.persistence.collection.ScopeSet;
+import 
org.apache.usergrid.persistence.collection.serialization.impl.ScopeSetImpl;
+import org.apache.usergrid.persistence.core.scope.ApplicationScope;
 import org.apache.usergrid.persistence.model.util.EntityUtils;
 import org.apache.usergrid.persistence.core.astyanax.CassandraConfig;
 
@@ -98,6 +101,7 @@ public class WriteUniqueVerify implements 
Action1<CollectionIoEvent<MvccEntity>>
         final Entity entity = mvccEntity.getEntity().get();
 
         final CollectionScope scope = ioevent.getEntityCollection();
+        final ApplicationScope applicationScope = 
ioevent.getApplicationScope();
 
         final MutationBatch batch = keyspace.prepareMutationBatch();
         //allocate our max size, worst case
@@ -117,7 +121,7 @@ public class WriteUniqueVerify implements 
Action1<CollectionIoEvent<MvccEntity>>
             final UniqueValue written = new UniqueValueImpl( field, 
mvccEntity.getId(), mvccEntity.getVersion() );
 
             // use TTL in case something goes wrong before entity is finally 
committed
-            final MutationBatch mb = uniqueValueStrat.write( scope, written, 
serializationFig.getTimeout() );
+            final MutationBatch mb = uniqueValueStrat.write( applicationScope, 
scope, written, serializationFig.getTimeout() );
 
             batch.mergeShallow( mb );
             uniqueFields.add(field);
@@ -137,12 +141,12 @@ public class WriteUniqueVerify implements 
Action1<CollectionIoEvent<MvccEntity>>
         }
 
         // use simple thread pool to verify fields in parallel
-        ConsistentReplayCommand cmd = new 
ConsistentReplayCommand(uniqueValueStrat,cassandraFig,scope, 
uniqueFields,entity);
+        ConsistentReplayCommand cmd = new 
ConsistentReplayCommand(uniqueValueStrat,cassandraFig, applicationScope, scope, 
uniqueFields,entity);
         Map<String,Field>  uniquenessViolations = cmd.execute();
          cmd.getFailedExecutionException();
         //We have violations, throw an exception
         if ( !uniquenessViolations.isEmpty() ) {
-            throw new WriteUniqueVerifyException( mvccEntity, 
ioevent.getEntityCollection(), uniquenessViolations );
+            throw new WriteUniqueVerifyException( mvccEntity, 
applicationScope, ioevent.getEntityCollection(), uniquenessViolations );
         }
     }
 
@@ -150,16 +154,19 @@ public class WriteUniqueVerify implements 
Action1<CollectionIoEvent<MvccEntity>>
 
         private final UniqueValueSerializationStrategy 
uniqueValueSerializationStrategy;
         private final CassandraConfig fig;
-        private final CollectionScope scope;
-        private final List<Field> uniqueFields;
+        private final ApplicationScope applicationScope;
+//        private final CollectionScope scope;
+        private final ScopeSet<Field> uniqueFields;
         private final Entity entity;
 
-        public ConsistentReplayCommand(UniqueValueSerializationStrategy 
uniqueValueSerializationStrategy, CassandraConfig fig, CollectionScope scope, 
List<Field> uniqueFields, Entity entity){
+        public ConsistentReplayCommand( UniqueValueSerializationStrategy 
uniqueValueSerializationStrategy,
+                                        CassandraConfig fig, final 
ApplicationScope applicationScope, CollectionScope
+                                            scope, List<Field> uniqueFields, 
Entity entity ){
             super(REPLAY_GROUP);
             this.uniqueValueSerializationStrategy = 
uniqueValueSerializationStrategy;
             this.fig = fig;
-            this.scope = scope;
-            this.uniqueFields = uniqueFields;
+            this.applicationScope = applicationScope;
+            uniqueFields = new ScopeSetImpl<Field>(scope, uniqueFields);
             this.entity = entity;
         }
 
@@ -178,7 +185,7 @@ public class WriteUniqueVerify implements 
Action1<CollectionIoEvent<MvccEntity>>
             //now get the set of fields back
             final UniqueValueSet uniqueValues;
             try {
-                uniqueValues = uniqueValueSerializationStrategy.load( 
scope,consistencyLevel, uniqueFields );
+                uniqueValues = uniqueValueSerializationStrategy.load( 
applicationScope,  scope,consistencyLevel, uniqueFields );
             }
             catch ( ConnectionException e ) {
                 throw new RuntimeException( "Unable to read from cassandra", e 
);

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/adf19ed6/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/MvccEntitySerializationStrategy.java
----------------------------------------------------------------------
diff --git 
a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/MvccEntitySerializationStrategy.java
 
b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/MvccEntitySerializationStrategy.java
index 7028620..65be537 100644
--- 
a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/MvccEntitySerializationStrategy.java
+++ 
b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/MvccEntitySerializationStrategy.java
@@ -26,8 +26,10 @@ import java.util.UUID;
 import org.apache.usergrid.persistence.collection.CollectionScope;
 import org.apache.usergrid.persistence.collection.EntitySet;
 import org.apache.usergrid.persistence.collection.MvccEntity;
+import org.apache.usergrid.persistence.collection.ScopeSet;
 import org.apache.usergrid.persistence.core.migration.data.VersionedData;
 import org.apache.usergrid.persistence.core.migration.schema.Migration;
+import org.apache.usergrid.persistence.core.scope.ApplicationScope;
 import org.apache.usergrid.persistence.model.entity.Id;
 
 import com.google.common.base.Optional;
@@ -45,17 +47,17 @@ public interface MvccEntitySerializationStrategy extends 
Migration, VersionedDat
      * @param entity The entity to persist
      * @return The MutationBatch operations for this update
      */
-    public MutationBatch write(CollectionScope context, MvccEntity entity);
+    public MutationBatch write(ApplicationScope applicationScope, 
CollectionScope context, MvccEntity entity);
 
 
     /**
      * Load the entities into the entitySet from the specified Ids.  Loads 
versions <= the maxVersion
      *
-     * @param scope
+     * @param applicationScope
      * @param entityIds
      * @return
      */
-    public EntitySet load(CollectionScope scope, Collection<Id> entityIds, 
UUID maxVersion);
+    public EntitySet load(ApplicationScope applicationScope, 
Collection<ScopeSet<Id>> entityIds, UUID maxVersion);
 
     /**
      * Load a list, from highest to lowest of the entity with versions <= 
version up to maxSize elements
@@ -69,7 +71,7 @@ public interface MvccEntitySerializationStrategy extends 
Migration, VersionedDat
      */
     @Deprecated
     //this has been made obsolete in the latest version, only use the load 
methods
-    public Iterator<MvccEntity> loadDescendingHistory( CollectionScope 
context, Id entityId, UUID version,
+    public Iterator<MvccEntity> loadDescendingHistory( ApplicationScope 
applicationScope,  CollectionScope context, Id entityId, UUID version,
                                                        int fetchSize );
 
     /**
@@ -85,7 +87,7 @@ public interface MvccEntitySerializationStrategy extends 
Migration, VersionedDat
      */
     @Deprecated
     //this has been made obsolete in the latest version, only use the load 
methods
-    public Iterator<MvccEntity> loadAscendingHistory( CollectionScope context, 
Id entityId, UUID version,
+    public Iterator<MvccEntity> loadAscendingHistory( ApplicationScope 
applicationScope, CollectionScope context, Id entityId, UUID version,
                                                       int fetchSize );
 
 
@@ -96,7 +98,7 @@ public interface MvccEntitySerializationStrategy extends 
Migration, VersionedDat
      * @param entityId
      * @return The MvccEntity if it exists.  Null otherwise
      */
-    public Optional<MvccEntity> load(CollectionScope scope, Id entityId);
+    public Optional<MvccEntity> load(ApplicationScope applicationScope, 
CollectionScope scope, Id entityId);
 
 
     /**
@@ -104,7 +106,7 @@ public interface MvccEntitySerializationStrategy extends 
Migration, VersionedDat
      * can be used in a mark+sweep system.  The entity with the given version 
will exist in the context, but no data
      * will be stored
      */
-    public MutationBatch mark(CollectionScope context, Id entityId, UUID 
version);
+    public MutationBatch mark(ApplicationScope applicationScope, 
CollectionScope context, Id entityId, UUID version);
 
 
     /**
@@ -114,6 +116,6 @@ public interface MvccEntitySerializationStrategy extends 
Migration, VersionedDat
      * @param entityId The entity id to delete
      * @param version  The version to delete
      */
-    public MutationBatch delete(CollectionScope context, Id entityId, UUID 
version);
+    public MutationBatch delete(ApplicationScope applicationScope, 
CollectionScope context, Id entityId, UUID version);
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/adf19ed6/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSerializationStrategy.java
----------------------------------------------------------------------
diff --git 
a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSerializationStrategy.java
 
b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSerializationStrategy.java
index d7a6407..ab1f24b 100644
--- 
a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSerializationStrategy.java
+++ 
b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSerializationStrategy.java
@@ -25,7 +25,9 @@ import com.netflix.astyanax.MutationBatch;
 import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
 import com.netflix.astyanax.model.ConsistencyLevel;
 import org.apache.usergrid.persistence.collection.CollectionScope;
+import org.apache.usergrid.persistence.collection.ScopeSet;
 import org.apache.usergrid.persistence.core.migration.schema.Migration;
+import org.apache.usergrid.persistence.core.scope.ApplicationScope;
 import org.apache.usergrid.persistence.model.entity.Id;
 import org.apache.usergrid.persistence.model.field.Field;
 
@@ -42,7 +44,7 @@ public interface UniqueValueSerializationStrategy extends 
Migration {
      * @param uniqueValue Object to be written
      * @return MutatationBatch that encapsulates operation, caller may or may 
not execute.
      */
-    public MutationBatch write( CollectionScope collectionScope,  UniqueValue 
uniqueValue );
+    MutationBatch write( ApplicationScope applicationScope, CollectionScope 
collectionScope,  UniqueValue uniqueValue );
 
     /**
      * Write the specified UniqueValue to Cassandra with optional timeToLive 
in milliseconds.
@@ -51,30 +53,30 @@ public interface UniqueValueSerializationStrategy extends 
Migration {
      * @param timeToLive How long object should live in seconds.  -1 implies 
store forever
      * @return MutatationBatch that encapsulates operation, caller may or may 
not execute.
      */
-    public MutationBatch write( CollectionScope collectionScope,  UniqueValue 
uniqueValue, int timeToLive );
+    MutationBatch write( ApplicationScope applicationScope, CollectionScope 
collectionScope,  UniqueValue uniqueValue, int timeToLive );
 
     /**
      * Load UniqueValue that matches field from collection or null if that 
value does not exist.
      *
-     * @param collectionScope scope in which to look for field name/value
+     * @param applicationScope scope in which to look for field name/value
      * @param fields Field name/value to search for
      *
      * @return UniqueValueSet containing fields from the collection that exist 
in cassandra
      *
      * @throws ConnectionException on error connecting to Cassandra
      */
-    public UniqueValueSet load( CollectionScope collectionScope, 
Collection<Field> fields ) throws ConnectionException;
+    UniqueValueSet load(ApplicationScope applicationScope,  
Collection<ScopeSet<Field>> fields ) throws ConnectionException;
 
     /**
     * Load UniqueValue that matches field from collection or null if that 
value does not exist.
     *
-    * @param colScope Collection scope in which to look for field name/value
+    * @param applicationScope Collection scope in which to look for field 
name/value
     * @param consistencyLevel Consistency level of query
     * @param fields Field name/value to search for
     * @return UniqueValueSet containing fields from the collection that exist 
in cassandra
     * @throws ConnectionException on error connecting to Cassandra
     */
-    public UniqueValueSet load( CollectionScope colScope, ConsistencyLevel 
consistencyLevel, Collection<Field> fields ) throws ConnectionException;
+    UniqueValueSet load(ApplicationScope applicationScope,  ConsistencyLevel 
consistencyLevel,  Collection<ScopeSet<Field>> fields ) throws 
ConnectionException;
 
 
     /**
@@ -85,7 +87,7 @@ public interface UniqueValueSerializationStrategy extends 
Migration {
      * @param entityId
      * @return
      */
-    public Iterator<UniqueValue> getAllUniqueFields(CollectionScope 
collectionScope, Id entityId);
+    Iterator<UniqueValue> getAllUniqueFields(ApplicationScope 
applicationScope, CollectionScope collectionScope, Id entityId);
 
 
     /**
@@ -94,7 +96,7 @@ public interface UniqueValueSerializationStrategy extends 
Migration {
      * @param uniqueValue Object to be deleted.
      * @return MutatationBatch that encapsulates operation, caller may or may 
not execute.
      */
-    public MutationBatch delete( CollectionScope scope,  UniqueValue 
uniqueValue );
+    MutationBatch delete(ApplicationScope applicationScope,  CollectionScope 
scope,  UniqueValue uniqueValue );
 
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/adf19ed6/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSet.java
----------------------------------------------------------------------
diff --git 
a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSet.java
 
b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSet.java
index 702e908..a988f23 100644
--- 
a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSet.java
+++ 
b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSet.java
@@ -20,6 +20,8 @@ package 
org.apache.usergrid.persistence.collection.serialization;/*
 
 import java.util.Set;
 
+import org.apache.usergrid.persistence.collection.CollectionScope;
+
 
 /**
  * A read only view of unique values
@@ -31,6 +33,6 @@ public interface UniqueValueSet extends Iterable<UniqueValue> 
{
      * @param fieldName
      * @return
      */
-    public UniqueValue getValue(final String fieldName);
+    public UniqueValue getValue(final CollectionScope scope, final String 
fieldName);
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/adf19ed6/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/LogEntryIterator.java
----------------------------------------------------------------------
diff --git 
a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/LogEntryIterator.java
 
b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/LogEntryIterator.java
index 2b99033..5c44ff4 100644
--- 
a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/LogEntryIterator.java
+++ 
b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/LogEntryIterator.java
@@ -9,6 +9,7 @@ import java.util.UUID;
 import org.apache.usergrid.persistence.collection.CollectionScope;
 import 
org.apache.usergrid.persistence.collection.mvcc.MvccLogEntrySerializationStrategy;
 import org.apache.usergrid.persistence.collection.MvccLogEntry;
+import org.apache.usergrid.persistence.core.scope.ApplicationScope;
 import org.apache.usergrid.persistence.model.entity.Id;
 
 import com.google.common.base.Preconditions;
@@ -22,6 +23,7 @@ public class LogEntryIterator implements 
Iterator<MvccLogEntry> {
 
 
     private final MvccLogEntrySerializationStrategy 
logEntrySerializationStrategy;
+    private final ApplicationScope applicationScope;
     private final CollectionScope scope;
     private final Id entityId;
     private final int pageSize;
@@ -40,13 +42,14 @@ public class LogEntryIterator implements 
Iterator<MvccLogEntry> {
      * @param pageSize The fetch size to get when querying the serialization 
strategy
      */
     public LogEntryIterator( final MvccLogEntrySerializationStrategy 
logEntrySerializationStrategy,
-                             final CollectionScope scope, final Id entityId, 
final UUID maxVersion,
+                             final ApplicationScope applicationScope,  final 
CollectionScope scope, final Id entityId, final UUID maxVersion,
                              final int pageSize ) {
 
         Preconditions.checkArgument( pageSize > 0, "pageSize must be > 0" );
 
         this.logEntrySerializationStrategy = logEntrySerializationStrategy;
         this.scope = scope;
+        this.applicationScope = applicationScope;
         this.entityId = entityId;
         this.nextStart = maxVersion;
         this.pageSize = pageSize;
@@ -92,7 +95,7 @@ public class LogEntryIterator implements 
Iterator<MvccLogEntry> {
         final int requestedSize = pageSize + 1;
 
         //loop through even entry that's < this one and remove it
-        List<MvccLogEntry> results = logEntrySerializationStrategy.load( 
scope, entityId, nextStart, requestedSize );
+        List<MvccLogEntry> results = logEntrySerializationStrategy.load( 
applicationScope, scope, entityId, nextStart, requestedSize );
 
         //we always remove the first version if it's equal since it's returned
         if ( results.size() > 0 && results.get( 0 ).getVersion().equals( 
nextStart ) ) {

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/adf19ed6/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyImpl.java
----------------------------------------------------------------------
diff --git 
a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyImpl.java
 
b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyImpl.java
index ad1d91a..bfabf60 100644
--- 
a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyImpl.java
+++ 
b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyImpl.java
@@ -25,7 +25,6 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.UUID;
 
-import 
org.apache.usergrid.persistence.collection.serialization.MvccEntitySerializationStrategy;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -36,19 +35,22 @@ import org.apache.cassandra.db.marshal.UUIDType;
 import org.apache.usergrid.persistence.collection.CollectionScope;
 import org.apache.usergrid.persistence.collection.EntitySet;
 import org.apache.usergrid.persistence.collection.MvccEntity;
+import org.apache.usergrid.persistence.collection.ScopeSet;
 import 
org.apache.usergrid.persistence.collection.exception.CollectionRuntimeException;
 import 
org.apache.usergrid.persistence.collection.exception.DataCorruptionException;
 import 
org.apache.usergrid.persistence.collection.mvcc.entity.impl.MvccEntityImpl;
+import 
org.apache.usergrid.persistence.collection.serialization.MvccEntitySerializationStrategy;
 import 
org.apache.usergrid.persistence.collection.serialization.SerializationFig;
-import org.apache.usergrid.persistence.model.util.EntityUtils;
 import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
 import org.apache.usergrid.persistence.core.astyanax.ColumnNameIterator;
 import org.apache.usergrid.persistence.core.astyanax.ColumnParser;
 import org.apache.usergrid.persistence.core.astyanax.MultiTennantColumnFamily;
 import 
org.apache.usergrid.persistence.core.astyanax.MultiTennantColumnFamilyDefinition;
 import org.apache.usergrid.persistence.core.astyanax.ScopedRowKey;
+import org.apache.usergrid.persistence.core.scope.ApplicationScope;
 import org.apache.usergrid.persistence.model.entity.Entity;
 import org.apache.usergrid.persistence.model.entity.Id;
+import org.apache.usergrid.persistence.model.util.EntityUtils;
 import org.apache.usergrid.persistence.model.util.UUIDGenerator;
 
 import com.google.common.base.Optional;
@@ -61,14 +63,11 @@ import 
com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
 import com.netflix.astyanax.model.Column;
 import com.netflix.astyanax.model.ColumnList;
 import com.netflix.astyanax.model.Row;
-import com.netflix.astyanax.model.Rows;
 import com.netflix.astyanax.query.RowQuery;
 import com.netflix.astyanax.serializers.AbstractSerializer;
 
 import rx.Observable;
 import rx.Scheduler;
-import rx.functions.Func1;
-import rx.functions.Func2;
 import rx.schedulers.Schedulers;
 
 
@@ -97,14 +96,14 @@ public abstract class MvccEntitySerializationStrategyImpl 
implements MvccEntityS
 
 
     @Override
-    public MutationBatch write( final CollectionScope collectionScope, final 
MvccEntity entity ) {
+    public MutationBatch write(final ApplicationScope applicationScope, final 
CollectionScope collectionScope, final MvccEntity entity ) {
         Preconditions.checkNotNull( collectionScope, "collectionScope is 
required" );
         Preconditions.checkNotNull( entity, "entity is required" );
 
         final UUID colName = entity.getVersion();
         final Id entityId = entity.getId();
 
-        return doWrite( collectionScope, entityId, new RowOp() {
+        return doWrite( applicationScope, collectionScope, entityId, new 
RowOp() {
             @Override
             public void doOp( final ColumnListMutation<UUID> colMutation ) {
                     colMutation.putColumn( colName, getEntitySerializer()
@@ -115,11 +114,11 @@ public abstract class MvccEntitySerializationStrategyImpl 
implements MvccEntityS
 
 
     @Override
-    public EntitySet load( final CollectionScope collectionScope, final 
Collection<Id> entityIds,
+    public EntitySet load(final ApplicationScope applicationScope, final 
Collection<ScopeSet<Id>> entityIds,
                            final UUID maxVersion ) {
 
 
-        Preconditions.checkNotNull( collectionScope, "collectionScope is 
required" );
+        Preconditions.checkNotNull( entityIds, "entityIds is required" );
         Preconditions.checkNotNull( entityIds, "entityIds is required" );
         Preconditions.checkArgument( entityIds.size() > 0, "entityIds is 
required" );
         Preconditions.checkNotNull( maxVersion, "version is required" );
@@ -130,25 +129,13 @@ public abstract class MvccEntitySerializationStrategyImpl 
implements MvccEntityS
         }
 
 
-        final Id applicationId = collectionScope.getApplication();
-        final Id ownerId = collectionScope.getOwner();
-        final String collectionName = collectionScope.getName();
+        final Id applicationId = applicationScope.getApplication();
 
 
-        final List<ScopedRowKey<CollectionPrefixedKey<Id>>> rowKeys = new 
ArrayList<>( entityIds.size() );
-
-
-        for ( final Id entityId : entityIds ) {
-            final CollectionPrefixedKey<Id> collectionPrefixedKey =
-                    new CollectionPrefixedKey<>( collectionName, ownerId, 
entityId );
-
 
-            final ScopedRowKey<CollectionPrefixedKey<Id>> rowKey =
-                    ScopedRowKey.fromKey( applicationId, collectionPrefixedKey 
);
+        final List<ScopedRowKey<CollectionPrefixedKey<Id>>> rowKeys = new 
ArrayList<>( entityIds.size() );
 
 
-            rowKeys.add( rowKey );
-        }
 
         /**
          * Our settings may mean we exceed our maximum thrift buffer size. If 
we do, we have to make multiple requests, not just one.
@@ -190,7 +177,7 @@ public abstract class MvccEntitySerializationStrategyImpl 
implements MvccEntityS
                                        .withColumnRange( maxVersion, null, 
false, 1 ).execute().getResult();
                     }
                     catch ( ConnectionException e ) {
-                        throw new CollectionRuntimeException( null, 
collectionScope,
+                        throw new CollectionRuntimeException( null, 
applicationScope,
                             "An error occurred connecting to cassandra", e );
                     }
                 } ).subscribeOn( scheduler );
@@ -230,7 +217,7 @@ public abstract class MvccEntitySerializationStrategyImpl 
implements MvccEntityS
 
 
     @Override
-    public Iterator<MvccEntity> loadDescendingHistory( final CollectionScope 
collectionScope, final Id entityId,
+    public Iterator<MvccEntity> loadDescendingHistory( final ApplicationScope 
applicationScope, final CollectionScope collectionScope, final Id entityId,
                                                        final UUID version, 
final int fetchSize ) {
 
         Preconditions.checkNotNull( collectionScope, "collectionScope is 
required" );
@@ -239,7 +226,7 @@ public abstract class MvccEntitySerializationStrategyImpl 
implements MvccEntityS
         Preconditions.checkArgument( fetchSize > 0, "max Size must be greater 
than 0" );
 
 
-        final Id applicationId = collectionScope.getApplication();
+        final Id applicationId = applicationScope.getApplication();
         final Id ownerId = collectionScope.getOwner();
         final String collectionName = collectionScope.getName();
 
@@ -260,7 +247,7 @@ public abstract class MvccEntitySerializationStrategyImpl 
implements MvccEntityS
 
 
     @Override
-    public Iterator<MvccEntity> loadAscendingHistory( final CollectionScope 
collectionScope, final Id entityId,
+    public Iterator<MvccEntity> loadAscendingHistory( final ApplicationScope 
applicationScope, final CollectionScope collectionScope, final Id entityId,
                                                       final UUID version, 
final int fetchSize ) {
 
         Preconditions.checkNotNull( collectionScope, "collectionScope is 
required" );
@@ -269,7 +256,7 @@ public abstract class MvccEntitySerializationStrategyImpl 
implements MvccEntityS
         Preconditions.checkArgument( fetchSize > 0, "max Size must be greater 
than 0" );
 
 
-        final Id applicationId = collectionScope.getApplication();
+        final Id applicationId = applicationScope.getApplication();
         final Id ownerId = collectionScope.getOwner();
         final String collectionName = collectionScope.getName();
 
@@ -290,20 +277,22 @@ public abstract class MvccEntitySerializationStrategyImpl 
implements MvccEntityS
 
 
     @Override
-    public Optional<MvccEntity> load( final CollectionScope scope, final Id 
entityId ) {
-        final EntitySet results = load( scope, Collections.singleton( entityId 
), UUIDGenerator.newTimeUUID() );
+    public Optional<MvccEntity> load( final ApplicationScope applicationScope, 
final CollectionScope scope, final Id entityId ) {
+
+        final ScopeSet<Id> scopeSet = new ScopeSetImpl<>( scope, 
Collections.singleton( entityId ) );
+        final EntitySet results = load(applicationScope,  
Collections.singleton( scopeSet ) , UUIDGenerator.newTimeUUID() );
 
         return Optional.fromNullable( results.getEntity( entityId ));
     }
 
 
     @Override
-    public MutationBatch mark( final CollectionScope collectionScope, final Id 
entityId, final UUID version ) {
+    public MutationBatch mark( final ApplicationScope applicationScope, final 
CollectionScope collectionScope, final Id entityId, final UUID version ) {
         Preconditions.checkNotNull( collectionScope, "collectionScope is 
required" );
         Preconditions.checkNotNull( entityId, "entity id is required" );
         Preconditions.checkNotNull( version, "version is required" );
 
-        return doWrite( collectionScope, entityId, new RowOp() {
+        return doWrite(applicationScope,  collectionScope, entityId, new 
RowOp() {
             @Override
             public void doOp( final ColumnListMutation<UUID> colMutation ) {
                 colMutation.putColumn( version, getEntitySerializer()
@@ -314,13 +303,13 @@ public abstract class MvccEntitySerializationStrategyImpl 
implements MvccEntityS
 
 
     @Override
-    public MutationBatch delete( final CollectionScope collectionScope, final 
Id entityId, final UUID version ) {
+    public MutationBatch delete( final ApplicationScope applicationScope, 
final CollectionScope collectionScope, final Id entityId, final UUID version ) {
         Preconditions.checkNotNull( collectionScope, "collectionScope is 
required" );
         Preconditions.checkNotNull( entityId, "entity id is required" );
         Preconditions.checkNotNull( version, "version is required" );
 
 
-        return doWrite( collectionScope, entityId, new RowOp() {
+        return doWrite( applicationScope, collectionScope, entityId, new 
RowOp() {
             @Override
             public void doOp( final ColumnListMutation<UUID> colMutation ) {
                 colMutation.deleteColumn( version );
@@ -347,10 +336,10 @@ public abstract class MvccEntitySerializationStrategyImpl 
implements MvccEntityS
     /**
      * Do the write on the correct row for the entity id with the operation
      */
-    private MutationBatch doWrite( final CollectionScope collectionScope, 
final Id entityId, final RowOp op ) {
+    private MutationBatch doWrite(final ApplicationScope applicationScope, 
final CollectionScope collectionScope, final Id entityId, final RowOp op ) {
         final MutationBatch batch = keyspace.prepareMutationBatch();
 
-        final Id applicationId = collectionScope.getApplication();
+        final Id applicationId = applicationScope.getApplication();
         final Id ownerId = collectionScope.getOwner();
         final String collectionName = collectionScope.getName();
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/adf19ed6/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyProxyImpl.java
----------------------------------------------------------------------
diff --git 
a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyProxyImpl.java
 
b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyProxyImpl.java
index b815ef4..4d60f5d 100644
--- 
a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyProxyImpl.java
+++ 
b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyProxyImpl.java
@@ -25,12 +25,14 @@ import java.util.UUID;
 import org.apache.usergrid.persistence.collection.CollectionScope;
 import org.apache.usergrid.persistence.collection.EntitySet;
 import org.apache.usergrid.persistence.collection.MvccEntity;
+import org.apache.usergrid.persistence.collection.ScopeSet;
 import 
org.apache.usergrid.persistence.collection.serialization.MvccEntitySerializationStrategy;
 import 
org.apache.usergrid.persistence.collection.serialization.impl.migration.CollectionMigrationPlugin;
 import 
org.apache.usergrid.persistence.core.astyanax.MultiTennantColumnFamilyDefinition;
 import org.apache.usergrid.persistence.core.migration.data.MigrationInfoCache;
 import 
org.apache.usergrid.persistence.core.migration.data.MigrationRelationship;
 import 
org.apache.usergrid.persistence.core.migration.data.VersionedMigrationSet;
+import org.apache.usergrid.persistence.core.scope.ApplicationScope;
 import org.apache.usergrid.persistence.model.entity.Id;
 
 import com.google.common.base.Optional;
@@ -64,110 +66,110 @@ public class MvccEntitySerializationStrategyProxyImpl 
implements MvccEntitySeria
 
 
     @Override
-    public MutationBatch write( final CollectionScope context, final 
MvccEntity entity ) {
+    public MutationBatch write(  final ApplicationScope applicationScope, 
final CollectionScope context, final MvccEntity entity ) {
 
         final MigrationRelationship<MvccEntitySerializationStrategy> migration 
= getMigrationRelationShip();
 
         if ( migration.needsMigration() ) {
             final MutationBatch aggregateBatch = 
keyspace.prepareMutationBatch();
 
-            aggregateBatch.mergeShallow( migration.from.write( context, entity 
) );
-            aggregateBatch.mergeShallow( migration.to.write( context, entity ) 
);
+            aggregateBatch.mergeShallow( migration.from.write( 
applicationScope, context, entity ) );
+            aggregateBatch.mergeShallow( migration.to.write( applicationScope, 
context, entity ) );
 
             return aggregateBatch;
         }
 
-        return migration.to.write( context, entity );
+        return migration.to.write(applicationScope,  context, entity );
     }
 
 
     @Override
-    public EntitySet load( final CollectionScope scope, final Collection<Id> 
entityIds, final UUID maxVersion ) {
+    public EntitySet load(  final ApplicationScope applicationScope, final 
Collection<ScopeSet<Id>> entityIds, final UUID maxVersion ) {
 
         final MigrationRelationship<MvccEntitySerializationStrategy> migration 
= getMigrationRelationShip();
 
         if ( migration.needsMigration() ) {
-            return migration.from.load( scope, entityIds, maxVersion );
+            return migration.from.load(applicationScope, entityIds, maxVersion 
);
         }
 
-        return migration.to.load( scope, entityIds, maxVersion );
+        return migration.to.load( applicationScope, entityIds, maxVersion );
     }
 
 
 
     @Override
-    public Iterator<MvccEntity> loadDescendingHistory( final CollectionScope 
context, final Id entityId,
+    public Iterator<MvccEntity> loadDescendingHistory( final ApplicationScope 
applicationScope, final CollectionScope context, final Id entityId,
                                                        final UUID version, 
final int fetchSize ) {
 
         final MigrationRelationship<MvccEntitySerializationStrategy> migration 
= getMigrationRelationShip();
 
         if ( migration.needsMigration()) {
-            return migration.from.loadDescendingHistory( context, entityId, 
version, fetchSize );
+            return migration.from.loadDescendingHistory(applicationScope, 
context, entityId, version, fetchSize );
         }
 
-        return migration.to.loadDescendingHistory( context, entityId, version, 
fetchSize );
+        return migration.to.loadDescendingHistory(applicationScope, context, 
entityId, version, fetchSize );
     }
 
 
     @Override
-    public Iterator<MvccEntity> loadAscendingHistory( final CollectionScope 
context, final Id entityId,
+    public Iterator<MvccEntity> loadAscendingHistory(final ApplicationScope 
applicationScope, final CollectionScope context, final Id entityId,
                                                       final UUID version, 
final int fetchSize ) {
 
         final MigrationRelationship<MvccEntitySerializationStrategy> migration 
= getMigrationRelationShip();
 
         if ( migration.needsMigration() ) {
-            return migration.from.loadAscendingHistory( context, entityId, 
version, fetchSize );
+            return migration.from.loadAscendingHistory(applicationScope,  
context, entityId, version, fetchSize );
         }
 
-        return migration.to.loadAscendingHistory( context, entityId, version, 
fetchSize );
+        return migration.to.loadAscendingHistory(applicationScope,  context, 
entityId, version, fetchSize );
     }
 
     @Override
-    public Optional<MvccEntity> load( final CollectionScope scope, final Id 
entityId ) {
+    public Optional<MvccEntity> load(final ApplicationScope applicationScope, 
final CollectionScope scope, final Id entityId ) {
 
         final MigrationRelationship<MvccEntitySerializationStrategy> migration 
= getMigrationRelationShip();
 
         if ( migration.needsMigration() ) {
-            return migration.from.load( scope, entityId );
+            return migration.from.load(applicationScope,  scope, entityId );
         }
 
-        return migration.to.load( scope, entityId );
+        return migration.to.load(applicationScope,  scope, entityId );
     }
 
 
     @Override
-    public MutationBatch mark( final CollectionScope context, final Id 
entityId, final UUID version ) {
+    public MutationBatch mark(final ApplicationScope applicationScope,  final 
CollectionScope context, final Id entityId, final UUID version ) {
 
         final MigrationRelationship<MvccEntitySerializationStrategy> migration 
= getMigrationRelationShip();
 
         if ( migration.needsMigration() ) {
             final MutationBatch aggregateBatch = 
keyspace.prepareMutationBatch();
 
-            aggregateBatch.mergeShallow( migration.from.mark( context, 
entityId, version ) );
-            aggregateBatch.mergeShallow( migration.to.mark( context, entityId, 
version ) );
+            aggregateBatch.mergeShallow( migration.from.mark( 
applicationScope, context, entityId, version ) );
+            aggregateBatch.mergeShallow( migration.to.mark(applicationScope,  
context, entityId, version ) );
 
             return aggregateBatch;
         }
 
-        return migration.to.mark( context, entityId, version );
+        return migration.to.mark(applicationScope,  context, entityId, version 
);
     }
 
 
     @Override
-    public MutationBatch delete( final CollectionScope context, final Id 
entityId, final UUID version ) {
+    public MutationBatch delete(final ApplicationScope applicationScope,   
final CollectionScope context, final Id entityId, final UUID version ) {
 
         final MigrationRelationship<MvccEntitySerializationStrategy> migration 
= getMigrationRelationShip();
 
         if ( migration.needsMigration() ) {
             final MutationBatch aggregateBatch = 
keyspace.prepareMutationBatch();
 
-            aggregateBatch.mergeShallow( migration.from.delete( context, 
entityId, version ) );
-            aggregateBatch.mergeShallow( migration.to.delete( context, 
entityId, version ) );
+            aggregateBatch.mergeShallow( migration.from.delete( 
applicationScope, context, entityId, version ) );
+            aggregateBatch.mergeShallow( migration.to.delete(applicationScope, 
 context, entityId, version ) );
 
             return aggregateBatch;
         }
 
-        return migration.to.delete( context, entityId, version );
+        return migration.to.delete(applicationScope,  context, entityId, 
version );
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/adf19ed6/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV3Impl.java
----------------------------------------------------------------------
diff --git 
a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV3Impl.java
 
b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV3Impl.java
index de959b5..7b6124e 100644
--- 
a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV3Impl.java
+++ 
b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV3Impl.java
@@ -18,12 +18,14 @@ import org.apache.cassandra.db.marshal.BytesType;
 import org.apache.usergrid.persistence.collection.CollectionScope;
 import org.apache.usergrid.persistence.collection.EntitySet;
 import org.apache.usergrid.persistence.collection.MvccEntity;
+import org.apache.usergrid.persistence.collection.ScopeSet;
 import 
org.apache.usergrid.persistence.collection.exception.CollectionRuntimeException;
 import 
org.apache.usergrid.persistence.collection.exception.DataCorruptionException;
 import 
org.apache.usergrid.persistence.collection.exception.EntityTooLargeException;
 import 
org.apache.usergrid.persistence.collection.mvcc.entity.impl.MvccEntityImpl;
 import 
org.apache.usergrid.persistence.collection.serialization.MvccEntitySerializationStrategy;
 import 
org.apache.usergrid.persistence.collection.serialization.SerializationFig;
+import org.apache.usergrid.persistence.core.scope.ApplicationScope;
 import org.apache.usergrid.persistence.model.util.EntityUtils;
 import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
 import org.apache.usergrid.persistence.core.astyanax.ColumnParser;
@@ -103,14 +105,14 @@ public class MvccEntitySerializationStrategyV3Impl 
implements MvccEntitySerializ
 
 
     @Override
-    public MutationBatch write( final CollectionScope collectionScope, final 
MvccEntity entity ) {
+    public MutationBatch write( final ApplicationScope applicationScope, final 
CollectionScope collectionScope, final MvccEntity entity ) {
         Preconditions.checkNotNull( collectionScope, "collectionScope is 
required" );
         Preconditions.checkNotNull( entity, "entity is required" );
 
         final Id entityId = entity.getId();
         final UUID version = entity.getVersion();
 
-        return doWrite( collectionScope, entityId, version, new RowOp() {
+        return doWrite(applicationScope,  collectionScope, entityId, version, 
new RowOp() {
             @Override
             public void doOp( final ColumnListMutation<Boolean> colMutation ) {
                 colMutation.putColumn( COL_VALUE,
@@ -121,11 +123,11 @@ public class MvccEntitySerializationStrategyV3Impl 
implements MvccEntitySerializ
 
 
     @Override
-    public EntitySet load( final CollectionScope collectionScope, final 
Collection<Id> entityIds,
+    public EntitySet load( final ApplicationScope applicationScope, final 
Collection<ScopeSet<Id>> entityIds,
                            final UUID maxVersion ) {
 
 
-        Preconditions.checkNotNull( collectionScope, "collectionScope is 
required" );
+        Preconditions.checkNotNull( applicationScope, "applicationScope is 
required" );
         Preconditions.checkNotNull( entityIds, "entityIds is required" );
         Preconditions.checkArgument( entityIds.size() > 0, "entityIds is 
required" );
         Preconditions.checkNotNull( maxVersion, "version is required" );
@@ -137,24 +139,29 @@ public class MvccEntitySerializationStrategyV3Impl 
implements MvccEntitySerializ
         }
 
 
-        final Id applicationId = collectionScope.getApplication();
-        final Id ownerId = collectionScope.getOwner();
-        final String collectionName = collectionScope.getName();
 
+        final Id applicationId = applicationScope.getApplication();
 
         final List<ScopedRowKey<CollectionPrefixedKey<Id>>> rowKeys = new 
ArrayList<>( entityIds.size() );
 
+        for(ScopeSet<Id> collectionScope: entityIds) {
+
+            final Id ownerId = collectionScope.getScope().getOwner();
+            final String collectionName = collectionScope.getScope().getName();
+
 
-        for ( final Id entityId : entityIds ) {
-            final CollectionPrefixedKey<Id> collectionPrefixedKey =
+
+            for ( final Id entityId : collectionScope.getIdentifiers() ) {
+                final CollectionPrefixedKey<Id> collectionPrefixedKey =
                     new CollectionPrefixedKey<>( collectionName, ownerId, 
entityId );
 
 
-            final ScopedRowKey<CollectionPrefixedKey<Id>> rowKey =
+                final ScopedRowKey<CollectionPrefixedKey<Id>> rowKey =
                     ScopedRowKey.fromKey( applicationId, collectionPrefixedKey 
);
 
 
-            rowKeys.add( rowKey );
+                rowKeys.add( rowKey );
+            }
         }
 
         /**
@@ -199,7 +206,7 @@ public class MvccEntitySerializationStrategyV3Impl 
implements MvccEntitySerializ
                                        .withColumnSlice( COL_VALUE 
).execute().getResult();
                     }
                     catch ( ConnectionException e ) {
-                        throw new CollectionRuntimeException( null, 
collectionScope,
+                        throw new CollectionRuntimeException( null, 
applicationScope,
                             "An error occurred connecting to cassandra", e );
                     }
                 } ).subscribeOn( scheduler );
@@ -240,7 +247,7 @@ public class MvccEntitySerializationStrategyV3Impl 
implements MvccEntitySerializ
 
 
     @Override
-    public Iterator<MvccEntity> loadDescendingHistory( final CollectionScope 
collectionScope, final Id entityId,
+    public Iterator<MvccEntity> loadDescendingHistory( final ApplicationScope 
applicationScope,  final CollectionScope collectionScope, final Id entityId,
                                                        final UUID version, 
final int fetchSize ) {
 
         Preconditions.checkNotNull( collectionScope, "collectionScope is 
required" );
@@ -255,7 +262,7 @@ public class MvccEntitySerializationStrategyV3Impl 
implements MvccEntitySerializ
 
 
     @Override
-    public Iterator<MvccEntity> loadAscendingHistory( final CollectionScope 
collectionScope, final Id entityId,
+    public Iterator<MvccEntity> loadAscendingHistory( final ApplicationScope 
applicationScope,  final CollectionScope collectionScope, final Id entityId,
                                                       final UUID version, 
final int fetchSize ) {
 
         Preconditions.checkNotNull( collectionScope, "collectionScope is 
required" );
@@ -268,21 +275,25 @@ public class MvccEntitySerializationStrategyV3Impl 
implements MvccEntitySerializ
 
 
     @Override
-    public Optional<MvccEntity> load( final CollectionScope scope, final Id 
entityId ) {
-        final EntitySet results = load( scope, Collections.singleton( entityId 
), UUIDGenerator.newTimeUUID() );
+    public Optional<MvccEntity> load(  final ApplicationScope 
applicationScope, final CollectionScope scope, final Id entityId ) {
+
+
+        final ScopeSet<Id> scopeSet = new ScopeSetImpl<>( scope, 
Collections.singleton( entityId ) );
+
+        final EntitySet results = load( applicationScope, 
Collections.singleton( scopeSet ), UUIDGenerator.newTimeUUID() );
 
         return Optional.fromNullable( results.getEntity( entityId ));
     }
 
 
     @Override
-    public MutationBatch mark( final CollectionScope collectionScope, final Id 
entityId, final UUID version ) {
+    public MutationBatch mark( final ApplicationScope applicationScope, final 
CollectionScope collectionScope, final Id entityId, final UUID version ) {
         Preconditions.checkNotNull( collectionScope, "collectionScope is 
required" );
         Preconditions.checkNotNull( entityId, "entity id is required" );
         Preconditions.checkNotNull( version, "version is required" );
 
 
-        return doWrite( collectionScope, entityId, version, new RowOp() {
+        return doWrite( applicationScope, collectionScope, entityId, version, 
new RowOp() {
             @Override
             public void doOp( final ColumnListMutation<Boolean> colMutation ) {
                 colMutation.putColumn( COL_VALUE, 
entitySerializer.toByteBuffer(
@@ -293,13 +304,13 @@ public class MvccEntitySerializationStrategyV3Impl 
implements MvccEntitySerializ
 
 
     @Override
-    public MutationBatch delete( final CollectionScope collectionScope, final 
Id entityId, final UUID version ) {
+    public MutationBatch delete(  final ApplicationScope applicationScope, 
final CollectionScope collectionScope, final Id entityId, final UUID version ) {
         Preconditions.checkNotNull( collectionScope, "collectionScope is 
required" );
         Preconditions.checkNotNull( entityId, "entity id is required" );
         Preconditions.checkNotNull( version, "version is required" );
 
 
-        return doWrite( collectionScope, entityId, version, new RowOp() {
+        return doWrite(applicationScope,  collectionScope, entityId, version, 
new RowOp() {
             @Override
             public void doOp( final ColumnListMutation<Boolean> colMutation ) {
                 colMutation.deleteColumn( Boolean.TRUE );
@@ -326,10 +337,10 @@ public class MvccEntitySerializationStrategyV3Impl 
implements MvccEntitySerializ
     /**
      * Do the write on the correct row for the entity id with the operation
      */
-    private MutationBatch doWrite( final CollectionScope collectionScope, 
final Id entityId, final UUID version, final RowOp op ) {
+    private MutationBatch doWrite(  final ApplicationScope applicationScope, 
final CollectionScope collectionScope, final Id entityId, final UUID version, 
final RowOp op ) {
         final MutationBatch batch = keyspace.prepareMutationBatch();
 
-        final Id applicationId = collectionScope.getApplication();
+        final Id applicationId = applicationScope.getApplication();
         final Id ownerId = collectionScope.getOwner();
         final String collectionName = collectionScope.getName();
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/adf19ed6/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccLogEntrySerializationStrategyImpl.java
----------------------------------------------------------------------
diff --git 
a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccLogEntrySerializationStrategyImpl.java
 
b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccLogEntrySerializationStrategyImpl.java
index 831091d..4e71e38 100644
--- 
a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccLogEntrySerializationStrategyImpl.java
+++ 
b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccLogEntrySerializationStrategyImpl.java
@@ -38,6 +38,7 @@ import org.apache.cassandra.db.marshal.UUIDType;
 
 import org.apache.usergrid.persistence.collection.CollectionScope;
 import org.apache.usergrid.persistence.collection.MvccLogEntry;
+import org.apache.usergrid.persistence.collection.ScopeSet;
 import org.apache.usergrid.persistence.collection.VersionSet;
 import 
org.apache.usergrid.persistence.collection.exception.CollectionRuntimeException;
 import 
org.apache.usergrid.persistence.collection.mvcc.MvccLogEntrySerializationStrategy;
@@ -49,6 +50,7 @@ import 
org.apache.usergrid.persistence.core.astyanax.MultiTennantColumnFamily;
 import 
org.apache.usergrid.persistence.core.astyanax.MultiTennantColumnFamilyDefinition;
 import org.apache.usergrid.persistence.core.astyanax.ScopedRowKey;
 import org.apache.usergrid.persistence.core.migration.schema.Migration;
+import org.apache.usergrid.persistence.core.scope.ApplicationScope;
 import org.apache.usergrid.persistence.model.entity.Id;
 
 import com.google.common.base.Preconditions;
@@ -98,7 +100,7 @@ public class MvccLogEntrySerializationStrategyImpl 
implements MvccLogEntrySerial
 
 
     @Override
-    public MutationBatch write( final CollectionScope collectionScope, final 
MvccLogEntry entry ) {
+    public MutationBatch write( final ApplicationScope applicationScope, final 
CollectionScope collectionScope, final MvccLogEntry entry ) {
 
         Preconditions.checkNotNull( collectionScope, "collectionScope is 
required" );
         Preconditions.checkNotNull( entry, "entry is required" );
@@ -108,7 +110,7 @@ public class MvccLogEntrySerializationStrategyImpl 
implements MvccLogEntrySerial
         final UUID colName = entry.getVersion();
         final StageStatus stageStatus = new StageStatus( stage, 
entry.getState() );
 
-        return doWrite( collectionScope, entry.getEntityId(), 
entry.getVersion(), new RowOp() {
+        return doWrite(applicationScope, collectionScope, entry.getEntityId(), 
entry.getVersion(), new RowOp() {
             @Override
             public void doOp( final ColumnListMutation<UUID> colMutation ) {
 
@@ -126,9 +128,9 @@ public class MvccLogEntrySerializationStrategyImpl 
implements MvccLogEntrySerial
 
 
     @Override
-    public VersionSet load( final CollectionScope collectionScope, final 
Collection<Id> entityIds,
+    public VersionSet load( final ApplicationScope applicationScope, final 
Collection<ScopeSet<Id>> entityIds,
                             final UUID maxVersion ) {
-        Preconditions.checkNotNull( collectionScope, "collectionScope is 
required" );
+        Preconditions.checkNotNull( applicationScope, "applicationScope is 
required" );
         Preconditions.checkNotNull( entityIds, "entityIds is required" );
         Preconditions.checkArgument( entityIds.size() > 0, "You must specify 
an Id" );
         Preconditions.checkNotNull( maxVersion, "maxVersion is required" );
@@ -139,24 +141,28 @@ public class MvccLogEntrySerializationStrategyImpl 
implements MvccLogEntrySerial
                 "requested size cannot be over configured maximum" );
 
 
-        final Id applicationId = collectionScope.getApplication();
-        final Id ownerId = collectionScope.getOwner();
-        final String collectionName = collectionScope.getName();
+        final Id applicationId = applicationScope.getApplication();
+
 
 
         final List<ScopedRowKey<CollectionPrefixedKey<Id>>> rowKeys = new 
ArrayList<>( entityIds.size() );
 
 
-        for ( final Id entityId : entityIds ) {
-            final CollectionPrefixedKey<Id> collectionPrefixedKey =
+        for(ScopeSet<Id> scopeSet: entityIds) {
+            final Id ownerId = scopeSet.getScope().getOwner();
+            final String collectionName = scopeSet.getScope().getName();
+
+            for ( final Id entityId : scopeSet.getIdentifiers() ) {
+                final CollectionPrefixedKey<Id> collectionPrefixedKey =
                     new CollectionPrefixedKey<>( collectionName, ownerId, 
entityId );
 
 
-            final ScopedRowKey<CollectionPrefixedKey<Id>> rowKey =
+                final ScopedRowKey<CollectionPrefixedKey<Id>> rowKey =
                     ScopedRowKey.fromKey( applicationId, collectionPrefixedKey 
);
 
 
-            rowKeys.add( rowKey );
+                rowKeys.add( rowKey );
+            }
         }
 
 
@@ -169,7 +175,7 @@ public class MvccLogEntrySerializationStrategyImpl 
implements MvccLogEntrySerial
                                           .iterator();
         }
         catch ( ConnectionException e ) {
-            throw new CollectionRuntimeException( null, collectionScope, "An 
error occurred connecting to cassandra",
+            throw new CollectionRuntimeException( null, applicationScope, "An 
error occurred connecting to cassandra",
                     e );
         }
 
@@ -207,8 +213,9 @@ public class MvccLogEntrySerializationStrategyImpl 
implements MvccLogEntrySerial
 
 
     @Override
-    public List<MvccLogEntry> load( final CollectionScope collectionScope, 
final Id entityId, final UUID version,
+    public List<MvccLogEntry> load( final ApplicationScope applicationScope, 
final CollectionScope collectionScope, final Id entityId, final UUID version,
                                     final int maxSize ) {
+        Preconditions.checkNotNull( applicationScope, "applicationScope is 
required" );
         Preconditions.checkNotNull( collectionScope, "collectionScope is 
required" );
         Preconditions.checkNotNull( entityId, "entity id is required" );
         Preconditions.checkNotNull( version, "version is required" );
@@ -218,7 +225,7 @@ public class MvccLogEntrySerializationStrategyImpl 
implements MvccLogEntrySerial
         ColumnList<UUID> columns;
         try {
 
-            final Id applicationId = collectionScope.getApplication();
+            final Id applicationId = applicationScope.getApplication();
             final Id ownerId = collectionScope.getOwner();
             final String collectionName = collectionScope.getName();
 
@@ -253,13 +260,14 @@ public class MvccLogEntrySerializationStrategyImpl 
implements MvccLogEntrySerial
 
 
     @Override
-    public MutationBatch delete( final CollectionScope context, final Id 
entityId, final UUID version ) {
+    public MutationBatch delete(final ApplicationScope applicationScope, final 
CollectionScope context, final Id entityId, final UUID version ) {
 
+        Preconditions.checkNotNull( applicationScope, "applicationScope is 
required" );
         Preconditions.checkNotNull( context, "context is required" );
         Preconditions.checkNotNull( entityId, "entityId is required" );
         Preconditions.checkNotNull( version, "version context is required" );
 
-        return doWrite( context, entityId, version, new RowOp() {
+        return doWrite( applicationScope, context, entityId, version, new 
RowOp() {
             @Override
             public void doOp( final ColumnListMutation<UUID> colMutation ) {
                 colMutation.deleteColumn( version );
@@ -299,7 +307,7 @@ public class MvccLogEntrySerializationStrategyImpl 
implements MvccLogEntrySerial
      *
      * @param collectionScope We need to use this when getting the keyspace
      */
-    private MutationBatch doWrite( CollectionScope collectionScope, Id 
entityId, UUID version, RowOp op ) {
+    private MutationBatch doWrite(final ApplicationScope applicationScope,  
CollectionScope collectionScope, Id entityId, UUID version, RowOp op ) {
 
         final MutationBatch batch = keyspace.prepareMutationBatch();
 
@@ -307,7 +315,7 @@ public class MvccLogEntrySerializationStrategyImpl 
implements MvccLogEntrySerial
 
         LOG.debug( "Writing version with timestamp '{}'", timestamp );
 
-        final Id applicationId = collectionScope.getApplication();
+        final Id applicationId = applicationScope.getApplication();
         final Id ownerId = collectionScope.getOwner();
         final String collectionName = collectionScope.getName();
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/adf19ed6/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/ScopeSetImpl.java
----------------------------------------------------------------------
diff --git 
a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/ScopeSetImpl.java
 
b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/ScopeSetImpl.java
new file mode 100644
index 0000000..98abb4b
--- /dev/null
+++ 
b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/ScopeSetImpl.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.usergrid.persistence.collection.serialization.impl;
+
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.usergrid.persistence.collection.CollectionScope;
+import org.apache.usergrid.persistence.collection.ScopeSet;
+
+
+public class ScopeSetImpl<T> implements ScopeSet<T> {
+
+
+    public final CollectionScope scope;
+    public final Collection<T> identifiers;
+
+
+    public ScopeSetImpl( final CollectionScope scope, final Collection<T> 
identifiers ) {
+        this.scope = scope;
+        this.identifiers = identifiers;
+    }
+
+
+    public ScopeSetImpl( final CollectionScope scope, final T identifier ) {
+        this.scope = scope;
+        this.identifiers = Collections.singleton(identifier);
+    }
+
+
+
+    @Override
+    public CollectionScope getScope() {
+        return scope;
+    }
+
+
+    @Override
+    public Collection<T> getIdentifiers() {
+        return identifiers;
+    }
+
+
+    @Override
+    public void addIdentifier( final T identifier ) {
+        this.identifiers.add( identifier );
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/adf19ed6/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
----------------------------------------------------------------------
diff --git 
a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
 
b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
index c95650c..d07ec24 100644
--- 
a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
+++ 
b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
@@ -25,8 +25,6 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.UUID;
 
-import com.netflix.astyanax.model.ConsistencyLevel;
-import org.apache.usergrid.persistence.core.astyanax.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -37,6 +35,7 @@ import 
org.apache.usergrid.persistence.collection.serialization.SerializationFig
 import org.apache.usergrid.persistence.collection.serialization.UniqueValue;
 import 
org.apache.usergrid.persistence.collection.serialization.UniqueValueSerializationStrategy;
 import org.apache.usergrid.persistence.collection.serialization.UniqueValueSet;
+import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
 import org.apache.usergrid.persistence.core.astyanax.ColumnNameIterator;
 import org.apache.usergrid.persistence.core.astyanax.ColumnParser;
 import org.apache.usergrid.persistence.core.astyanax.ColumnTypes;
@@ -44,6 +43,7 @@ import 
org.apache.usergrid.persistence.core.astyanax.IdRowCompositeSerializer;
 import org.apache.usergrid.persistence.core.astyanax.MultiTennantColumnFamily;
 import 
org.apache.usergrid.persistence.core.astyanax.MultiTennantColumnFamilyDefinition;
 import org.apache.usergrid.persistence.core.astyanax.ScopedRowKey;
+import org.apache.usergrid.persistence.core.scope.ApplicationScope;
 import org.apache.usergrid.persistence.core.util.ValidationUtils;
 import org.apache.usergrid.persistence.model.entity.Id;
 import org.apache.usergrid.persistence.model.field.Field;
@@ -55,6 +55,7 @@ import com.netflix.astyanax.Keyspace;
 import com.netflix.astyanax.MutationBatch;
 import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
 import com.netflix.astyanax.model.Column;
+import com.netflix.astyanax.model.ConsistencyLevel;
 import com.netflix.astyanax.model.Row;
 import com.netflix.astyanax.query.RowQuery;
 import com.netflix.astyanax.util.RangeBuilder;
@@ -113,8 +114,11 @@ public class UniqueValueSerializationStrategyImpl 
implements UniqueValueSerializ
     }
 
 
-    public MutationBatch write( final CollectionScope collectionScope, 
UniqueValue value ) {
+    public MutationBatch write( final ApplicationScope applicationScope, final 
CollectionScope collectionScope, final UniqueValue value ) {
+
 
+        Preconditions.checkNotNull( applicationScope, "applicationScope is 
required" );
+        Preconditions.checkNotNull( collectionScope, "collectionScope is 
required" );
 
         Preconditions.checkNotNull( value, "value is required" );
 
@@ -133,7 +137,7 @@ public class UniqueValueSerializationStrategyImpl 
implements UniqueValueSerializ
         final EntityVersion ev = new EntityVersion( entityId, entityVersion );
         final UniqueFieldEntry uniqueFieldEntry = new UniqueFieldEntry( 
entityVersion, field );
 
-        return doWrite( collectionScope, value, new 
UniqueValueSerializationStrategyImpl.RowOp() {
+        return doWrite(applicationScope,  collectionScope, value, new 
UniqueValueSerializationStrategyImpl.RowOp() {
 
             @Override
             public void doLookup( final ColumnListMutation<EntityVersion> 
colMutation ) {
@@ -150,7 +154,7 @@ public class UniqueValueSerializationStrategyImpl 
implements UniqueValueSerializ
 
 
     @Override
-    public MutationBatch write( final CollectionScope collectionScope, final 
UniqueValue value, final int timeToLive ) {
+    public MutationBatch write(final ApplicationScope applicationScope,  final 
CollectionScope collectionScope, final UniqueValue value, final int timeToLive 
) {
 
         Preconditions.checkNotNull( value, "value is required" );
         Preconditions.checkArgument( timeToLive > 0, "timeToLive must be 
greater than 0 is required" );
@@ -165,7 +169,7 @@ public class UniqueValueSerializationStrategyImpl 
implements UniqueValueSerializ
         final EntityVersion ev = new EntityVersion( entityId, entityVersion );
         final UniqueFieldEntry uniqueFieldEntry = new UniqueFieldEntry( 
entityVersion, field );
 
-        return doWrite( collectionScope, value, new 
UniqueValueSerializationStrategyImpl.RowOp() {
+        return doWrite(applicationScope, collectionScope, value, new 
UniqueValueSerializationStrategyImpl.RowOp() {
 
             @Override
             public void doLookup( final ColumnListMutation<EntityVersion> 
colMutation ) {
@@ -184,7 +188,7 @@ public class UniqueValueSerializationStrategyImpl 
implements UniqueValueSerializ
 
 
     @Override
-    public MutationBatch delete( final CollectionScope scope, UniqueValue 
value ) {
+    public MutationBatch delete(final ApplicationScope applicationScope,  
final CollectionScope scope, UniqueValue value ) {
 
         Preconditions.checkNotNull( value, "value is required" );
 
@@ -200,7 +204,7 @@ public class UniqueValueSerializationStrategyImpl 
implements UniqueValueSerializ
         final EntityVersion ev = new EntityVersion( entityId, entityVersion );
         final UniqueFieldEntry uniqueFieldEntry = new UniqueFieldEntry( 
entityVersion, field );
 
-        return doWrite( scope, value, new 
UniqueValueSerializationStrategyImpl.RowOp() {
+        return doWrite(applicationScope, scope, value, new 
UniqueValueSerializationStrategyImpl.RowOp() {
 
             @Override
             public void doLookup( final ColumnListMutation<EntityVersion> 
colMutation ) {
@@ -221,14 +225,14 @@ public class UniqueValueSerializationStrategyImpl 
implements UniqueValueSerializ
      *
      * @param collectionScope We need to use this when getting the keyspace
      */
-    private MutationBatch doWrite( CollectionScope collectionScope, 
UniqueValue uniqueValue, RowOp op ) {
+    private MutationBatch doWrite( final ApplicationScope applicationScope, 
CollectionScope collectionScope, UniqueValue uniqueValue, RowOp op ) {
         final MutationBatch batch = keyspace.prepareMutationBatch();
         final CollectionPrefixedKey<Field> uniquePrefixedKey =
             new CollectionPrefixedKey<>( collectionScope.getName(), 
collectionScope.getOwner(), uniqueValue.getField() );
 
 
         op.doLookup( batch
-            .withRow( CF_UNIQUE_VALUES, ScopedRowKey.fromKey( 
collectionScope.getApplication(), uniquePrefixedKey ) ) );
+            .withRow( CF_UNIQUE_VALUES, ScopedRowKey.fromKey( 
applicationScope.getApplication(), uniquePrefixedKey ) ) );
 
 
         final Id ownerId = collectionScope.getOwner();
@@ -239,7 +243,7 @@ public class UniqueValueSerializationStrategyImpl 
implements UniqueValueSerializ
 
 
         op.doLog( batch.withRow( CF_ENTITY_UNIQUE_VALUES,
-            ScopedRowKey.fromKey( collectionScope.getApplication(), 
collectionPrefixedEntityKey ) ) );
+            ScopedRowKey.fromKey( applicationScope.getApplication(), 
collectionPrefixedEntityKey ) ) );
 
 
         return batch;
@@ -248,11 +252,13 @@ public class UniqueValueSerializationStrategyImpl 
implements UniqueValueSerializ
 
 
     @Override
-    public UniqueValueSet load(final CollectionScope colScope, final 
Collection<Field> fields ) throws ConnectionException{
-        return 
load(colScope,ConsistencyLevel.valueOf(cassandraFig.getReadCL()), fields);
+    public UniqueValueSet load(final ApplicationScope applicationScope, final 
CollectionScope colScope, final Collection<Field> fields ) throws 
ConnectionException{
+        return load(applicationScope, 
colScope,ConsistencyLevel.valueOf(cassandraFig.getReadCL()), fields);
     }
+
+
     @Override
-    public UniqueValueSet load(final CollectionScope colScope, final 
ConsistencyLevel consistencyLevel, final Collection<Field> fields )
+    public UniqueValueSet load(final ApplicationScope applicationScope, final 
CollectionScope colScope, final ConsistencyLevel consistencyLevel, final 
Collection<Field> fields )
             throws ConnectionException {
 
         Preconditions.checkNotNull( fields, "fields are required" );
@@ -261,7 +267,7 @@ public class UniqueValueSerializationStrategyImpl 
implements UniqueValueSerializ
 
         final List<ScopedRowKey<CollectionPrefixedKey<Field>>> keys = new 
ArrayList<>( fields.size() );
 
-        final Id applicationId = colScope.getApplication();
+        final Id applicationId = applicationScope.getApplication();
         final Id ownerId = colScope.getOwner();
         final String collectionName = colScope.getName();
 
@@ -312,14 +318,14 @@ public class UniqueValueSerializationStrategyImpl 
implements UniqueValueSerializ
 
 
     @Override
-    public Iterator<UniqueValue> getAllUniqueFields( final CollectionScope 
collectionScope, final Id entityId ) {
+    public Iterator<UniqueValue> getAllUniqueFields( final ApplicationScope 
applicationScope,final CollectionScope collectionScope, final Id entityId ) {
 
 
         Preconditions.checkNotNull( collectionScope, "collectionScope is 
required" );
         Preconditions.checkNotNull( entityId, "entity id is required" );
 
 
-        final Id applicationId = collectionScope.getApplication();
+        final Id applicationId = applicationScope.getApplication();
         final Id ownerId = collectionScope.getOwner();
         final String collectionName = collectionScope.getName();
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/adf19ed6/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSetImpl.java
----------------------------------------------------------------------
diff --git 
a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSetImpl.java
 
b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSetImpl.java
index 8dd9528..cc9d5bf 100644
--- 
a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSetImpl.java
+++ 
b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSetImpl.java
@@ -23,26 +23,27 @@ import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.usergrid.persistence.collection.CollectionScope;
 import org.apache.usergrid.persistence.collection.serialization.UniqueValue;
 import org.apache.usergrid.persistence.collection.serialization.UniqueValueSet;
 
 
 public class UniqueValueSetImpl implements UniqueValueSet {
 
-    private final Map<String, UniqueValue> values;
+    private final Map<MapKey, UniqueValue> values;
 
     public UniqueValueSetImpl(final int expectedMaxSize) {
         values = new HashMap<>(expectedMaxSize);
     }
 
 
-    public void addValue(UniqueValue value){
-        values.put( value.getField().getName(), value );
+    public void addValue(final CollectionScope scope, final UniqueValue value){
+        values.put( new MapKey( scope, value.getField().getName()), value );
     }
 
     @Override
-    public UniqueValue getValue( final String fieldName ) {
-        return values.get( fieldName );
+    public UniqueValue getValue(final CollectionScope scope,  final String 
fieldName ) {
+        return values.get( new MapKey(scope, fieldName ));
     }
 
 
@@ -58,9 +59,9 @@ public class UniqueValueSetImpl implements UniqueValueSet {
     private static final class
             UniqueValueIterator implements Iterator<UniqueValue>{
 
-        private final Iterator<Map.Entry<String, UniqueValue>> sourceIterator;
+        private final Iterator<Map.Entry<MapKey, UniqueValue>> sourceIterator;
 
-        public UniqueValueIterator( final Set<Map.Entry<String, UniqueValue>> 
entries ) {
+        public UniqueValueIterator( final Set<Map.Entry<MapKey, UniqueValue>> 
entries ) {
             this.sourceIterator = entries.iterator();
         }
 
@@ -82,4 +83,20 @@ public class UniqueValueSetImpl implements UniqueValueSet {
             throw new UnsupportedOperationException( "Remove is unsupported" );
         }
     }
+
+
+    /**
+     * The key to look up unique fields by scope and field name
+     */
+    private static final class MapKey{
+        private final CollectionScope scope;
+        private final String fieldName;
+
+
+        private MapKey( final CollectionScope scope, final String fieldName ) {
+            this.scope = scope;
+            this.fieldName = fieldName;
+        }
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/adf19ed6/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/migration/EntityIdScope.java
----------------------------------------------------------------------
diff --git 
a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/migration/EntityIdScope.java
 
b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/migration/EntityIdScope.java
index 0e70e75..a67f49c 100644
--- 
a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/migration/EntityIdScope.java
+++ 
b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/migration/EntityIdScope.java
@@ -29,10 +29,12 @@ import org.apache.usergrid.persistence.model.entity.Id;
  * Tuple containing collectionscope and entityid
  */
 public class EntityIdScope{
-    private final Id id;
+    private final ApplicationScope applicationScope;
     private final CollectionScope collectionScope;
+    private final Id id;
 
-    public EntityIdScope(CollectionScope collectionScope, Id id){
+    public EntityIdScope( final ApplicationScope applicationScope, 
CollectionScope collectionScope, Id id ){
+        this.applicationScope = applicationScope;
         this.id = id;
         this.collectionScope = collectionScope;
     }
@@ -46,4 +48,9 @@ public class EntityIdScope{
     public CollectionScope getCollectionScope() {
         return collectionScope;
     }
+
+
+    public ApplicationScope getApplicationScope() {
+        return applicationScope;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/adf19ed6/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/migration/MvccEntityDataMigrationImpl.java
----------------------------------------------------------------------
diff --git 
a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/migration/MvccEntityDataMigrationImpl.java
 
b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/migration/MvccEntityDataMigrationImpl.java
index 6982857..2a96a9d 100644
--- 
a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/migration/MvccEntityDataMigrationImpl.java
+++ 
b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/migration/MvccEntityDataMigrationImpl.java
@@ -38,6 +38,7 @@ import 
org.apache.usergrid.persistence.collection.serialization.UniqueValue;
 import 
org.apache.usergrid.persistence.collection.serialization.UniqueValueSerializationStrategy;
 import 
org.apache.usergrid.persistence.collection.serialization.impl.MvccEntitySerializationStrategyV3Impl;
 import 
org.apache.usergrid.persistence.collection.serialization.impl.UniqueValueImpl;
+import org.apache.usergrid.persistence.core.scope.ApplicationScope;
 import org.apache.usergrid.persistence.model.util.EntityUtils;
 import 
org.apache.usergrid.persistence.core.migration.data.DataMigrationException;
 import org.apache.usergrid.persistence.core.migration.data.DataMigration;
@@ -58,8 +59,6 @@ import 
com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
 
 import rx.Observable;
 import rx.Subscriber;
-import rx.functions.Action1;
-import rx.functions.Func1;
 import rx.schedulers.Schedulers;
 
 
@@ -126,6 +125,7 @@ public class MvccEntityDataMigrationImpl implements 
DataMigration<EntityIdScope>
         final Observable<List<EntityToSaveMessage>> migrated =
             migrationDataProvider.getData().subscribeOn( Schedulers.io() 
).flatMap( entityToSaveList -> Observable.just( entityToSaveList ).flatMap( 
entityIdScope -> {
 
+                final ApplicationScope applicationScope = 
entityIdScope.getApplicationScope();
                 //load the entity
                 final CollectionScope currentScope = 
entityIdScope.getCollectionScope();
 
@@ -138,7 +138,7 @@ public class MvccEntityDataMigrationImpl implements 
DataMigration<EntityIdScope>
                 //won't support anything beyond V2
 
                 final Iterator<MvccEntity> allVersions =
-                    migration.from.loadAscendingHistory( currentScope, 
entityIdScope.getId(), startTime, 100 );
+                    migration.from.loadAscendingHistory( applicationScope, 
currentScope, entityIdScope.getId(), startTime, 100 );
 
                 //emit all the entity versions
                 return Observable.create( new 
Observable.OnSubscribe<EntityToSaveMessage>() {
@@ -148,7 +148,7 @@ public class MvccEntityDataMigrationImpl implements 
DataMigration<EntityIdScope>
 
                         while ( allVersions.hasNext() ) {
                             final EntityToSaveMessage message =
-                                new EntityToSaveMessage( currentScope, 
allVersions.next() );
+                                new EntityToSaveMessage( applicationScope, 
currentScope, allVersions.next() );
                             subscriber.onNext( message );
                         }
 
@@ -163,7 +163,7 @@ public class MvccEntityDataMigrationImpl implements 
DataMigration<EntityIdScope>
                         List<EntityVersionCleanupTask> 
entityVersionCleanupTasks = new ArrayList( entities.size() );
 
                         for ( EntityToSaveMessage message : entities ) {
-                            final MutationBatch entityRewrite = 
migration.to.write( message.scope, message.entity );
+                            final MutationBatch entityRewrite = 
migration.to.write(message.applicationScope, message.scope, message.entity );
 
                             //add to
                             // the
@@ -195,7 +195,7 @@ public class MvccEntityDataMigrationImpl implements 
DataMigration<EntityIdScope>
 
                                 UniqueValue written = new UniqueValueImpl( 
field, entityId, version );
 
-                                MutationBatch mb = 
uniqueValueSerializationStrategy.write( message.scope, written );
+                                MutationBatch mb = 
uniqueValueSerializationStrategy.write(message.applicationScope,  
message.scope, written );
 
 
                                 // merge into our
@@ -247,11 +247,14 @@ public class MvccEntityDataMigrationImpl implements 
DataMigration<EntityIdScope>
 
 
     private static final class EntityToSaveMessage {
+        private final ApplicationScope applicationScope;
         private final CollectionScope scope;
         private final MvccEntity entity;
 
 
-        private EntityToSaveMessage( final CollectionScope scope, final 
MvccEntity entity ) {
+        private EntityToSaveMessage( final ApplicationScope applicationScope, 
final CollectionScope scope, final
+        MvccEntity entity ) {
+            this.applicationScope = applicationScope;
             this.scope = scope;
             this.entity = entity;
         }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/adf19ed6/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/impl/EntityVersionCleanupTaskTest.java
----------------------------------------------------------------------
diff --git 
a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/impl/EntityVersionCleanupTaskTest.java
 
b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/impl/EntityVersionCleanupTaskTest.java
index 787ab30..f18c984 100644
--- 
a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/impl/EntityVersionCleanupTaskTest.java
+++ 
b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/impl/EntityVersionCleanupTaskTest.java
@@ -19,7 +19,6 @@
 package org.apache.usergrid.persistence.collection.impl;
 
 
-import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -29,16 +28,12 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Semaphore;
 
 import org.junit.AfterClass;
-import org.junit.Ignore;
 import org.junit.Test;
 
 import org.apache.usergrid.persistence.collection.CollectionScope;
-import org.apache.usergrid.persistence.collection.MvccEntity;
 import org.apache.usergrid.persistence.collection.MvccLogEntry;
 import org.apache.usergrid.persistence.collection.event.EntityVersionDeleted;
 import 
org.apache.usergrid.persistence.collection.mvcc.MvccLogEntrySerializationStrategy;
-import 
org.apache.usergrid.persistence.collection.mvcc.entity.impl.MvccEntityImpl;
-import 
org.apache.usergrid.persistence.collection.serialization.MvccEntitySerializationStrategy;
 import 
org.apache.usergrid.persistence.collection.serialization.SerializationFig;
 import org.apache.usergrid.persistence.collection.serialization.UniqueValue;
 import 
org.apache.usergrid.persistence.collection.serialization.UniqueValueSerializationStrategy;
@@ -47,12 +42,9 @@ import 
org.apache.usergrid.persistence.collection.util.UniqueValueEntryMock;
 import org.apache.usergrid.persistence.collection.util.VersionGenerator;
 import org.apache.usergrid.persistence.core.task.NamedTaskExecutorImpl;
 import org.apache.usergrid.persistence.core.task.TaskExecutor;
-import org.apache.usergrid.persistence.model.entity.Entity;
 import org.apache.usergrid.persistence.model.entity.Id;
 import org.apache.usergrid.persistence.model.entity.SimpleId;
-import org.apache.usergrid.persistence.model.util.UUIDGenerator;
 
-import com.google.common.base.Optional;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.netflix.astyanax.Keyspace;
 import com.netflix.astyanax.MutationBatch;
@@ -63,7 +55,6 @@ import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.same;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -127,7 +118,8 @@ public class EntityVersionCleanupTaskTest {
 
 
         EntityVersionCleanupTask cleanupTask =
-                new EntityVersionCleanupTask( serializationFig, less, uvss, 
keyspace, listeners, appScope, entityId,
+                new EntityVersionCleanupTask( serializationFig, less, uvss, 
keyspace, listeners, applicationScope,
+                    appScope, entityId,
                         version, false );
 
         final MutationBatch newBatch = mock( MutationBatch.class );
@@ -209,7 +201,8 @@ public class EntityVersionCleanupTaskTest {
 
 
         EntityVersionCleanupTask cleanupTask =
-                new EntityVersionCleanupTask( serializationFig, less, uvss, 
keyspace, listeners, appScope, entityId, version, false );
+                new EntityVersionCleanupTask( serializationFig, less, uvss, 
keyspace, listeners, applicationScope,
+                    appScope, entityId, version, false );
 
         final MutationBatch newBatch = mock( MutationBatch.class );
 
@@ -288,7 +281,8 @@ public class EntityVersionCleanupTaskTest {
 
 
         EntityVersionCleanupTask cleanupTask =
-                new EntityVersionCleanupTask( serializationFig, less, uvss, 
keyspace, listeners, appScope, entityId,
+                new EntityVersionCleanupTask( serializationFig, less, uvss, 
keyspace, listeners, applicationScope,
+                    appScope, entityId,
                         version, false );
 
         final MutationBatch newBatch = mock( MutationBatch.class );
@@ -388,7 +382,8 @@ public class EntityVersionCleanupTaskTest {
 
 
         EntityVersionCleanupTask cleanupTask =
-                new EntityVersionCleanupTask( serializationFig, less, uvss, 
keyspace, listeners, appScope, entityId,
+                new EntityVersionCleanupTask( serializationFig, less, uvss, 
keyspace, listeners, applicationScope,
+                    appScope, entityId,
                         version, false );
 
         final MutationBatch newBatch = mock( MutationBatch.class );
@@ -515,7 +510,8 @@ public class EntityVersionCleanupTaskTest {
 
 
         EntityVersionCleanupTask cleanupTask =
-                new EntityVersionCleanupTask( serializationFig, less, uvss, 
keyspace, listeners, appScope, entityId,
+                new EntityVersionCleanupTask( serializationFig, less, uvss, 
keyspace, listeners, applicationScope,
+                    appScope, entityId,
                         version, false);
 
         final MutationBatch newBatch = mock( MutationBatch.class );
@@ -643,7 +639,8 @@ public class EntityVersionCleanupTaskTest {
 
 
         EntityVersionCleanupTask cleanupTask =
-                new EntityVersionCleanupTask( serializationFig, less, uvss, 
keyspace, listeners, appScope, entityId,
+                new EntityVersionCleanupTask( serializationFig, less, uvss, 
keyspace, listeners, applicationScope,
+                    appScope, entityId,
                         version, false );
 
         final MutationBatch newBatch = mock( MutationBatch.class );

Reply via email to