Set<String> indicies) {
AbstractInhabitantImpl<?> i = new LazyInhabitant(habitat, classLoader, typeName, metadata, lead);
if (contains(indicies, RunLevel.class.getName())) {
// this is a RunLevel service, we need to load type in order to get
// more type information about it, namely it's environment and actual RunLevel id
RunLevel rl = i.getAnnotation(RunLevel.class);
assert(null != rl) : typeName + " is a problem; " + i + " has no RunLevel annotation";
assert(!i.isInstantiated()) : "inhabitant should not be active: " + i;
// get the appropriate RLS for this RunLevel
RunLevelService<?> rls = runLevelServices.get(habitat, rl);
InhabitantListener listener = InhabitantListener.class.isInstance(rls) ?
InhabitantListener.class.cast(rls) : null;
// wrap the inhabitant with a RunLevelInhabitant
int runLevel = rl.value();
// construct the runLevel inhabitant
i = new RunLevelInhabitant(i, runLevel, rls.getState(), listener);
}