diff --git a/php/classes/SharedObjectMgrAbstract.php b/php/classes/SharedObjectMgrAbstract.php
index db28afa..af562b4 100644
--- a/php/classes/SharedObjectMgrAbstract.php
+++ b/php/classes/SharedObjectMgrAbstract.php
@@ -80,6 +80,19 @@ abstract class SharedObjectMgrAbstract {
 		
 		return array('success' => TRUE, 'object_id' => $newId);
 	}
+
+	public function createFolder($folder_name) {
+		$folder_path = $this->getFolderDirPath($folder_name);
+		if (is_dir($folder_path)) {
+			return FALSE;
+		}
+
+		mkdir($folder_path);
+		chgrp($folder_path, APACHE_USER);
+		chmod($folder_path, 0775);
+
+		return is_dir($folder_path);
+	}
 	
 	public function getRootDirPath() {
 		return SHAREDPATH . "/" . $this->rootdirname;
@@ -158,4 +171,4 @@ abstract class SharedObjectMgrAbstract {
 	}
 }
 
-?>
\ No newline at end of file
+?>
diff --git a/php/classes/SharedObjectTreeFile.php b/php/classes/SharedObjectTreeFile.php
index 6cfe115..113df44 100644
--- a/php/classes/SharedObjectTreeFile.php
+++ b/php/classes/SharedObjectTreeFile.php
@@ -50,9 +50,32 @@ class SharedObjectTreeFile  {
 					$objectNode->setAttribute($key, $value);
 			}
 		}
-		
+		$this->doc->save($this->getFilePath());
 		
 		//Remove obsolete folders and objects
+		$folders = $this->getFolders($object_type);
+		foreach ($folders as $folder) {
+			$folderNode = $this->getObjectFolderNode($object_type, $folder["name"]);
+			if (!isset($folderNode)) {
+				continue;
+			}
+			if (!array_key_exists($folder["name"], $objects)) {
+				$folderNode->parentNode->removeChild($folderNode);
+			}
+			else {
+				$objectNodes = $folderNode->getElementsByTagName($object_type);
+				$to_remove = array();
+				foreach ($objectNodes as $objectNode) {
+					$idAtt = $objectNode->getAttribute('xml:id');
+					if (!in_array($idAtt, $objects[$folder["name"]])) {
+						$to_remove[] = $objectNode;
+					}
+				}
+				foreach ($to_remove as $node) {
+					$folderNode->removeChild($node);
+				}
+			}
+		}
 		
 		$this->doc->save($this->getFilePath());
 		
diff --git a/php/classes/SharedObjectsMgr.php b/php/classes/SharedObjectsMgr.php
index 526a72b..a5158e9 100644
--- a/php/classes/SharedObjectsMgr.php
+++ b/php/classes/SharedObjectsMgr.php
@@ -57,6 +57,18 @@ class SharedObjectsMgr  {
 		
 		return $this->treeFile->getFolders($object_type);
 	}
+
+	public function createFolder($object_type, $folder_name) {
+		if (!array_key_exists($object_type, $this->sharedObjectsMgr) || !isset($this->sharedObjectsMgr[$object_type])) {
+			return array('success' => FALSE, 'message' => 'Unknown type');
+		}
+
+		if (!$this->sharedObjectsMgr[$object_type]->createFolder($folder_name)) {
+			return array('success' => FALSE, 'message' => 'Cannot create folder '.$folder_name);
+		}
+
+		return $this->updateTree();
+	}
 	
 	public function isNameAlreadyUsed($object_type, $name) {
 		if (!array_key_exists($object_type, $this->sharedObjectsMgr) || !isset($this->sharedObjectsMgr[$object_type]))
@@ -96,4 +108,4 @@ class SharedObjectsMgr  {
 	}
 }
 
-?>
\ No newline at end of file
+?>
--
libgit2 0.21.2