public function getProperties(Model $pModel)
 {
     $lReturn = null;
     if ($pModel instanceof LocalModel) {
         $lInstanceModels =& $this->mLocalTypes[$pModel->getMainModel()->getModelName()];
     } else {
         $lInstanceModels =& $this->mInstanceModels;
     }
     if (is_null($this->mManifestParser) && is_object($lInstanceModels[$pModel->getModelName()]) && $lInstanceModels[$pModel->getModelName()]->isLoaded()) {
         $lReturn = array(self::PROPERTIES => $pModel->getProperties(), self::OBJECT_CLASS => $pModel->getObjectClass());
         if ($pModel instanceof MainModel) {
             $lReturn[self::SERIALIZATION] = $pModel->getSerialization();
         }
     } else {
         $lUnsetManifestParser = false;
         if (is_null($this->mManifestParser)) {
             $lUnsetManifestParser = true;
             $lManifestPath_afe = $lInstanceModels[$pModel->getModelName()][0];
             $lManifestPath_ad = dirname($lManifestPath_afe);
             $lSerializationPath_afe = !is_null($lInstanceModels[$pModel->getModelName()][1]) ? $lInstanceModels[$pModel->getModelName()][1] : null;
             $this->mManifestParser = ManifestParser::getInstance($pModel, $lManifestPath_afe, $lSerializationPath_afe);
             $this->_addInstanceModel($pModel);
             $this->_buildLocalTypes($pModel, $lManifestPath_ad);
         }
         $lExtends = $this->mManifestParser->getExtends();
         // TODO manage extends
         $lObjectClass = $this->mManifestParser->getObjectClass();
         $lReturn = [self::PROPERTIES => array(), self::OBJECT_CLASS => $lObjectClass, self::PROPERTIES => $this->_buildProperties($pModel)];
         if ($lUnsetManifestParser) {
             $this->mSerializationManifestParser = $this->mManifestParser->getSerializationManifestParser();
             unset($this->mManifestParser);
             $this->mManifestParser = null;
         }
     }
     return $lReturn;
 }