diff --git a/library/Unl/Plist.php b/library/Unl/Plist.php
index 5ea98afb66b06e95cab4b59f8c25ca3a6c157ee0..0a7e33bf778c0e4f74aece70053600233efd5704 100644
--- a/library/Unl/Plist.php
+++ b/library/Unl/Plist.php
@@ -5,13 +5,28 @@ class Unl_Plist
 	static public function plistToArray($xml)
 	{
 		$dom = DOMDocument::loadXML($xml);
-		$xPath = new DOMXPath($dom);
-		
-		$root = $xPath->query('plist/*')->item(0);
+		$plist = $dom->documentElement;
+		if ($plist->nodeName == 'plist') {
+			$root = $plist->childNodes->item(0);
+		} else {
+            $xPath = new DOMXPath($dom);
+            $root = $xPath->query('plist/*')->item(0);
+		}
 		
 		return self::_parseNode($root);
 	}
 	
+	static public function arrayToPlist($array)
+	{
+		$dom = new DOMDocument('1.0', 'UTF-8');
+		$root = $dom->createElement('plist');
+		$root->setAttribute('version', '1.0');
+		$dom->appendChild($root);
+		
+		self::_generateNode($dom, $root, $array);
+		return $dom->saveXML();
+	}
+	
 	static protected function _parseNode($node)
 	{
 		switch ($node->nodeName) {
@@ -84,4 +99,69 @@ class Unl_Plist
         }
         return $array;
     }
+    
+    
+    
+    
+    static protected function _generateNode(DOMDocument $dom, DOMNode $parentNode, $node)
+    {
+    	if (is_array($node)) {
+    		$type = 'array';
+    		$keys = array_keys($node);
+    		for($i = 0; $i < count($keys); $i++) {
+                if ($i !== $keys[$i]) {
+                    $type = 'dict';	
+                }
+    		}
+    		if ($type == 'array') {
+    			self::_generateArray($dom, $parentNode, $node);
+    		} else {
+    			self::_generateDict($dom, $parentNode, $node);
+    		}
+    	} else if (is_string($node)) {
+    		self::_generateString($dom, $parentNode, $node);
+    	} else if (is_int($node)) {
+    		self::_generateInt($dom, $parentNode, $node);
+    	} else if (is_bool($node)) {
+    		self::_generateBool($dom, $parentNode, $node);
+    	}
+    }
+    
+    static protected function _generateArray(DOMDocument $dom, DOMNode $parentNode, $node)
+    {
+    	$array = $dom->createElement('array');
+    	$parentNode->appendChild($array);
+    	foreach ($node as $aNode) {
+    		self::_generateNode($dom, $array, $aNode);
+    	}
+    }
+    
+    static protected function _generateDict(DOMDocument $dom, DOMNode $parentNode, $node)
+    {
+        $dict = $dom->createElement('dict');
+        $parentNode->appendChild($dict);
+        foreach ($node as $key => $aNode) {
+        	$dict->appendChild($dom->createElement('key', $key));
+            self::_generateNode($dom, $dict, $aNode);
+        }
+    }
+
+    static protected function _generateInt(DOMDocument $dom, DOMNode $parentNode, $node)
+    {
+        $parentNode->appendChild($dom->createElement('integer', $node));
+    }
+    
+    static protected function _generateString(DOMDocument $dom, DOMNode $parentNode, $node)
+    {
+        $parentNode->appendChild($dom->createElement('string', $node));
+    }
+    
+    static protected function _generateBool(DOMDocument $dom, DOMNode $parentNode, $node)
+    {
+    	if ($node) {
+            $parentNode->appendChild($dom->createElement('true'));
+    	} else {
+    		$parentNode->appendChild($dom->createElement('false'));
+    	}
+    }
 }