public final void update() {

		// See if this morph needs to be deactivated
		// TODO replace with usage of requirements.
		if (getMass() < getClass().getAnnotation(MorphInfo.class).disableMass()) {
			LOGGER.trace("Disabling morph");
			tryToDeactivate(true);
		}

		for (Behavior<?> behavior : getAlwaysActiveBehaviorList()) {
			behavior.tryToExecute();
		}

		// then execute the behavior specific to the morph that might be active/inactive
		for (Behavior<?> behavior : getActivationLinkedBehaviorList()) {
			behavior.tryToExecute();
		}

		// finally try to execute the alternate behaviors
		// these behaviors do not depend on the activation state of their
		// owning morph
		for (Behavior<?> behavior : getActivationIsolatedBehaviorList()) {
			behavior.tryToExecute(true);
		}

		updateMeanEnergyFlow();
	}