public function AddModule($Module, $AssetTarget = '') {
      $this->FireEvent('BeforeAddModule');
      $AssetModule = $Module;
      
      if (!is_object($AssetModule)) {
         if (property_exists($this, $Module) && is_object($this->$Module)) {
            $AssetModule = $this->$Module;
         } else {
            $ModuleClassExists = class_exists($Module);

            if ($ModuleClassExists) {
               // Make sure that the class implements Gdn_IModule
               $ReflectionClass = new ReflectionClass($Module);
               if ($ReflectionClass->implementsInterface("Gdn_IModule"))
                  $AssetModule = new $Module($this);
            }
         }
      }
      
      if (is_object($AssetModule)) {
         $AssetTarget = ($AssetTarget == '' ? $AssetModule->AssetTarget() : $AssetTarget);
         // echo '<div>adding: '.get_class($AssetModule).' ('.(property_exists($AssetModule, 'HtmlId') ? $AssetModule->HtmlId : '').') to '.$AssetTarget.' <textarea>'.$AssetModule->ToString().'</textarea></div>';
         $this->AddAsset($AssetTarget, $AssetModule, $AssetModule->Name());
      }

      $this->FireEvent('AfterAddModule');
   }