protected void detachAndDisposeEntities(boolean onlyPreserved) {
    IEntity index;

    final int CHILD_COUNT = this.getChildCount();
    final int HUD_CHILD_COUNT = SessionScene.HUD.getChildCount();

    for (int i = 0; i < CHILD_COUNT; i++) {
      index = this.getChildByIndex(0);
      if (onlyPreserved ? index.getTag() != SessionScene.TAG_PRESERVE : true) {
        index.detachSelf();
        if (!index.isDisposed()) index.dispose();
      }
    }

    for (int i = 0; i < HUD_CHILD_COUNT; i++) {
      index = SessionScene.HUD.getChildByIndex(0);
      if (onlyPreserved ? index.getTag() != SessionScene.TAG_PRESERVE : true) {
        index.detachSelf();
        if (!index.isDisposed()) index.dispose();
      }
    }
  }