public function remove($aliasOrGClass) {
    if ($aliasOrGClass instanceof ClassInterface) {
      $gClass = $aliasOrGClass;
      $alias = $aliasOrGClass->getName();
    } else {
      $gClass = NULL;
      $alias = $aliasOrGClass;
    }
    
    if (array_key_exists($loweralias = mb_strtolower($alias), $this->aliases)) {
      unset($this->classes[ $this->aliases[$loweralias] ]);
      unset($this->aliases[$loweralias]);
    } elseif (isset($gClass)) {
      foreach ($this->classes as $alias => $otherGClass) {
        if ($otherGClass->equals($gClass)) {
          unset($this->aliases[mb_strtolower($alias)]);
          unset($this->classes[$alias]);
          break;
        }
      }
    }
    
    return $this;
  }