diff --git a/install-dev/upgrade/classes/ToolsInstall.php b/install-dev/upgrade/classes/ToolsInstall.php
new file mode 100644
index 000000000..ca50e7ce9
--- /dev/null
+++ b/install-dev/upgrade/classes/ToolsInstall.php
@@ -0,0 +1,134 @@
+
+* @copyright 2007-2012 PrestaShop SA
+* @version Release: $Revision$
+* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
+* International Registered Trademark & Property of PrestaShop SA
+*/
+
+
+
+class ToolsInstall
+{
+ /**
+ * Converts a simpleXML element into an array. Preserves attributes and everything.
+ * You can choose to get your elements either flattened, or stored in a custom index that
+ * you define.
+ * For example, for a given element
+ *
+ * if you choose to flatten attributes, you would get:
+ * $array['field']['name'] = 'someName';
+ * $array['field']['type'] = 'someType';
+ * If you choose not to flatten, you get:
+ * $array['field']['@attributes']['name'] = 'someName';
+ * _____________________________________
+ * Repeating fields are stored in indexed arrays. so for a markup such as:
+ *
+ * a
+ * b
+ * c
+ *
+ * you array would be:
+ * $array['parent']['child'][0] = 'a';
+ * $array['parent']['child'][1] = 'b';
+ * ...And so on.
+ * _____________________________________
+ * @param simpleXMLElement $xml the XML to convert
+ * @param boolean $flattenValues Choose wether to flatten values
+ * or to set them under a particular index.
+ * defaults to true;
+ * @param boolean $flattenAttributes Choose wether to flatten attributes
+ * or to set them under a particular index.
+ * Defaults to true;
+ * @param boolean $flattenChildren Choose wether to flatten children
+ * or to set them under a particular index.
+ * Defaults to true;
+ * @param string $valueKey index for values, in case $flattenValues was set to
+ * false. Defaults to "@value"
+ * @param string $attributesKey index for attributes, in case $flattenAttributes was set to
+ * false. Defaults to "@attributes"
+ * @param string $childrenKey index for children, in case $flattenChildren was set to
+ * false. Defaults to "@children"
+ * @return array the resulting array.
+ */
+ static public function simpleXMLToArray ($xml, $flattenValues = true, $flattenAttributes = true, $flattenChildren = true, $valueKey = '@value', $attributesKey = '@attributes', $childrenKey = '@children')
+ {
+ $return = array();
+ if (!($xml instanceof SimpleXMLElement))
+ return $return;
+
+ $name = $xml->getName();
+ $_value = trim((string)$xml);
+ if (strlen($_value) == 0)
+ $_value = null;
+
+ if ($_value !== null)
+ {
+ if (!$flattenValues)
+ $return[$valueKey] = $_value;
+ else
+ $return = $_value;
+ }
+
+ $children = array();
+ $first = true;
+ foreach($xml->children() as $elementName => $child)
+ {
+ $value = ToolsInstall::simpleXMLToArray($child, $flattenValues, $flattenAttributes, $flattenChildren, $valueKey, $attributesKey, $childrenKey);
+ if (isset($children[$elementName]))
+ {
+ if ($first)
+ {
+ $temp = $children[$elementName];
+ unset($children[$elementName]);
+ $children[$elementName][] = $temp;
+ $first=false;
+ }
+ $children[$elementName][] = $value;
+ }
+ else
+ $children[$elementName] = $value;
+ }
+
+ if (count($children) > 0 )
+ {
+ if (!$flattenChildren)
+ $return[$childrenKey] = $children;
+ else
+ $return = array_merge($return, $children);
+ }
+
+ $attributes = array();
+ foreach($xml->attributes() as $name => $value)
+ $attributes[$name] = trim($value);
+
+ if (count($attributes) > 0)
+ {
+ if (!$flattenAttributes)
+ $return[$attributesKey] = $attributes;
+ else
+ $return = array_merge($return, $attributes);
+ }
+
+ return $return;
+ }
+}