| Index: service/datastore/multiarg.go
 | 
| diff --git a/service/datastore/multiarg.go b/service/datastore/multiarg.go
 | 
| index 9e590b992c668a91a07ce4a0baed8719549a8785..291583781558606d5aef20f788897dbea0a951f6 100644
 | 
| --- a/service/datastore/multiarg.go
 | 
| +++ b/service/datastore/multiarg.go
 | 
| @@ -41,8 +41,8 @@ type multiArgType struct {
 | 
|  	newElem func() reflect.Value
 | 
|  }
 | 
|  
 | 
| -func (mat *multiArgType) getKey(aid, ns string, slot reflect.Value) (*Key, error) {
 | 
| -	return newKeyObjErr(aid, ns, mat.getMGS(slot))
 | 
| +func (mat *multiArgType) getKey(kc KeyContext, slot reflect.Value) (*Key, error) {
 | 
| +	return newKeyObjErr(kc, mat.getMGS(slot))
 | 
|  }
 | 
|  
 | 
|  func (mat *multiArgType) getPM(slot reflect.Value) (PropertyMap, error) {
 | 
| @@ -237,7 +237,7 @@ func mustParseArg(et reflect.Type, sliceArg bool) *multiArgType {
 | 
|  	panic(fmt.Errorf("invalid argument type: %s is not a PLS or pointer-to-struct", et))
 | 
|  }
 | 
|  
 | 
| -func newKeyObjErr(aid, ns string, mgs MetaGetterSetter) (*Key, error) {
 | 
| +func newKeyObjErr(kc KeyContext, mgs MetaGetterSetter) (*Key, error) {
 | 
|  	if key, _ := GetMetaDefault(mgs, "key", nil).(*Key); key != nil {
 | 
|  		return key, nil
 | 
|  	}
 | 
| @@ -255,7 +255,7 @@ func newKeyObjErr(aid, ns string, mgs MetaGetterSetter) (*Key, error) {
 | 
|  	// get parent
 | 
|  	par, _ := GetMetaDefault(mgs, "parent", nil).(*Key)
 | 
|  
 | 
| -	return NewKey(aid, ns, kind, sid, iid, par), nil
 | 
| +	return kc.NewKey(kind, sid, iid, par), nil
 | 
|  }
 | 
|  
 | 
|  func isOKSingleType(t reflect.Type, allowKey bool) error {
 | 
| @@ -401,8 +401,8 @@ func (mma *metaMultiArg) iterator(cb metaMultiArgIteratorCallback) *metaMultiArg
 | 
|  	}
 | 
|  }
 | 
|  
 | 
| -// getKeysPMs returns the
 | 
| -func (mma *metaMultiArg) getKeysPMs(aid, ns string, meta bool) ([]*Key, []PropertyMap, error) {
 | 
| +// getKeysPMs returns the keys and PropertyMap for the supplied argument items.
 | 
| +func (mma *metaMultiArg) getKeysPMs(kc KeyContext, meta bool) ([]*Key, []PropertyMap, error) {
 | 
|  	var et errorTracker
 | 
|  	it := mma.iterator(et.init(mma))
 | 
|  
 | 
| @@ -415,7 +415,7 @@ func (mma *metaMultiArg) getKeysPMs(aid, ns string, meta bool) ([]*Key, []Proper
 | 
|  
 | 
|  	for i := 0; i < mma.count; i++ {
 | 
|  		it.next(func(mat *multiArgType, slot reflect.Value) error {
 | 
| -			key, err := mat.getKey(aid, ns, slot)
 | 
| +			key, err := mat.getKey(kc, slot)
 | 
|  			if err != nil {
 | 
|  				return err
 | 
|  			}
 | 
| 
 |