code: @Override
  	public Context create(String name, Tree params, CallOptions.Options opts, PacketStream stream, Context parent) {
  
  		// Generate ID
  		String id = uid.nextUID();
  
  		// Create new Context
  		if (parent == null) {
  			return new Context(serviceInvoker, eventbus, id, name, params, opts, stream);
  		}
  
  		// Merge meta block
  		if (parent.params != null) {
  			Tree parentMeta = parent.params.getMeta(false);
  			if (parentMeta != null && !parentMeta.isEmpty()) {
  				Tree currentMeta = params.getMeta(true);
  				if (currentMeta.isEmpty()) {
  					currentMeta.setObject(parentMeta.asObject());
  				} else {
  					currentMeta.copyFrom(parentMeta, false);
  				}
  			}
  		}
  
  		// Verify call level
  		if (maxCallLevel > 0 && parent.level >= maxCallLevel) {
  			throw new MaxCallLevelError(broker.getNodeID(), maxCallLevel);
  		}
  
  		// Create context (nested call)
  		return new Context(id, name, params, opts, stream, parent);
  	}
docs: --- CREATE CONTEXT ---