diff --git a/.gitignore b/.gitignore
index cc4d3bf03b0a0c823d2fa25af526749cc4e3743b..a84615cf138517cbbbbda6b854a40dc87568240f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -40,3 +40,6 @@ nbproject
 
 # Mac OS
 .DS_Store
+
+# WebFinger
+.well-known
diff --git a/.htaccess b/.htaccess
index 34d4c719c8de71d80aed44f2723b4e85035e4c58..0d334503d07d7152e3b167463d50bac6a989965a 100644
--- a/.htaccess
+++ b/.htaccess
@@ -4,8 +4,6 @@ php_value upload_max_filesize 512M
 php_value post_max_size 512M
 SetEnv htaccessWorking true
 </IfModule>
-<IfModule !mod_php5.c>
 RewriteEngine on
 RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization},last]
-</IfModule>
 Options -Indexes
diff --git a/3rdparty/Sabre.includes.php b/3rdparty/Sabre.includes.php
index 9d389288c78484005db03fb20e3501b614908a1d..d41b287b77db5ea8f1ad7b4be78ab68046a803d5 100644
--- a/3rdparty/Sabre.includes.php
+++ b/3rdparty/Sabre.includes.php
@@ -71,6 +71,7 @@ include 'Sabre/DAV/IExtendedCollection.php';
 /* Node abstract implementations */
 include 'Sabre/DAV/Node.php';
 include 'Sabre/DAV/File.php';
+include 'Sabre/DAV/Collection.php';
 include 'Sabre/DAV/Directory.php';
 
 /* Utilities */
@@ -124,4 +125,3 @@ include 'Sabre/DAV/Auth/Backend/PDO.php';
 /* DavMount plugin */
 include 'Sabre/DAV/Mount/Plugin.php';
 
-
diff --git a/3rdparty/Sabre/CardDAV/AddressBook.php b/3rdparty/Sabre/CardDAV/AddressBook.php
index 3333480ea8549f4da860127a240c375cf2ca6c10..471ca7b338a7734e392ddfd92fcb0c4db8bcf729 100644
--- a/3rdparty/Sabre/CardDAV/AddressBook.php
+++ b/3rdparty/Sabre/CardDAV/AddressBook.php
@@ -1,7 +1,9 @@
 <?php
 
 /**
- * UserAddressBook class
+ * The AddressBook class represents a CardDAV addressbook, owned by a specific user
+ *
+ * The AddressBook can contain multiple vcards
  *
  * @package Sabre
  * @subpackage CardDAV
@@ -9,12 +11,6 @@
  * @author Evert Pot (http://www.rooftopsolutions.nl/) 
  * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
  */
-
-/**
- * The AddressBook class represents a CardDAV addressbook, owned by a specific user
- *
- * The AddressBook can contain multiple vcards
- */
 class Sabre_CardDAV_AddressBook extends Sabre_DAV_Collection implements Sabre_CardDAV_IAddressBook, Sabre_DAV_IProperties, Sabre_DAVACL_IACL {
 
     /**
diff --git a/3rdparty/Sabre/CardDAV/Backend/Abstract.php b/3rdparty/Sabre/CardDAV/Backend/Abstract.php
index f6d10291ca61dd025f7c49f7c50210db57ab2463..1f0253ddab802d28fbdbe121311fcb88f28af02c 100644
--- a/3rdparty/Sabre/CardDAV/Backend/Abstract.php
+++ b/3rdparty/Sabre/CardDAV/Backend/Abstract.php
@@ -2,6 +2,12 @@
 
 /**
  * Abstract Backend class
+ *
+ * This class serves as a base-class for addressbook backends
+ *
+ * Note that there are references to 'addressBookId' scattered throughout the 
+ * class. The value of the addressBookId is completely up to you, it can be any 
+ * arbitrary value you can use as an unique identifier.
  * 
  * @package Sabre
  * @subpackage CardDAV
@@ -9,14 +15,6 @@
  * @author Evert Pot (http://www.rooftopsolutions.nl/) 
  * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
  */
-
-/**
- * This class serves as a base-class for addressbook backends
- *
- * Note that there are references to 'addressBookId' scattered throughout the 
- * class. The value of the addressBookId is completely up to you, it can be any 
- * arbitrary value you can use as an unique identifier.
- */
 abstract class Sabre_CardDAV_Backend_Abstract {
 
     /**
diff --git a/3rdparty/Sabre/CardDAV/Backend/PDO.php b/3rdparty/Sabre/CardDAV/Backend/PDO.php
index 5556d0a7648f1dcf0211afdd7899c03507e20cdd..f4e44610ccf1146bc3acf3548f23a78d91797977 100644
--- a/3rdparty/Sabre/CardDAV/Backend/PDO.php
+++ b/3rdparty/Sabre/CardDAV/Backend/PDO.php
@@ -2,6 +2,8 @@
 
 /**
  * PDO CardDAV backend
+ *
+ * This CardDAV backend uses PDO to store addressbooks
  * 
  * @package Sabre
  * @subpackage CardDAV
@@ -9,10 +11,6 @@
  * @author Evert Pot (http://www.rooftopsolutions.nl/) 
  * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
  */
-
-/**
- * This CardDAV backend uses PDO to store addressbooks
- */
 class Sabre_CardDAV_Backend_PDO extends Sabre_CardDAV_Backend_Abstract {
 
     /**
diff --git a/3rdparty/Sabre/CardDAV/Card.php b/3rdparty/Sabre/CardDAV/Card.php
index 5298d31e2455f55fccb44b97c00b1cf53140cb61..2844eaf7ed6b06f06f3a6fbea2c609a544cc16dd 100644
--- a/3rdparty/Sabre/CardDAV/Card.php
+++ b/3rdparty/Sabre/CardDAV/Card.php
@@ -1,18 +1,14 @@
 <?php
 
 /**
- * Card class
+ * The Card object represents a single Card from an addressbook
  * 
  * @package Sabre
  * @subpackage CardDAV
  * @copyright Copyright (C) 2007-2011 Rooftop Solutions. All rights reserved.
  * @author Evert Pot (http://www.rooftopsolutions.nl/) 
  * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
- *
- /
-/**
- * The Card object represents a single Card from an addressbook
- */ 
+ */
 class Sabre_CardDAV_Card extends Sabre_DAV_File implements Sabre_CardDAV_ICard, Sabre_DAVACL_IACL {
 
     /**
diff --git a/3rdparty/Sabre/CardDAV/ICard.php b/3rdparty/Sabre/CardDAV/ICard.php
index 8f9bb097b5685e6ef99363850232569c4b5c69a0..25bcc551b73d98994a9c5c4d4d13eec939768e15 100644
--- a/3rdparty/Sabre/CardDAV/ICard.php
+++ b/3rdparty/Sabre/CardDAV/ICard.php
@@ -2,18 +2,16 @@
 
 /**
  * Card interface 
+ *
+ * Extend the ICard interface to allow your custom nodes to be picked up as 
+ * 'Cards'. 
  * 
  * @package Sabre
  * @subpackage CardDAV
  * @copyright Copyright (C) 2007-2011 Rooftop Solutions. All rights reserved.
  * @author Evert Pot (http://www.rooftopsolutions.nl/) 
  * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
- *
- /
-/**
- * Extend the ICard interface to allow your custom nodes to be picked up as 
- * 'Cards'. 
- */ 
+ */
 interface Sabre_CardDAV_ICard extends Sabre_DAV_IFile { 
 
 }
diff --git a/3rdparty/Sabre/CardDAV/Plugin.php b/3rdparty/Sabre/CardDAV/Plugin.php
index 17766b78278c84a14cb530880078ca04ac85ad9c..14c9c72b0d532e5d009135547b9136396c15ab4e 100644
--- a/3rdparty/Sabre/CardDAV/Plugin.php
+++ b/3rdparty/Sabre/CardDAV/Plugin.php
@@ -1,7 +1,9 @@
 <?php
 
 /**
- * CardDAV plugin 
+ * CardDAV plugin
+ *
+ * The CardDAV plugin adds CardDAV functionality to the WebDAV server
  *
  * @package Sabre
  * @subpackage CardDAV
@@ -9,11 +11,6 @@
  * @author Evert Pot (http://www.rooftopsolutions.nl/) 
  * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
  */
-
-
-/**
- * The CardDAV plugin adds CardDAV functionality to the WebDAV server
- */
 class Sabre_CardDAV_Plugin extends Sabre_DAV_ServerPlugin {
 
     /**
diff --git a/3rdparty/Sabre/CardDAV/UserAddressBooks.php b/3rdparty/Sabre/CardDAV/UserAddressBooks.php
index 564ecd701f0ce9b461a95d705664e538e77bed95..e9f2de7f741e0ed553911b3acf61e973390932ed 100644
--- a/3rdparty/Sabre/CardDAV/UserAddressBooks.php
+++ b/3rdparty/Sabre/CardDAV/UserAddressBooks.php
@@ -2,17 +2,15 @@
 
 /**
  * UserAddressBooks class
- * 
+ *
+ * The UserAddressBooks collection contains a list of addressbooks associated with a user
+ *
  * @package Sabre
  * @subpackage CardDAV
  * @copyright Copyright (C) 2007-2011 Rooftop Solutions. All rights reserved.
  * @author Evert Pot (http://www.rooftopsolutions.nl/) 
  * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
  */
-
-/**
- * The UserAddressBooks collection contains a list of addressbooks associated with a user
- */
 class Sabre_CardDAV_UserAddressBooks extends Sabre_DAV_Collection implements Sabre_DAV_IExtendedCollection, Sabre_DAVACL_IACL {
 
     /**
diff --git a/3rdparty/Sabre/CardDAV/Version.php b/3rdparty/Sabre/CardDAV/Version.php
index c76ee3603547f3ff0be211dc613e13809cca8ddb..900fbf5e75c22861fd27901ea93ae8fe81c211b5 100644
--- a/3rdparty/Sabre/CardDAV/Version.php
+++ b/3rdparty/Sabre/CardDAV/Version.php
@@ -2,6 +2,8 @@
 
 /**
  * Version Class
+ *
+ * This class contains the Sabre_CardDAV version information
  * 
  * @package Sabre
  * @subpackage CardDAV 
@@ -9,10 +11,6 @@
  * @author Evert Pot (http://www.rooftopsolutions.nl/)
  * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
  */
-
-/**
- * This class contains the Sabre_CardDAV version information
- */
 class Sabre_CardDAV_Version {
 
     /**
diff --git a/3rdparty/Sabre/DAV/Browser/GuessContentType.php b/3rdparty/Sabre/DAV/Browser/GuessContentType.php
index 8b55ec3ad9f4d5ac957b21889caa3fa767af0d34..ee8c698d782412ef00ba66327a3053ec0c8bd0c6 100644
--- a/3rdparty/Sabre/DAV/Browser/GuessContentType.php
+++ b/3rdparty/Sabre/DAV/Browser/GuessContentType.php
@@ -88,7 +88,7 @@ class Sabre_DAV_Browser_GuessContentType extends Sabre_DAV_ServerPlugin {
     protected function getContentType($fileName) {
 
         // Just grabbing the extension
-        $extension = substr($fileName,strrpos($fileName,'.')+1);
+        $extension = strtolower(substr($fileName,strrpos($fileName,'.')+1));
         if (isset($this->extensionMap[$extension]))
             return $this->extensionMap[$extension];
 
diff --git a/3rdparty/Sabre/DAV/Server.php b/3rdparty/Sabre/DAV/Server.php
index b99866dad5e12b1404795694be3d3dbe1dab4cb2..3d76d4f1918e9cabff7576e6d94805d4cdd02d5d 100644
--- a/3rdparty/Sabre/DAV/Server.php
+++ b/3rdparty/Sabre/DAV/Server.php
@@ -821,7 +821,7 @@ class Sabre_DAV_Server {
 
             $node->put($body);
             $this->httpResponse->setHeader('Content-Length','0');
-            $this->httpResponse->sendStatus(200);
+            $this->httpResponse->sendStatus(204);
 
         } else {
 
diff --git a/3rdparty/Sabre/DAV/Version.php b/3rdparty/Sabre/DAV/Version.php
index e7f7f83e6fffa9b1c1874e0fec4b123f9df30665..6bece1985e4e9706b7a7e41f1b738a61672e7b73 100644
--- a/3rdparty/Sabre/DAV/Version.php
+++ b/3rdparty/Sabre/DAV/Version.php
@@ -14,7 +14,7 @@ class Sabre_DAV_Version {
     /**
      * Full version number
      */
-    const VERSION = '1.5.3';
+    const VERSION = '1.5.4';
 
     /**
      * Stability : alpha, beta, stable
diff --git a/3rdparty/Sabre/DAVACL/Exception/NeedPrivileges.php b/3rdparty/Sabre/DAVACL/Exception/NeedPrivileges.php
index 640ab8efff4277be9d455631dc6ca06175103ba4..024ab6641f35a851aad6d01b1790482dda6e058d 100644
--- a/3rdparty/Sabre/DAVACL/Exception/NeedPrivileges.php
+++ b/3rdparty/Sabre/DAVACL/Exception/NeedPrivileges.php
@@ -2,6 +2,9 @@
 
 /**
  * NeedPrivileges 
+ *
+ * The 403-need privileges is thrown when a user didn't have the appropriate
+ * permissions to perform an operation
  * 
  * @package Sabre
  * @subpackage DAVACL
@@ -10,13 +13,6 @@
  * @author Evert Pot (http://www.rooftopsolutions.nl/) 
  * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
  */
-
-/**
- * NeedPrivileges 
- *
- * The 403-need privileges is thrown when a user didn't have the appropriate
- * permissions to perform an operation
- */
 class Sabre_DAVACL_Exception_NeedPrivileges extends Sabre_DAV_Exception_Forbidden {
 
     /**
diff --git a/3rdparty/Sabre/DAVACL/PrincipalCollection.php b/3rdparty/Sabre/DAVACL/PrincipalCollection.php
index 3cc0ae84621aed9862701d1cb9b807922c9bd620..4d22bf8aa7509b5e6d153e8f4788ffa3bbf80df6 100644
--- a/3rdparty/Sabre/DAVACL/PrincipalCollection.php
+++ b/3rdparty/Sabre/DAVACL/PrincipalCollection.php
@@ -9,7 +9,7 @@
  * The users are instances of Sabre_DAV_Auth_Principal
  * 
  * @package Sabre
- * @subpackage DAV
+ * @subpackage DAVACL
  * @copyright Copyright (C) 2007-2011 Rooftop Solutions. All rights reserved.
  * @author Evert Pot (http://www.rooftopsolutions.nl/) 
  * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
diff --git a/3rdparty/Sabre/VObject/Component.php b/3rdparty/Sabre/VObject/Component.php
index 3d5a3d75635c80beeae49e9fde10d9925b75229e..47cf9f3d8125b889cdf16ac9c49199c22cc38170 100644
--- a/3rdparty/Sabre/VObject/Component.php
+++ b/3rdparty/Sabre/VObject/Component.php
@@ -83,13 +83,16 @@ class Sabre_VObject_Component extends Sabre_VObject_Element {
             if (!is_null($itemValue)) {
                 throw new InvalidArgumentException('The second argument must not be specified, when passing a VObject');
             }
+            $item->parent = $this;
             $this->children[] = $item;
         } elseif(is_string($item)) {
 
             if (!is_scalar($itemValue)) {
                 throw new InvalidArgumentException('The second argument must be scalar');
             }
-            $this->children[] = new Sabre_VObject_Property($item,$itemValue);
+            $item = new Sabre_VObject_Property($item,$itemValue);
+            $item->parent = $this;
+            $this->children[] = $item;
 
         } else {
             
@@ -208,16 +211,19 @@ class Sabre_VObject_Component extends Sabre_VObject_Element {
         $overWrite = count($matches)?key($matches):null;
 
         if ($value instanceof Sabre_VObject_Component || $value instanceof Sabre_VObject_Property) {
+            $value->parent = $this;
             if (!is_null($overWrite)) {
                 $this->children[$overWrite] = $value;
             } else {
                 $this->children[] = $value;
             }
         } elseif (is_scalar($value)) {
+            $property = new Sabre_VObject_Property($name,$value);
+            $property->parent = $this;
             if (!is_null($overWrite)) {
-                $this->children[$overWrite] = new Sabre_VObject_Property($name,$value);
+                $this->children[$overWrite] = $property;
             } else {
-                $this->children[] = new Sabre_VObject_Property($name,$value);
+                $this->children[] = $property;
             }
         } else {
             throw new InvalidArgumentException('You must pass a Sabre_VObject_Component, Sabre_VObject_Property or scalar type');
@@ -237,6 +243,7 @@ class Sabre_VObject_Component extends Sabre_VObject_Element {
         foreach($matches as $k=>$child) {
 
             unset($this->children[$k]);
+            $child->parent = null;
 
         }
 
diff --git a/3rdparty/Sabre/VObject/Element/DateTime.php b/3rdparty/Sabre/VObject/Element/DateTime.php
index 30e5c6ca86a0695cec99e0a8ab99dbcdf593d475..3350ec02c88a9b00705790e338a1e3c9e9303fb3 100644
--- a/3rdparty/Sabre/VObject/Element/DateTime.php
+++ b/3rdparty/Sabre/VObject/Element/DateTime.php
@@ -70,7 +70,7 @@ class Sabre_VObject_Element_DateTime extends Sabre_VObject_Property {
                 $this->setValue($dt->format('Ymd\\THis'));
                 $this->offsetUnset('VALUE');
                 $this->offsetUnset('TZID');
-                $this->offsetSet('VALUE','DATE-TIME');
+                $this->offsetSet('VALUE','DATE-TIME'); 
                 break;
             case self::UTC :
                 $dt->setTimeZone(new DateTimeZone('UTC'));
@@ -116,7 +116,7 @@ class Sabre_VObject_Element_DateTime extends Sabre_VObject_Property {
         list(
             $this->dateType,
             $this->dateTime
-        ) = self::parseData($this->value, $this->offsetGet('TZID'));
+        ) = self::parseData($this->value, $this);
         return $this->dateTime;
 
     }
@@ -137,7 +137,7 @@ class Sabre_VObject_Element_DateTime extends Sabre_VObject_Property {
         list(
             $this->dateType,
             $this->dateTime,
-        ) = self::parseData($this->value, $this->offsetGet('TZID'));
+        ) = self::parseData($this->value, $this);
         return $this->dateType;
 
     }
@@ -151,12 +151,12 @@ class Sabre_VObject_Element_DateTime extends Sabre_VObject_Property {
      *   2. A DateTime object (or null)
      *
      * @param string|null $propertyValue The string to parse (yymmdd or 
-     *    ymmddThhmmss, etc..)
-     * @param string|null $tzid The value of the 'TZID' property.
+     *                                   ymmddThhmmss, etc..)
+     * @param Sabre_VObject_Property|null $property The instance of the 
+     *                                              property we're parsing. 
      * @return array 
      */
-    static public function parseData($propertyValue, $tzid) {
-        
+    static public function parseData($propertyValue, Sabre_VObject_Property $property = null) {
 
         if (is_null($propertyValue)) {
             return array(null, null);
@@ -195,6 +195,8 @@ class Sabre_VObject_Element_DateTime extends Sabre_VObject_Property {
             );
         }
 
+        // Finding the timezone.
+        $tzid = $property['TZID'];
         if (!$tzid) {
             return array(
                 self::LOCAL,
@@ -202,7 +204,32 @@ class Sabre_VObject_Element_DateTime extends Sabre_VObject_Property {
             );
         }
 
-        $tz = new DateTimeZone($tzid->value);
+        try {
+            $tz = new DateTimeZone($tzid->value);
+        } catch (Exception $e) {
+
+            // The id was invalid, we're going to try to find the information 
+            // through the VTIMEZONE object.
+
+            // First we find the root object
+            $root = $property;
+            while($root->parent) {
+                $root = $root->parent;
+            }
+
+            if (isset($root->VTIMEZONE)) {
+                foreach($root->VTIMEZONE as $vtimezone) {
+                    if (((string)$vtimezone->TZID) == $tzid) {
+                        if (isset($vtimezone->{'X-LIC-LOCATION'})) {
+                            $tzid = (string)$vtimezone->{'X-LIC-LOCATION'};
+                        }
+                    }
+                }
+            }
+
+            $tz = new DateTimeZone($tzid);
+            
+        }
         $dt = new DateTime($dateStr, $tz);
         $dt->setTimeZone($tz);
 
diff --git a/3rdparty/Sabre/VObject/Element/MultiDateTime.php b/3rdparty/Sabre/VObject/Element/MultiDateTime.php
index 5e677f5e5b5feab9f3968f9c925d61675269c3fc..dc6ca5abb8021e90300f97176c05ec0686fd6530 100644
--- a/3rdparty/Sabre/VObject/Element/MultiDateTime.php
+++ b/3rdparty/Sabre/VObject/Element/MultiDateTime.php
@@ -60,7 +60,7 @@ class Sabre_VObject_Element_MultiDateTime extends Sabre_VObject_Property {
                     $val[] = $i->format('Ymd\\THis');
                 }
                 $this->setValue(implode(',',$val));
-                $this->offsetSet('VALUE','DATE-TIME');
+                $this->offsetSet('VALUE','DATE-TIME'); 
                 break;
             case Sabre_VObject_Element_DateTime::UTC :
                 $val = array();
@@ -121,7 +121,7 @@ class Sabre_VObject_Element_MultiDateTime extends Sabre_VObject_Property {
             list(
                 $type,
                 $dt
-            ) = Sabre_VObject_Element_DateTime::parseData($val, $this->offsetGet('TZID'));
+            ) = Sabre_VObject_Element_DateTime::parseData($val, $this);
             $dts[] = $dt;
             $this->dateType = $type;
         }
@@ -154,7 +154,7 @@ class Sabre_VObject_Element_MultiDateTime extends Sabre_VObject_Property {
             list(
                 $type,
                 $dt
-            ) = Sabre_VObject_Element_DateTime::parseData($val, $this->offsetGet('TZID'));
+            ) = Sabre_VObject_Element_DateTime::parseData($val, $this);
             $dts[] = $dt;
             $this->dateType = $type; 
         }
diff --git a/3rdparty/Sabre/VObject/Node.php b/3rdparty/Sabre/VObject/Node.php
index efc7f76da79894a366358e82d0b8f7e1191a36cc..7100b62f1cb2a916f43bb64190fae8734539172a 100644
--- a/3rdparty/Sabre/VObject/Node.php
+++ b/3rdparty/Sabre/VObject/Node.php
@@ -25,6 +25,13 @@ abstract class Sabre_VObject_Node implements IteratorAggregate, ArrayAccess, Cou
      */
     protected $iterator = null;
 
+    /**
+     * A link to the parent node
+     * 
+     * @var Sabre_VObject_Node 
+     */
+    protected $parent = null;
+
     /* {{{ IteratorAggregator interface */
 
     /**
diff --git a/3rdparty/Sabre/VObject/Property.php b/3rdparty/Sabre/VObject/Property.php
index 624dd4b8a58e3fe2398e0295f8431a34384792d2..060582290438d8dd520960c54b79a108305eb2e9 100644
--- a/3rdparty/Sabre/VObject/Property.php
+++ b/3rdparty/Sabre/VObject/Property.php
@@ -149,13 +149,16 @@ class Sabre_VObject_Property extends Sabre_VObject_Element {
             if (!is_null($itemValue)) {
                 throw new InvalidArgumentException('The second argument must not be specified, when passing a VObject');
             }
+            $item->parent = $this;
             $this->parameters[] = $item;
         } elseif(is_string($item)) {
 
             if (!is_scalar($itemValue)) {
                 throw new InvalidArgumentException('The second argument must be scalar');
             }
-            $this->parameters[] = new Sabre_VObject_Parameter($item,$itemValue);
+            $parameter = new Sabre_VObject_Parameter($item,$itemValue);
+            $parameter->parent = $this;
+            $this->parameters[] = $parameter;
 
         } else {
             
@@ -231,12 +234,15 @@ class Sabre_VObject_Property extends Sabre_VObject_Element {
                 throw new InvalidArgumentException('A parameter name must be specified. This means you cannot use the $array[]="string" to add parameters.');
 
             $this->offsetUnset($name);
-            $this->parameters[] = new Sabre_VObject_Parameter($name, $value);
+            $parameter = new Sabre_VObject_Parameter($name, $value);
+            $parameter->parent = $this;
+            $this->parameters[] = $parameter;
 
         } elseif ($value instanceof Sabre_VObject_Parameter) {
             if (!is_null($name))
                 throw new InvalidArgumentException('Don\'t specify a parameter name if you\'re passing a Sabre_VObject_Parameter. Add using $array[]=$parameterObject.');
-            
+
+            $value->parent = $this; 
             $this->parameters[] = $value;
         } else {
             throw new InvalidArgumentException('You can only add parameters to the property object');
@@ -258,6 +264,7 @@ class Sabre_VObject_Property extends Sabre_VObject_Element {
         $result = array();
         foreach($this->parameters as $key=>$parameter) {
             if ($parameter->name == $name) {
+                $parameter->parent = null;
                 unset($this->parameters[$key]);
             }
 
diff --git a/3rdparty/Sabre/VObject/Reader.php b/3rdparty/Sabre/VObject/Reader.php
index c38afbfb632b419592fd0c536539b568a6094d83..5ed7882ac91fabee3f8fc7607293736b112d06eb 100644
--- a/3rdparty/Sabre/VObject/Reader.php
+++ b/3rdparty/Sabre/VObject/Reader.php
@@ -95,7 +95,7 @@ class Sabre_VObject_Reader {
 
             while(stripos($nextLine,"END:")!==0) {
 
-                $obj->children[] = self::readLine($lines);
+                $obj->add(self::readLine($lines));
                 $nextLine = current($lines);
 
                 if ($nextLine===false) 
@@ -140,7 +140,9 @@ class Sabre_VObject_Reader {
 
         if ($matches['parameters']) {
 
-            $obj->parameters = self::readParameters($matches['parameters']);
+            foreach(self::readParameters($matches['parameters']) as $param) {
+                $obj->add($param);
+            }
         } 
 
         return $obj;
diff --git a/3rdparty/Sabre/VObject/Version.php b/3rdparty/Sabre/VObject/Version.php
index 950c1c51104d54a82e16b8955424e27efd296204..937c367e222afa447e57a3628519d860939e21e9 100644
--- a/3rdparty/Sabre/VObject/Version.php
+++ b/3rdparty/Sabre/VObject/Version.php
@@ -14,7 +14,7 @@ class Sabre_VObject_Version {
     /**
      * Full version number
      */
-    const VERSION = '1.2.2';
+    const VERSION = '1.2.4';
 
     /**
      * Stability : alpha, beta, stable
diff --git a/apps/admin_dependencies_chk/appinfo/app.php b/apps/admin_dependencies_chk/appinfo/app.php
new file mode 100644
index 0000000000000000000000000000000000000000..e2169b5dd7711e352c788d5bbde144b8421566ac
--- /dev/null
+++ b/apps/admin_dependencies_chk/appinfo/app.php
@@ -0,0 +1,9 @@
+<?php
+$l=new OC_L10N('admin_dependencies_chk');
+
+OC_App::register( array( 
+  'order' => 14,
+  'id' => 'admin_dependencies_chk',
+  'name' => 'Owncloud Install Info' ));
+
+OC_APP::registerAdmin('admin_dependencies_chk','settings');
diff --git a/apps/admin_dependencies_chk/appinfo/info.xml b/apps/admin_dependencies_chk/appinfo/info.xml
new file mode 100644
index 0000000000000000000000000000000000000000..10721ece15b53dd6d19b1ea2bbe5a19b443e52e8
--- /dev/null
+++ b/apps/admin_dependencies_chk/appinfo/info.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?> 
+<info>
+	<id>admin_dependencies_chk</id>
+	<name>Owncloud dependencies info</name>
+	<version>0.01</version>
+	<licence>AGPL</licence>
+	<author>Brice Maron (eMerzh)</author>
+	<require>2</require>
+	<description>Display OwnCloud's dependencies informations (missings modules, ...)</description>
+	<default_enable/>
+</info>
diff --git a/apps/admin_dependencies_chk/css/style.css b/apps/admin_dependencies_chk/css/style.css
new file mode 100644
index 0000000000000000000000000000000000000000..30f204be7bc0e0654a7016a009425c4c33d3a955
--- /dev/null
+++ b/apps/admin_dependencies_chk/css/style.css
@@ -0,0 +1,9 @@
+#status_list legend { font-weight: bold; color: #888888; }
+.state > li { margin-bottom: 3px; padding-left: 0.5em; list-style-type: circle; }
+.state .state_module {  font-weight:bold; text-shadow: 0 1px 0 #DDD; cursor:help;}
+
+.state_used ul,  .state_used li { display:inline;   }
+
+.state_ok .state_module	{ color: #009700; }
+.state_warning .state_module	{ color: #FF9B29; }
+.state_error .state_module	{ color: #FF3B3B; }
diff --git a/apps/admin_dependencies_chk/settings.php b/apps/admin_dependencies_chk/settings.php
new file mode 100644
index 0000000000000000000000000000000000000000..de2f97aa79dcd6a6b8fedee3ddc01c9be0d77cf4
--- /dev/null
+++ b/apps/admin_dependencies_chk/settings.php
@@ -0,0 +1,96 @@
+<?php
+
+/**
+ * ownCloud - user_ldap
+ *
+ * @author Brice Maron
+ * @copyright 2011 Brice Maron brice __from__ bmaron _DOT_ net
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+$l=new OC_L10N('admin_dependencies_chk');
+$tmpl = new OC_Template( 'admin_dependencies_chk', 'settings');
+
+$modules = array();
+
+//Possible status are : ok, error, warning
+$modules[] =array(
+	'status' => function_exists('json_encode') ? 'ok' : 'error',
+	'part'=> 'php-json',
+	'modules'=> array('core'),
+	'message'=> $l->t('The php-json module is needed by the many applications for inter communications'));
+
+$modules[] =array(
+	'status' => function_exists('curl_init') ? 'ok' : 'error',
+	'part'=> 'php-curl',
+	'modules'=> array('bookmarks'),
+	'message'=> $l->t('The php-curl modude is needed to fetch the page title when adding a bookmarks'));
+
+$modules[] =array(
+	'status' => function_exists('imagepng') ? 'ok' : 'error',
+	'part'=> 'php-gd',
+	'modules'=> array('gallery'),
+	'message'=> $l->t('The php-gd module is needed to create thumbnails of your images'));
+
+$modules[] =array(
+	'status' => OC_Helper::canExecute("mp3info") ? 'ok' : 'warning',
+	'part'=> 'mp3info',
+	'modules'=> array('media'),
+	'message'=> $l->t('The program mp3info is useful to discover ID3 tags of your music files'));
+
+$modules[] =array(
+	'status' => OC_Helper::canExecute("ldap_bind") ? 'ok' : 'error',
+	'part'=> 'php-ldap',
+	'modules'=> array('user_ldap'),
+	'message'=> $l->t('The php-ldap module is needed connect to your ldap server'));
+
+$modules[] =array(
+	'status' => class_exists('ZipArchive') ? 'ok' : 'warning',
+	'part'=> 'php-zip',
+	'modules'=> array('admin_export','core'),
+	'message'=> $l->t('The php-zip module is needed download multiple files at once'));
+
+$modules[] =array(
+	'status' => function_exists('mb_detect_encoding') ? 'ok' : 'error',
+	'part'=> 'php-mb_multibyte ',
+	'modules'=> array('core'),
+	'message'=> $l->t('The php-mb_multibyte module is needed to manage correctly the encoding.'));
+
+$modules[] =array(
+	'status' => function_exists('ctype_digit') ? 'ok' : 'error',
+	'part'=> 'php-ctype',
+	'modules'=> array('core'),
+	'message'=> $l->t('The php-ctype module is needed validate data.'));
+
+$modules[] =array(
+	'status' => ini_get('allow_url_fopen') == '1' ? 'ok' : 'error',
+	'part'=> 'allow_url_fopen',
+	'modules'=> array('core'),
+	'message'=> $l->t('The allow_url_fopen directive of your php.ini should be set to 1 to retrieve knowledge base from OCS servers'));
+
+foreach($modules as $key => $module) {
+	$enabled = false ;
+	foreach($module['modules'] as $app) {
+		if(OC_App::isEnabled($app) || $app=='core'){
+				$enabled = true;
+		}
+	}
+	if($enabled == false) unset($modules[$key]);
+}
+
+OC_UTIL::addStyle('admin_dependencies_chk', 'style');
+$tmpl->assign( 'items', $modules );
+
+return $tmpl->fetchPage();
diff --git a/apps/admin_dependencies_chk/templates/settings.php b/apps/admin_dependencies_chk/templates/settings.php
new file mode 100644
index 0000000000000000000000000000000000000000..8ff27ebb1878cf485b0cdf0f6af3cc04e7679aca
--- /dev/null
+++ b/apps/admin_dependencies_chk/templates/settings.php
@@ -0,0 +1,16 @@
+<fieldset id="status_list" class="personalblock">
+	<legend><?php echo $l->t('Dependencies status');?></legend>
+	<ul class="state">
+		<?php foreach($_['items'] as $item):?>
+			<li class="state_<?php echo $item['status'];?>">
+				<span class="state_module" title="<?php echo $item['message'];?>"><?php echo $item['part'];?></span>
+				<div class="state_used"><?php echo $l->t('Used by :');?>
+					<ul>
+						<?php foreach($item['modules'] as $module):?>
+							<li><?php echo $module;?></li>
+						<?php endforeach;?>
+					</ul>
+			</li>
+		<?php endforeach;?>
+	</ul>
+</fieldset>
\ No newline at end of file
diff --git a/apps/bookmarks/ajax/addBookmark.php b/apps/bookmarks/ajax/addBookmark.php
index 3975fd15f81d17e45ddd82ad663ea8a0f99b9c1d..45b16ae5fa6e4a76c93b200f959187f844626349 100644
--- a/apps/bookmarks/ajax/addBookmark.php
+++ b/apps/bookmarks/ajax/addBookmark.php
@@ -54,13 +54,7 @@ $params=array(
 	);
 $query->execute($params);
 
-if($CONFIG_DBTYPE == 'pgsql')
-{
-	$query = OC_DB::prepare("SELECT currval('*PREFIX*bookmarks_id_seq')");
-	$b_id = $query->execute()->fetchOne();
-} else {
-	$b_id = OC_DB::insertid();
-}
+$b_id = OC_DB::insertid('*PREFIX*bookmarks');
 
 
 if($b_id !== false) {
diff --git a/apps/bookmarks/settings.php b/apps/bookmarks/settings.php
index 8186472dec9eabc35fbf4e0fb187e4e3ea8f9918..0ace04fa2c8e3efe0b6fb481b105a21f4ae772e9 100644
--- a/apps/bookmarks/settings.php
+++ b/apps/bookmarks/settings.php
@@ -8,6 +8,6 @@
 
 $tmpl = new OC_Template( 'bookmarks', 'settings');
 
-OC_Util::addScript('bookmarks','settings');
+//OC_Util::addScript('bookmarks','settings');
 
 return $tmpl->fetchPage();
diff --git a/apps/calendar/lib/calendar.php b/apps/calendar/lib/calendar.php
index 252ea66555c26eb36574b9b08e73a9a0986a2843..3db4398096e88e1338ff7187ab285ff898ab0953 100644
--- a/apps/calendar/lib/calendar.php
+++ b/apps/calendar/lib/calendar.php
@@ -111,7 +111,7 @@ class OC_Calendar_Calendar{
 		$stmt = OC_DB::prepare( 'INSERT INTO *PREFIX*calendar_calendars (userid,displayname,uri,ctag,calendarorder,calendarcolor,timezone,components) VALUES(?,?,?,?,?,?,?,?)' );
 		$result = $stmt->execute(array($userid,$name,$uri,1,$order,$color,$timezone,$components));
 
-		return OC_DB::insertid();
+		return OC_DB::insertid('*PREFIX*calendar_calendar');
 	}
 
 	/**
@@ -131,7 +131,7 @@ class OC_Calendar_Calendar{
 		$stmt = OC_DB::prepare( 'INSERT INTO *PREFIX*calendar_calendars (userid,displayname,uri,ctag,calendarorder,calendarcolor,timezone,components) VALUES(?,?,?,?,?,?,?,?)' );
 		$result = $stmt->execute(array($userid,$name,$uri,1,$order,$color,$timezone,$components));
 
-		return OC_DB::insertid();
+		return OC_DB::insertid('*PREFIX*calendar_calendars');
 	}
 
 	/**
diff --git a/apps/calendar/lib/object.php b/apps/calendar/lib/object.php
index 221df2b3af016365195603950fcaaf3447b711d1..ccc62d565e830320d78c46d77574b6e777b2e048 100644
--- a/apps/calendar/lib/object.php
+++ b/apps/calendar/lib/object.php
@@ -106,7 +106,7 @@ class OC_Calendar_Object{
 
 		OC_Calendar_Calendar::touchCalendar($id);
 
-		return OC_DB::insertid();
+		return OC_DB::insertid('*PREFIX*calendar_objects');
 	}
 
 	/**
@@ -125,7 +125,7 @@ class OC_Calendar_Object{
 
 		OC_Calendar_Calendar::touchCalendar($id);
 
-		return OC_DB::insertid();
+		return OC_DB::insertid('*PREFIX*calendar_objects');
 	}
 
 	/**
diff --git a/apps/calendar/templates/part.eventform.php b/apps/calendar/templates/part.eventform.php
index 8588b9168f7bb03bee5e60c1cda4e831b4661662..dfa5fb8c78a9fded48a37e8a0065346925c3d5da 100644
--- a/apps/calendar/templates/part.eventform.php
+++ b/apps/calendar/templates/part.eventform.php
@@ -13,9 +13,7 @@
 			<select id="category" name="categories[]" multiple="multiple" title="<?php echo $l->t("Select category") ?>">
 				<?php
 				if (!isset($_['categories'])) {$_['categories'] = array();}
-				foreach($_['category_options'] as $category){
-					echo '<option value="' . $category . '"' . (in_array($category, $_['categories']) ? ' selected="selected"' : '') . '>' . $category . '</option>';
-				}
+				echo html_select_options($_['category_options'], $_['categories'], array('combine'=>true));
 				?>
 			</select></td>
 			<th width="75px">&nbsp;&nbsp;&nbsp;<?php echo $l->t("Calendar");?>:</th>
@@ -23,9 +21,7 @@
 			<select style="width:140px;" name="calendar">
 				<?php
 				if (!isset($_['calendar'])) {$_['calendar'] = false;}
-				foreach($_['calendar_options'] as $calendar){
-					echo '<option value="' . $calendar['id'] . '"' . ($_['calendar'] == $calendar['id'] ? ' selected="selected"' : '') . '>' . $calendar['displayname'] . '</option>';
-				}
+				echo html_select_options($_['calendar_options'], $_['calendar'], array('value'=>'id', 'label'=>'displayname'));
 				?>
 			</select></td>
 		</tr>
@@ -66,9 +62,7 @@
 			<select name="repeat" style="width:350px;">
 				<?php
 				if (isset($_['repeat_options'])) {
-					foreach($_['repeat_options'] as $id => $label){
-						echo '<option value="' . $id . '"' . ($_['repeat'] == $id ? ' selected="selected"' : '') . '>' . $label . '</option>';
-					}
+					echo html_select_options($_['repeat_options'], $_['repeat']);
 				}
 				?>
 			</select></td>
diff --git a/apps/contacts/ajax/getdetails.php b/apps/contacts/ajax/getdetails.php
index 0e76de61afb0b23ac1a673be23047fff250c2cda..260fb53a6862b5562640fd0040862e9fd90a1fcb 100644
--- a/apps/contacts/ajax/getdetails.php
+++ b/apps/contacts/ajax/getdetails.php
@@ -51,10 +51,22 @@ if(is_null($vcard)){
 	exit();
 }
 
+$property_types = array(
+	'ADR'   => $l10n->t('Address'),
+	'TEL'   => $l10n->t('Telephone'),
+	'EMAIL' => $l10n->t('Email'),
+	'ORG'   => $l10n->t('Organization'),
+);
+$adr_types = OC_Contacts_VCard::getTypesOfProperty($l10n, 'ADR');
+$phone_types = OC_Contacts_VCard::getTypesOfProperty($l10n, 'TEL');
+
 $details = OC_Contacts_VCard::structureContact($vcard);
 $tmpl = new OC_Template('contacts','part.details');
 $tmpl->assign('details',$details);
 $tmpl->assign('id',$id);
+$tmpl->assign('property_types',$property_types);
+$tmpl->assign('adr_types',$adr_types);
+$tmpl->assign('phone_types',$phone_types);
 $page = $tmpl->fetchPage();
 
 OC_JSON::success(array('data' => array( 'id' => $id, 'page' => $page )));
diff --git a/apps/contacts/ajax/showaddcard.php b/apps/contacts/ajax/showaddcard.php
index 2f534f0fe2d0bc772a8ae81a17317b6c67b4d8fa..98367758fd4dbae358130b02a18b2783daa23e06 100644
--- a/apps/contacts/ajax/showaddcard.php
+++ b/apps/contacts/ajax/showaddcard.php
@@ -29,9 +29,14 @@ $l10n = new OC_L10N('contacts');
 OC_JSON::checkLoggedIn();
 OC_JSON::checkAppEnabled('contacts');
 
+$adr_types = OC_Contacts_VCard::getTypesOfProperty($l10n, 'ADR');
+$phone_types = OC_Contacts_VCard::getTypesOfProperty($l10n, 'TEL');
+
 $addressbooks = OC_Contacts_Addressbook::all(OC_USER::getUser());
 $tmpl = new OC_Template('contacts','part.addcardform');
 $tmpl->assign('addressbooks',$addressbooks);
+$tmpl->assign('adr_types',$adr_types);
+$tmpl->assign('phone_types',$phone_types);
 $page = $tmpl->fetchPage();
 
 OC_JSON::success(array('data' => array( 'page' => $page )));
diff --git a/apps/contacts/ajax/showsetproperty.php b/apps/contacts/ajax/showsetproperty.php
index 6188f4773c3771b745184719cf75a7197fc5d0f0..4ec3dd7d8e1d2991dc7ff9e5e4a556c515c17c26 100644
--- a/apps/contacts/ajax/showsetproperty.php
+++ b/apps/contacts/ajax/showsetproperty.php
@@ -61,11 +61,13 @@ if(is_null($line)){
 	exit();
 }
 
+$adr_types = OC_Contacts_VCard::getTypesOfProperty($l10n, 'ADR');
 
 $tmpl = new OC_Template('contacts','part.setpropertyform');
 $tmpl->assign('id',$id);
 $tmpl->assign('checksum',$checksum);
 $tmpl->assign('property',OC_Contacts_VCard::structureProperty($vcard->children[$line]));
+$tmpl->assign('adr_types',$adr_types);
 $page = $tmpl->fetchPage();
 
 OC_JSON::success(array('data' => array( 'page' => $page )));
diff --git a/apps/contacts/css/styles.css b/apps/contacts/css/styles.css
index 68f843b7aaf1b7a9129f168b18d819f36267647a..ad64c777ee734c90f72ab3307bd97cc30a4730e6 100644
--- a/apps/contacts/css/styles.css
+++ b/apps/contacts/css/styles.css
@@ -4,9 +4,9 @@
 #contacts_deletecard {position:absolute;top:15px;right:0;}
 #contacts_details_list { list-style:none; }
 #contacts_details_list li { overflow:hidden; }
-#contacts_details_list li p.contacts_property_name { width:25%; float:left;text-align:right;padding-right:0.3em; }
+#contacts_details_list li p.contacts_property_name { width:25%; float:left;text-align:right;padding-right:0.3em;color:#666; }
 #contacts_details_list li p.contacts_property_data, #contacts_details_list li ul.contacts_property_data { width:72%; overflow:hidden; }
-#contacts_addproperty, #contacts_addproperty_button { margin-left:25%; }
+#contacts_addproperty_button, #contacts_setproperty_button { margin-left:25%; }
 
 .contacts_property_data ul, .contacts_property_data ol { list-style:none; }
 .contacts_property_data li { overflow: hidden; }
diff --git a/apps/contacts/js/interface.js b/apps/contacts/js/interface.js
index 9270297f3226b391258cbd0eb7d24a96be38aa1f..1cc3a5dfd634ab25e2be76395ae85f11dfbd9dd3 100644
--- a/apps/contacts/js/interface.js
+++ b/apps/contacts/js/interface.js
@@ -56,13 +56,13 @@ $(document).ready(function(){
 		$('#contacts_addpropertyform #contacts_fieldpart').remove();
 		$('#contacts_addpropertyform #contacts_generic').remove();
 		if($(this).val() == 'ADR'){
-			$('#contacts_addresspart').clone().insertBefore($('#contacts_addpropertyform input[type="submit"]'));
+			$('#contacts_addresspart').clone().insertAfter($('#contacts_addpropertyform .contacts_property_name'));
 		}
 		else if($(this).val() == 'TEL'){
-			$('#contacts_phonepart').clone().insertBefore($('#contacts_addpropertyform input[type="submit"]'));
+			$('#contacts_phonepart').clone().insertAfter($('#contacts_addpropertyform .contacts_property_name'));
 		}
 		else{
-			$('#contacts_generic').clone().insertBefore($('#contacts_addpropertyform input[type="submit"]'));
+			$('#contacts_generic').clone().insertAfter($('#contacts_addpropertyform .contacts_property_name'));
 		}
 	});
 
diff --git a/apps/contacts/lib/addressbook.php b/apps/contacts/lib/addressbook.php
index 2e869d7de3bf803b4359f8a1b5b3ef2726491e10..87477ed7ed41913ad505b9c92641fd76935d8eae 100644
--- a/apps/contacts/lib/addressbook.php
+++ b/apps/contacts/lib/addressbook.php
@@ -96,7 +96,7 @@ class OC_Contacts_Addressbook{
 		$stmt = OC_DB::prepare( 'INSERT INTO *PREFIX*contacts_addressbooks (userid,displayname,uri,description,ctag) VALUES(?,?,?,?,?)' );
 		$result = $stmt->execute(array($userid,$name,$uri,$description,1));
 
-		return OC_DB::insertid();
+		return OC_DB::insertid('*PREFIX*contacts_addressbooks');
 	}
 
 	/**
@@ -113,7 +113,7 @@ class OC_Contacts_Addressbook{
 		$stmt = OC_DB::prepare( 'INSERT INTO *PREFIX*contacts_addressbooks (userid,displayname,uri,description,ctag) VALUES(?,?,?,?,?)' );
 		$result = $stmt->execute(array($userid,$name,$uri,$description,1));
 
-		return OC_DB::insertid();
+		return OC_DB::insertid('*PREFIX*contacts_addressbooks');
 	}
 
 	/**
diff --git a/apps/contacts/lib/vcard.php b/apps/contacts/lib/vcard.php
index 74bc0f92f1b0e680658107d94a2f7474e92708e7..56602f25c0a2aa8c243f5435dc15ed1994082fe1 100644
--- a/apps/contacts/lib/vcard.php
+++ b/apps/contacts/lib/vcard.php
@@ -95,10 +95,15 @@ class OC_Contacts_VCard{
 
 		$card = self::parse($data);
 		if(!is_null($card)){
+			// VCARD must have a version
+			$hasversion = false;
 			foreach($card->children as $property){
 				if($property->name == 'FN'){
 					$fn = $property->value;
 				}
+				elseif($property->name == 'VERSION'){
+					$hasversion = true;
+				}
 				elseif(is_null($uri) && $property->name == 'UID' ){
 					$uri = $property->value.'.vcf';
 				}
@@ -109,6 +114,11 @@ class OC_Contacts_VCard{
 				$card->add(new Sabre_VObject_Property('UID',$uid));
 				$data = $card->serialize();
 			};
+			// Add version if needed
+			if(!$hasversion){
+				$card->add(new Sabre_VObject_Property('VERSION','3.0'));
+				$data = $card->serialize();
+			}
 		}
 		else{
 			// that's hard. Creating a UID and not saving it
@@ -121,7 +131,7 @@ class OC_Contacts_VCard{
 
 		OC_Contacts_Addressbook::touch($id);
 
-		return OC_DB::insertid();
+		return OC_DB::insertid('*PREFIX*contacts_cards');
 	}
 
 	/**
@@ -147,7 +157,7 @@ class OC_Contacts_VCard{
 
 		OC_Contacts_Addressbook::touch($id);
 
-		return OC_DB::insertid();
+		return OC_DB::insertid('*PREFIX*contacts_cards');
 	}
 
 	/**
@@ -362,4 +372,24 @@ class OC_Contacts_VCard{
 			return null;
 		}
 	}
+	public static function getTypesOfProperty($l, $prop){
+		switch($prop){
+		case 'ADR':
+			return array(
+				'WORK' => $l->t('Work'),
+				'HOME' => $l->t('Home'),
+			);
+		case 'TEL':
+			return array(
+				'HOME'  =>  $l->t('Home'),
+				'CELL'  =>  $l->t('Mobile'),
+				'WORK'  =>  $l->t('Work'),
+				'TEXT'  =>  $l->t('Text'),
+				'VOICE' =>  $l->t('Voice'),
+				'FAX'   =>  $l->t('Fax'),
+				'VIDEO' =>  $l->t('Video'),
+				'PAGER' =>  $l->t('Pager'),
+			);
+		}
+	}
 }
diff --git a/apps/contacts/templates/part.addcardform.php b/apps/contacts/templates/part.addcardform.php
index 8e482cc4ebaa5e4a50f16356789c133686327482..037e3629bb9d23a00ec26a59b2a652e0975d51e6 100644
--- a/apps/contacts/templates/part.addcardform.php
+++ b/apps/contacts/templates/part.addcardform.php
@@ -7,9 +7,7 @@
 				<li class="input stringish">
 					<label class="label" for="id"><?php echo $l->t('Group'); ?></label>
 					<select name="id" size="1">
-						<?php foreach($_['addressbooks'] as $addressbook): ?>
-							<option value="<?php echo $addressbook['id']; ?>"><?php echo $addressbook['displayname']; ?></option>
-						<?php endforeach; ?>
+						<?php echo html_select_options($_['addressbooks'], null, array('value'=>'id', 'label'=>'displayname')); ?>
 					</select>
 				</li>
 			</ol>
@@ -19,7 +17,7 @@
 		<ol>
 			<li class="input stringish">
 				<label class="label" for="fn"><?php echo $l->t('Name'); ?></label>
-				<input type="text" name="fn" value=""><br>
+				<input id="fn" type="text" name="fn" value=""><br>
 			</li>
 			<li class="input stringish">
 				<label class="label" for="org"><?php echo $l->t('Organization'); ?></label>
@@ -46,14 +44,7 @@
 						<li class="fragment">
 							<label for="tel_type"><?php echo $l->t('Type'); ?></label>
 							<select id="TEL" name="parameters[TEL][TYPE]" size="1">
-								<option value="home"><?php echo $l->t('Home'); ?></option>
-								<option value="cell" selected="selected"><?php echo $l->t('Mobile'); ?></option>
-								<option value="work"><?php echo $l->t('Work'); ?></option>
-								<option value="text"><?php echo $l->t('Text'); ?></option>
-								<option value="voice"><?php echo $l->t('Voice'); ?></option>
-								<option value="fax"><?php echo $l->t('Fax'); ?></option>
-								<option value="video"><?php echo $l->t('Video'); ?></option>
-								<option value="pager"><?php echo $l->t('Pager'); ?></option>
+								<?php echo html_select_options($_['phone_types'], 'CELL') ?>
 							</select>
 						</li>
 					</ol>
@@ -67,8 +58,7 @@
 			<li class="input">
 				<label class="label" for="adr_type"><?php echo $l->t('Type'); ?></label>
 				<select id="adr_type" name="parameters[ADR][TYPE]" size="1">
-					<option value="work"><?php echo $l->t('Work'); ?></option>
-					<option value="home" selected="selected"><?php echo $l->t('Home'); ?></option>
+					<?php echo html_select_options($_['adr_types'], 'HOME') ?>
 				</select>
 			</li>
 			<li class="input stringish">
@@ -81,19 +71,19 @@
 			</li>
 			<li class="input stringish">
 				<label class="label" for="adr_street"><?php echo $l->t('Street'); ?></label>
-				<input type="text" for="adr_street" name="value[ADR][2]" value="">
+				<input type="text" id="adr_street" name="value[ADR][2]" value="">
 			</li>
 			<li class="input stringish">
 				<label class="label" for="adr_city"><?php echo $l->t('City'); ?></label>
-				<input type="text" for="adr_city" name="value[ADR][3]" value="">
+				<input type="text" id="adr_city" name="value[ADR][3]" value="">
 			</li>
 			<li class="input stringish">
 				<label class="label" for="adr_region"><?php echo $l->t('Region'); ?></label>
-				<input type="text" for="adr_region" name="value[ADR][4]" value="">
+				<input type="text" id="adr_region" name="value[ADR][4]" value="">
 			</li>
 			<li class="input stringish">
 				<label class="label" for="adr_zipcode"><?php echo $l->t('Zipcode'); ?></label>
-				<input type="text" for="adr_zipcode" name="value[ADR][5]" value="">
+				<input type="text" id="adr_zipcode" name="value[ADR][5]" value="">
 			</li>
 			<li class="input stringish">
 				<label class="label" for="adr_country"><?php echo $l->t('Country'); ?></label>
diff --git a/apps/contacts/templates/part.details.php b/apps/contacts/templates/part.details.php
index e9fa8356e8b7cdf4a44c5c17c27d3c625328a5b1..f5bd75809b1e55b797858af7f7625e0feefdce7d 100644
--- a/apps/contacts/templates/part.details.php
+++ b/apps/contacts/templates/part.details.php
@@ -27,15 +27,13 @@
 				<input type="hidden" name="id" value="<?php echo $_['id']; ?>">
 				<p class="contacts_property_name">
 					<select name="name" size="1">
-						<option value="ADR"><?php echo $l->t('Address'); ?></option>
-						<option value="TEL"><?php echo $l->t('Telephone'); ?></option>
-						<option value="EMAIL" selected="selected"><?php echo $l->t('Email'); ?></option>
-						<option value="ORG"><?php echo $l->t('Organization'); ?></option>
+						<?php echo html_select_options($_['property_types'], 'EMAIL') ?>
 					</select>
 				</p>
 				<p class="contacts_property_data" id="contacts_generic">
 					<input type="text" name="value" value="">
-				</p><br>
+				</p>
+				<br>
 				<input id="contacts_addproperty_button" type="submit" value="<?php echo $l->t('Add'); ?>">
 			</form>
 			<div id="contacts_addcontactsparts" style="display:none;">
@@ -43,8 +41,7 @@
 					<li>
 						<label for="adr_type"><?php echo $l->t('Type'); ?></label>
 						<select id="adr_type" name="parameters[TYPE]" size="1">
-							<option value="work"><?php echo $l->t('Work'); ?></option>
-							<option value="home" selected="selected"><?php echo $l->t('Home'); ?></option>
+							<?php echo html_select_options($_['adr_types'], 'HOME') ?>
 						</select>
 					</li>
 					<li>
@@ -79,14 +76,7 @@
 				<p class="contacts_property_data" id="contacts_phonepart">
 					<input type="text" name="value" value="">
 					<select name="parameters[TYPE]" size="1">
-						<option value="home"><?php echo $l->t('Home'); ?></option>
-						<option value="cell" selected="selected"><?php echo $l->t('Mobile'); ?></option>
-						<option value="work"><?php echo $l->t('Work'); ?></option>
-						<option value="text"><?php echo $l->t('Text'); ?></option>
-						<option value="voice"><?php echo $l->t('Voice'); ?></option>
-						<option value="fax"><?php echo $l->t('Fax'); ?></option>
-						<option value="video"><?php echo $l->t('Video'); ?></option>
-						<option value="pager"><?php echo $l->t('Pager'); ?></option>
+						<?php echo html_select_options($_['phone_types'], 'CELL') ?>
 					</select>
 				</p>
 				<p class="contacts_property_data" id="contacts_generic">
diff --git a/apps/contacts/templates/part.setpropertyform.php b/apps/contacts/templates/part.setpropertyform.php
index afdba2bd759ff72ac3de6572c0d87f6b556bcadb..811b9626ce496e436480b7e3193205a5ea2cef7b 100644
--- a/apps/contacts/templates/part.setpropertyform.php
+++ b/apps/contacts/templates/part.setpropertyform.php
@@ -5,42 +5,48 @@
 		<?php if($_['property']['name']=='ADR'): ?>
 			<p class="contacts_property_name"><label for="adr_pobox"><?php echo $l->t('Address'); ?></label></p>
 			<ol class="contacts_property_data" id="contacts_addresspart">
+				<li class="input">
+					<label class="label" for="adr_type"><?php echo $l->t('Type'); ?></label>
+					<select id="adr_type" name="parameters[TYPE]" size="1">
+						<?php echo html_select_options($_['adr_types'], strtoupper($_['property']['parameters']['TYPE'])) ?>
+					</select>
+				</li>
 				<li>
 					<label for="adr_pobox"><?php echo $l->t('PO Box'); ?></label>
-					<input id="adr_pobox" type="text" name="value[0]" value="">
+					<input id="adr_pobox" type="text" name="value[0]" value="<?php echo $_['property']['value'][0] ?>">
 				</li>
 				<li>
 					<label for="adr_extended"><?php echo $l->t('Extended'); ?></label>
-					<input id="adr_extended" type="text" name="value[1]" value="">
+					<input id="adr_extended" type="text" name="value[1]" value="<?php echo $_['property']['value'][1] ?>">
 				</li>
 				<li>
 					<label for="adr_street"><?php echo $l->t('Street'); ?></label>
-					<input id="adr_street" type="text" name="value[2]" value="">
+					<input id="adr_street" type="text" name="value[2]" value="<?php echo $_['property']['value'][2] ?>">
 				</li>
 				<li>
 					<label for="adr_city"><?php echo $l->t('City'); ?></label>
-					<input id="adr_city" type="text" name="value[3]" value="">
+					<input id="adr_city" type="text" name="value[3]" value="<?php echo $_['property']['value'][3] ?>">
 				</li>
 				<li>
 					<label for="adr_region"><?php echo $l->t('Region'); ?></label>
-					<input id="adr_region" type="text" name="value[4]" value="">
+					<input id="adr_region" type="text" name="value[4]" value="<?php echo $_['property']['value'][4] ?>">
 				</li>
 				<li>
 					<label for="adr_zipcode"><?php echo $l->t('Zipcode'); ?></label>
-					<input id="adr_zipcode" type="text" name="value[5]" value="">
+					<input id="adr_zipcode" type="text" name="value[5]" value="<?php echo $_['property']['value'][5] ?>">
 				</li>
 				<li>
 					<label for="adr_country"><?php echo $l->t('Country'); ?></label>
-					<input id="adr_country" type="text" name="value[6]" value="">
+					<input id="adr_country" type="text" name="value[6]" value="<?php echo $_['property']['value'][6] ?>">
 				</li>
 			</ol>
 		<?php elseif($_['property']['name']=='TEL'): ?>
-			<p class="contacts_property_name"><label for="tel"><?php echo $l->t('Address'); ?></label></p>
+			<p class="contacts_property_name"><label for="tel"><?php echo $l->t('Phone'); ?></label></p>
 			<p class="contacts_property_data"><input id="tel" type="phone" name="value" value="<?php echo $_['property']['value']; ?>"></p>
 		<?php elseif($_['property']['name']=='EMAIL'): ?>
 			<p class="contacts_property_name"><label for="email"><?php echo $l->t('Email'); ?></label></p>
 			<p class="contacts_property_data"><input id="email" type="text" name="value" value="<?php echo $_['property']['value']; ?>"></p>
-		<?php elseif($_['property']['name']=='EMAIL'): ?>
+		<?php elseif($_['property']['name']=='ORG'): ?>
 			<p class="contacts_property_name"><label for="org"><?php echo $l->t('Organization'); ?></label></p>
 			<p class="contacts_property_data"><input id="org" type="text" name="value" value="<?php echo $_['property']['value']; ?>"></p>
 		<?php endif; ?>
diff --git a/apps/files_sharing/js/share.js b/apps/files_sharing/js/share.js
index c0fc91e92add34f59912976cd0e675afeabb9402..4056d693bfa99dcd2d0fe975b519654efb0308cf 100644
--- a/apps/files_sharing/js/share.js
+++ b/apps/files_sharing/js/share.js
@@ -10,7 +10,7 @@ $(document).ready(function() {
 				type: 'GET',
 				url: OC.linkTo('files_sharing', 'ajax/getitem.php'),
 				dataType: 'json',
-				data: 'source='+file,
+				data: {source: file},
 				async: false,
 				success: function(users) {
 					if (users) {
@@ -46,6 +46,7 @@ $(document).ready(function() {
 
 	$('.share').click(function(event) {
 		event.preventDefault();
+		event.stopPropagation();
 		var filenames = getSelectedFiles('name');
 		var length = filenames.length;
 		var files = '';
@@ -184,8 +185,8 @@ function createDropdown(filename, files) {
 	html += '<input id="link" style="display:none; width:90%;" />';
 	html += '</div>';
 	if (filename) {
-		$('tr[data-file="'+filename+'"]').addClass('mouseOver');
-		$(html).appendTo($('tr[data-file="'+filename+'"] td.filename'));
+		$('tr').filterAttr('data-file',filename).addClass('mouseOver');
+		$(html).appendTo($('tr').filterAttr('data-file',filename).find('td.filename'));
 	} else {
 		$(html).appendTo($('thead .share'));
 	}
diff --git a/apps/media/lib_collection.php b/apps/media/lib_collection.php
index 571cb7e68509fd3887d445c7ff91bc49218a3951..caa3ac3f47985b2da5e6c78a741f9434506fdc70 100644
--- a/apps/media/lib_collection.php
+++ b/apps/media/lib_collection.php
@@ -267,7 +267,7 @@ class OC_MEDIA_COLLECTION{
 				$query=self::$queries['addsong'];
 			}
 			$query->execute(array($name,$artist,$album,$path,$uid,$length,$track,$size));
-			$songId=OC_DB::insertid();
+			$songId=OC_DB::insertid('*PREFIX*media_songs');
 // 			self::setLastUpdated();
 			return self::getSongId($name,$artist,$album);
 		}
diff --git a/apps/remoteStorage/lib_remoteStorage.php b/apps/remoteStorage/lib_remoteStorage.php
index f10a72870a4757c628e91f452dead70a7d267f48..4bbadafe7d231cb6a6b77154523f09bcb565a337 100644
--- a/apps/remoteStorage/lib_remoteStorage.php
+++ b/apps/remoteStorage/lib_remoteStorage.php
@@ -4,12 +4,6 @@ class OC_remoteStorage {
 	public static function getValidTokens($ownCloudUser, $userAddress, $dataScope) {
 		$query=OC_DB::prepare("SELECT token,appUrl FROM *PREFIX*authtoken WHERE user=? AND userAddress=? AND dataScope=? LIMIT 100");
 		$result=$query->execute(array($ownCloudUser,$userAddress,$dataScope));
-		if( PEAR::isError($result)) {
-			$entry = 'DB Error: "'.$result->getMessage().'"<br />';
-			$entry .= 'Offending command was: '.$result->getDebugInfo().'<br />';
-			OC_Log::write('removeStorage',$entry,OC_Log::ERROR);
-			die( $entry );
-		}
 		$ret = array();
 		while($row=$result->fetchRow()){
 			$ret[$row['token']]=$userAddress;
@@ -21,12 +15,6 @@ class OC_remoteStorage {
 		$user=OC_User::getUser();
 		$query=OC_DB::prepare("SELECT token,appUrl,userAddress,dataScope FROM *PREFIX*authtoken WHERE user=? LIMIT 100");
 		$result=$query->execute(array($user));
-		if( PEAR::isError($result)) {
-			$entry = 'DB Error: "'.$result->getMessage().'"<br />';
-			$entry .= 'Offending command was: '.$result->getDebugInfo().'<br />';
-			OC_Log::write('removeStorage',$entry,OC_Log::ERROR);
-			die( $entry );
-		}
 		$ret = array();
 		while($row=$result->fetchRow()){
 			$ret[$row['token']] = array(
@@ -42,23 +30,11 @@ class OC_remoteStorage {
 		$user=OC_User::getUser();
 		$query=OC_DB::prepare("DELETE FROM *PREFIX*authtoken WHERE token=? AND user=?");
 		$result=$query->execute(array($token,$user));
-		if( PEAR::isError($result)) {
-			$entry = 'DB Error: "'.$result->getMessage().'"<br />';
-			$entry .= 'Offending command was: '.$result->getDebugInfo().'<br />';
-			OC_Log::write('removeStorage',$entry,OC_Log::ERROR);
-			die( $entry );
-		}
 	}
 	private static function addToken($token, $appUrl, $userAddress, $dataScope){
 		$user=OC_User::getUser();
 		$query=OC_DB::prepare("INSERT INTO *PREFIX*authtoken (`token`,`appUrl`,`user`,`userAddress`,`dataScope`) VALUES(?,?,?,?,?)");
 		$result=$query->execute(array($token,$appUrl,$user,$userAddress,$dataScope));
-		if( PEAR::isError($result)) {
-			$entry = 'DB Error: "'.$result->getMessage().'"<br />';
-			$entry .= 'Offending command was: '.$result->getDebugInfo().'<br />';
-			OC_Log::write('removeStorage',$entry,OC_Log::ERROR);
-			die( $entry );
-		}
 	}
 	public static function createDataScope($appUrl, $userAddress, $dataScope){
 		$token=uniqid();
diff --git a/apps/user_webfinger/webfinger.php b/apps/user_webfinger/webfinger.php
index afb536896827a4fc5769b42ed9f2a449aac973a2..349afaba507a5fe8ef98a8e4284fbb1d09317128 100644
--- a/apps/user_webfinger/webfinger.php
+++ b/apps/user_webfinger/webfinger.php
@@ -4,7 +4,14 @@ if($_SERVER['SCRIPT_NAME'] == '/.well-known/webfinger.php') {
 } else {
 	header('Please-first: activate');
 }
-header("Content-Type: application/xml+xrd");
+// header("Content-Type: application/xml+xrd");
+
+// calculate the documentroot
+// modified version of the one in lib/base.php that takes the .well-known symlink into account
+$DOCUMENTROOT=realpath($_SERVER['DOCUMENT_ROOT']);
+$SERVERROOT=str_replace("\\",'/',dirname(dirname(dirname(dirname(__FILE__)))));
+$SUBURI=substr(realpath($_SERVER["SCRIPT_FILENAME"]),strlen($SERVERROOT));
+$WEBROOT=substr($SUBURI,0,-34);
 
 if($_GET['q']) {
 	$bits = explode('@', $_GET['q']);
@@ -20,5 +27,5 @@ echo "<";
 ?xml version="1.0" encoding="UTF-8"?>
 <XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0" xmlns:hm="http://host-meta.net/xrd/1.0">
 	<hm:Host xmlns="http://host-meta.net/xrd/1.0"><?php echo $_SERVER['SERVER_NAME'] ?></hm:Host>
-	<Link rel="http://unhosted.org/spec/dav/0.1" href="http<?php echo ($_SERVER['HTTPS']?'s':''); ?>://<?php echo $_SERVER['SERVER_NAME'] ?>/apps/remoteStorage/compat.php/<?php echo $userName ?>/remoteStorage/" />
+	<Link rel="http://unhosted.org/spec/dav/0.1" href="http<?php echo ($_SERVER['HTTPS']?'s':''); ?>://<?php echo $_SERVER['SERVER_NAME'].$WEBROOT ?>/apps/remoteStorage/compat.php/<?php echo $userName ?>/remoteStorage/" />
 </XRD>
diff --git a/core/css/styles.css b/core/css/styles.css
index 0f591859f3a986f8a9b9997c1a1c2c179b8b8542..d1c648383c0cdee2f792cfbc9f4c4f18dcfd3a3c 100644
--- a/core/css/styles.css
+++ b/core/css/styles.css
@@ -32,14 +32,14 @@ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#35537a', end
 
 /* INPUTS */
 input[type="text"], input[type="password"] { cursor:text; }
-input, select, .button, #quota, div.jp-progress, .pager li a { font-size:1em; width:10em; margin:.3em; padding:.6em .5em .4em; background:#fff; color:#333; border:1px solid #ddd; -moz-box-shadow:0 1px 1px #fff, 0 2px 0 #bbb inset; -webkit-box-shadow:0 1px 1px #fff, 0 1px 0 #bbb inset; box-shadow:0 1px 1px #fff, 0 1px 0 #bbb inset; -moz-border-radius:.5em; -webkit-border-radius:.5em; border-radius:.5em; outline:none; }
+input, select, button, .button, #quota, div.jp-progress, .pager li a { font-size:1em; width:10em; margin:.3em; padding:.6em .5em .4em; background:#fff; color:#333; border:1px solid #ddd; -moz-box-shadow:0 1px 1px #fff, 0 2px 0 #bbb inset; -webkit-box-shadow:0 1px 1px #fff, 0 1px 0 #bbb inset; box-shadow:0 1px 1px #fff, 0 1px 0 #bbb inset; -moz-border-radius:.5em; -webkit-border-radius:.5em; border-radius:.5em; outline:none; }
 input[type="text"], input[type="password"], input[type="search"] { background:#f8f8f8; color:#555; cursor:text; }
 input[type="text"], input[type="password"], input[type="search"] { -webkit-appearance:textfield; -moz-appearance:textfield; -webkit-box-sizing:content-box; -moz-box-sizing:content-box; box-sizing:content-box; }
 input[type="text"]:hover, input[type="text"]:focus, input[type="text"]:active,
 input[type="password"]:hover, input[type="password"]:focus, input[type="password"]:active,
 .searchbox input[type="search"]:hover, .searchbox input[type="search"]:focus, .searchbox input[type="search"]:active { background-color:#fff; color:#333; opacity:1; }
 
-input[type="submit"], input[type="button"], .button, #quota, div.jp-progress, .pager li a { width:auto; padding:.4em; border:1px solid #ddd; font-weight:bold; cursor:pointer; background:#f8f8f8; color:#555; text-shadow:#fff 0 1px 0; -moz-box-shadow:0 1px 1px #fff, 0 1px 1px #fff inset; -webkit-box-shadow:0 1px 1px #fff, 0 1px 1px #fff inset; -moz-border-radius:.5em; -webkit-border-radius:.5em; border-radius:.5em; }
+input[type="submit"], input[type="button"], button, .button, #quota, div.jp-progress, .pager li a { width:auto; padding:.4em; border:1px solid #ddd; font-weight:bold; cursor:pointer; background:#f8f8f8; color:#555; text-shadow:#fff 0 1px 0; -moz-box-shadow:0 1px 1px #fff, 0 1px 1px #fff inset; -webkit-box-shadow:0 1px 1px #fff, 0 1px 1px #fff inset; -moz-border-radius:.5em; -webkit-border-radius:.5em; border-radius:.5em; }
 input[type="submit"]:hover, input[type="submit"]:focus, input[type="button"]:hover, input[type="button"]:focus, .button:hover { background:#fff; color:#333; }
 input[type="checkbox"] { width:auto; }
 #quota { cursor:default; }
diff --git a/core/img/actions/upload.png b/core/img/actions/upload.png
new file mode 100644
index 0000000000000000000000000000000000000000..5744aad75a8c64eb1494deaadfd6db17c529c479
Binary files /dev/null and b/core/img/actions/upload.png differ
diff --git a/core/img/actions/upload.svg b/core/img/actions/upload.svg
new file mode 100644
index 0000000000000000000000000000000000000000..91333bb681e80a88e5ae09da082c9bdeecf2013f
--- /dev/null
+++ b/core/img/actions/upload.svg
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16"
+   height="16"
+   id="svg3875"
+   version="1.1"
+   inkscape:version="0.48.1 r9760"
+   sodipodi:docname="download.svg"
+   inkscape:export-filename="/home/jancborchardt/owncloud/core/img/actions/play.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs3877" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="17.921875"
+     inkscape:cx="-5.3403178"
+     inkscape:cy="10.148736"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1280"
+     inkscape:window-height="776"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3883"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3880">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1036.3622)">
+    <path
+       style="fill:#000000;fill-opacity:1;stroke:none"
+       d="m 10,1051.3622 -4,0 -1,-7 -4,0 7,-7 7,7 -4,0 z"
+       id="path3086"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccc" />
+  </g>
+</svg>
diff --git a/core/js/js.js b/core/js/js.js
index 9e814ca07298d23fae5a176997c84ab065d67d80..5846d2898804909c476609ee7e2ce3aece565906 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -365,7 +365,7 @@ $(document).ready(function(){
 	$('.jp-controls .jp-previous').tipsy({gravity:'nw', fade:true, live:true});
 	$('.jp-controls .jp-next').tipsy({gravity:'n', fade:true, live:true});
 	$('.password .action').tipsy({gravity:'se', fade:true, live:true});
-	$('.file_upload_button_wrapper').tipsy({gravity:'e', fade:true}); 
+	$('.file_upload_button_wrapper').tipsy({gravity:'w', fade:true}); 
 	$('.selectedActions a.delete').tipsy({gravity: 'se', fade:true, live:true});
 	$('.selectedActions a').tipsy({gravity:'s', fade:true, live:true});
 	$('#headerSize').tipsy({gravity:'s', fade:true, live:true});
@@ -401,3 +401,10 @@ if (!Array.prototype.map){
 	    return res;
 	};
 }
+
+/**
+ * Filter Jquery selector by attribute value
+ **/
+$.fn.filterAttr = function(attr_name, attr_value) {  
+   return this.filter(function() { return $(this).attr(attr_name) === attr_value; });
+};
diff --git a/files/ajax/newfile.php b/files/ajax/newfile.php
new file mode 100644
index 0000000000000000000000000000000000000000..5c4f49a3675ce307f9ef8a1a42ae6880abb1001d
--- /dev/null
+++ b/files/ajax/newfile.php
@@ -0,0 +1,27 @@
+<?php
+
+// Init owncloud
+require_once('../../lib/base.php');
+
+OC_JSON::checkLoggedIn();
+
+// Get the params
+$dir = isset( $_GET['dir'] ) ? $_GET['dir'] : '';
+$filename = isset( $_GET['filename'] ) ? $_GET['filename'] : '';
+$content = isset( $_GET['content'] ) ? $_GET['content'] : '';
+
+if($filename == '') {
+	OC_JSON::error(array("data" => array( "message" => "Empty Filename" )));
+	exit();
+}
+
+if(OC_Files::newFile($dir, $filename, 'file')) {
+	if($content){
+		OC_Filesystem::file_put_contents($dir.'/'.$filename,$content);
+	}
+	OC_JSON::success(array("data" => array('content'=>$content)));
+	exit();
+}
+
+
+OC_JSON::error(array("data" => array( "message" => "Error when creating the file" )));
\ No newline at end of file
diff --git a/files/css/files.css b/files/css/files.css
index ac1f523f8625f8b6ba75ab7af7e13bddbbc38cb7..22f4810d0a6acd170b632bbeb1b14ebfa60ddf8e 100644
--- a/files/css/files.css
+++ b/files/css/files.css
@@ -3,15 +3,22 @@
  See the COPYING-README file. */
 
 /* FILE MENU */
-.actions { padding:.3em; float:left; }
-.actions input { margin:0; }
+.actions { padding:.3em; float:left; height:2em; }
+.actions input, .actions button, .actions .button { margin:0; }
 #file_menu { right:0; position:absolute; top:0; }
 #file_menu a { display:block; float:left; background-image:none; text-decoration:none; }
-.file_upload_form, #file_newfolder_form { display:inline; float: left; margin-left:.5em; }
+.file_upload_form, #file_newfolder_form { display:inline; float: left; margin-left:0; }
 #fileSelector, #file_upload_submit, #file_newfolder_submit { display:none; }
 .file_upload_wrapper, #file_newfolder_name { background-repeat:no-repeat; background-position:.5em .5em; padding-left:2em; }
-.file_upload_wrapper { font-weight:bold; display:-moz-inline-box; /* fallback for older firefox versions*/ display:inline-block; padding-left:0; overflow:hidden; position:relative; margin:.1em .1em .1em 0em;}
+.file_upload_wrapper { font-weight:bold; display:-moz-inline-box; /* fallback for older firefox versions*/ display:inline-block; padding-left:0; overflow:hidden; position:relative; margin:0;}
 .file_upload_wrapper .file_upload_button_wrapper { position:absolute; top:0; left:0; width:100%; height:100%; cursor:pointer; z-index:1000; }
+#new { float:left; border-top-right-radius:0; border-bottom-right-radius:0; margin:0 0 0 1em; border-right:none; z-index:1010; height:1.3em; }
+#new.active { border-bottom-left-radius:0; border-bottom:none; background:#f8f8f8 }
+#new>a{ padding-left:1em; padding-right:1em; }
+#new>ul { display:none; position:fixed; text-align:left; padding:.5em; background:#f8f8f8; margin-top:0.075em; border:1px solid #ddd; min-width:7em; margin-left:-.5em; z-index:-1; }
+#new>ul>li { margin:.3em; padding-left:2em; background-repeat:no-repeat; cursor:pointer; padding-bottom:0.1em }
+#new>ul>li>p { cursor:pointer; }
+#new>ul>li>input { padding:0.3em; margin:-0.3em; }
 
 #file_newfolder_name { background-image:url('../../core/img/places/folder.svg'); font-weight:normal; width:7em; }
 .file_upload_start, .file_upload_filename { font-size:1em; }
@@ -19,7 +26,9 @@
 .file_upload_target { display:none; }
 
 .file_upload_start { opacity:0; filter:alpha(opacity=0); z-index:1; position:absolute; left:0; top:0; width:100%; cursor:pointer;}
-.file_upload_filename { z-index:100; cursor:pointer;}
+.file_upload_filename.active { border-bottom-right-radius:0 }
+.file_upload_filename { z-index:100; cursor:pointer; border-top-left-radius:0; border-bottom-left-radius:0; padding:.3em; }
+
 
 .file_upload_form, .file_upload_wrapper, .file_upload_start, .file_upload_filename, #file_upload_submit { cursor:pointer; }
 
diff --git a/files/index.php b/files/index.php
index 8bb5b618d87834e4e52c8ff9c0ca07b1d7024192..4b3bbd1bfd49f39c3bc7f0730e7a499a24b3f8a4 100644
--- a/files/index.php
+++ b/files/index.php
@@ -89,6 +89,10 @@ $upload_max_filesize = OC_Helper::computerFileSize(ini_get('upload_max_filesize'
 $post_max_size = OC_Helper::computerFileSize(ini_get('post_max_size'));
 $maxUploadFilesize = min($upload_max_filesize, $post_max_size);
 
+$freeSpace=OC_Filesystem::free_space('/');
+$freeSpace=max($freeSpace,0);
+$maxUploadFilesize = min($maxUploadFilesize ,$freeSpace);
+
 $tmpl = new OC_Template( "files", "index", "user" );
 $tmpl->assign( "fileList", $list->fetchPage() );
 $tmpl->assign( "breadcrumb", $breadcrumbNav->fetchPage() );
diff --git a/files/js/fileactions.js b/files/js/fileactions.js
index f95c5e84dc1f79b4534632d1ae1df4957a07dbcf..9e2688e82c13596ced255d54538e896fd0364a95 100644
--- a/files/js/fileactions.js
+++ b/files/js/fileactions.js
@@ -56,7 +56,7 @@ FileActions={
 		$('#fileList .action').remove();
 		var actions=FileActions.get(FileActions.getCurrentMimeType(),FileActions.getCurrentType());
 		var file=FileActions.getCurrentFile();
-		if($('tr[data-file="'+file+'"]').data('renaming')){
+		if($('tr').filterAttr('data-file',file).data('renaming')){
 			return;
 		}
 		var defaultAction=FileActions.getDefault(FileActions.getCurrentMimeType(),FileActions.getCurrentType());
diff --git a/files/js/filelist.js b/files/js/filelist.js
index 863a3385d15b5529f797f2ce1f5ee93f20e0464d..5740ece9716cdf893645de68a9f74bc09f68a0f3 100644
--- a/files/js/filelist.js
+++ b/files/js/filelist.js
@@ -4,7 +4,7 @@ FileList={
 	},
 	addFile:function(name,size,lastModified,loading){
 		var img=(loading)?OC.imagePath('core', 'loading.gif'):OC.imagePath('core', 'filetypes/file.png');
-		var html='<tr data-file="'+name+'" data-type="file" data-size="'+size+'">';
+		var html='<tr data-type="file" data-size="'+size+'">';
 		if(name.indexOf('.')!=-1){
 			var basename=name.substr(0,name.lastIndexOf('.'));
 			var extention=name.substr(name.lastIndexOf('.'));
@@ -29,16 +29,21 @@ FileList={
 		html+='<td class="filesize" title="'+humanFileSize(size)+'" style="color:rgb('+sizeColor+','+sizeColor+','+sizeColor+')">'+simpleSize+'</td>';
 		html+='<td class="date"><span class="modified" title="'+formatDate(lastModified)+'" style="color:rgb('+modifiedColor+','+modifiedColor+','+modifiedColor+')">'+relative_modified_date(lastModified.getTime() / 1000)+'</span></td>';
 		html+='</tr>';
-		FileList.insertElement(name,'file',$(html));
+		FileList.insertElement(name,'file',$(html).attr('data-file',name));
 		if(loading){
-			$('tr[data-file="'+name+'"]').data('loading',true);
+			$('tr').filterAttr('data-file',name).data('loading',true);
 		}else{
-			$('tr[data-file="'+name+'"] td.filename').draggable(dragOptions);
+			$('tr').filterAttr('data-file',name).find('td.filename').draggable(dragOptions);
 		}
 	},
 	addDir:function(name,size,lastModified){
-		var html='<tr data-file="'+name+'" data-type="dir" data-size="'+size+'">';
-		html+='<td class="filename" style="background-image:url('+OC.imagePath('core', 'filetypes/folder.png')+')"><input type="checkbox" /><a class="name" href="index.php?dir='+$('#dir').val()+'/'+name+'">'+name+'</a></td>';
+		html = $('<tr></tr>').attr({ "data-type": "dir", "data-size": size, "data-file": name});
+		td = $('<td></td>').attr({"class": "filename", "style": 'background-image:url('+OC.imagePath('core', 'filetypes/folder.png')+')' });
+		td.append('<input type="checkbox" />');
+		var link_elem = $('<a></a>').attr({ "class": "name", "href": "index.php?dir="+ encodeURIComponent($('#dir').val()+'/'+name) });
+		link_elem.append($('<span></span>').addClass('nametext').text(name));
+		td.append(link_elem);
+		html.append(td);
 		if(size!='Pending'){
 			simpleSize=simpleFileSize(size);
 		}else{
@@ -47,13 +52,15 @@ FileList={
 		sizeColor = Math.round(200-Math.pow((size/(1024*1024)),2));
 		lastModifiedTime=Math.round(lastModified.getTime() / 1000);
 		modifiedColor=Math.round((Math.round((new Date()).getTime() / 1000)-lastModifiedTime)/60/60/24*5);
-		html+='<td class="filesize" title="'+humanFileSize(size)+'" style="color:rgb('+sizeColor+','+sizeColor+','+sizeColor+')">'+simpleSize+'</td>';
-		html+='<td class="date"><span class="modified" title="'+formatDate(lastModified)+'" style="color:rgb('+modifiedColor+','+modifiedColor+','+modifiedColor+')">'+relative_modified_date(lastModified.getTime() / 1000)+'</span></td>';
-		html+='</tr>';
+		td = $('<td></td>').attr({ "class": "filesize", "title": humanFileSize(size), "style": 'color:rgb('+sizeColor+','+sizeColor+','+sizeColor+')'}).text(simpleSize);
+		html.append(td);
 		
-		FileList.insertElement(name,'dir',$(html));
-		$('tr[data-file="'+name+'"] td.filename').draggable(dragOptions);
-		$('tr[data-file="'+name+'"] td.filename').droppable(folderDropOptions);
+		td = $('<td></td>').attr({ "class": "date" });
+		td.append($('<span></span>').attr({ "class": "modified", "title": formatDate(lastModified), "style": 'color:rgb('+modifiedColor+','+modifiedColor+','+modifiedColor+')' }).text( relative_modified_date(lastModified.getTime() / 1000) ));
+		html.append(td);
+		FileList.insertElement(name,'dir',html);
+		$('tr').filterAttr('data-file',name).find('td.filename').draggable(dragOptions);
+		$('tr').filterAttr('data-file',name).find('td.filename').droppable(folderDropOptions);
 	},
 	refresh:function(data) {
 		result = jQuery.parseJSON(data.responseText);
@@ -64,8 +71,8 @@ FileList={
 		resetFileActionPanel();
 	},
 	remove:function(name){
-		$('tr[data-file="'+name+'"] td.filename').draggable('destroy');
-		$('tr[data-file="'+name+'"]').remove();
+		$('tr').filterAttr('data-file',name).find('td.filename').draggable('destroy');
+		$('tr').filterAttr('data-file',name).remove();
 		if($('tr[data-file]').length==0){
 			$('#emptyfolder').show();
 			$('.file_upload_filename').addClass('highlight');
@@ -101,7 +108,7 @@ FileList={
 		$('.file_upload_filename').removeClass('highlight');
 	},
 	loadingDone:function(name){
-		var tr=$('tr[data-file="'+name+'"]');
+		var tr=$('tr').filterAttr('data-file',name);
 		tr.data('loading',false);
 		var mime=tr.data('mime');
 		tr.attr('data-mime',mime);
@@ -111,13 +118,13 @@ FileList={
 		tr.find('td.filename').draggable(dragOptions);
 	},
 	isLoading:function(name){
-		return $('tr[data-file="'+name+'"]').data('loading');
+		return $('tr').filterAttr('data-file',name).data('loading');
 	},
 	rename:function(name){
-		var tr=$('tr[data-file="'+name+'"]');
+		var tr=$('tr').filterAttr('data-file',name);
 		tr.data('renaming',true);
 		var td=tr.children('td.filename');
-		var input=$('<input value="'+name+'" class="filename"></input>');
+		var input=$('<input class="filename"></input>').val(name);
 		var form=$('<form action="#"></form>')
 		form.append(input);
 		td.children('a.name').text('');
@@ -143,7 +150,7 @@ FileList={
 			}
 			$.ajax({
 				url: 'ajax/rename.php',
-				data: "dir="+$('#dir').val()+"&newname="+encodeURIComponent(newname)+"&file="+encodeURIComponent(name)
+				data: { dir : $('#dir').val(), newname: newname, file: name }
 			});
 		});
 		form.click(function(event){
@@ -165,9 +172,10 @@ FileList={
 			files=[files];
 		}
 		$.each(files,function(index,file){
-			$('tr[data-file="'+file+'"]').hide();
-			$('tr[data-file="'+file+'"]').find('input[type="checkbox"]').removeAttr('checked');
-			$('tr[data-file="'+file+'"]').removeClass('selected');
+			var files = $('tr').filterAttr('data-file',file);
+			files.hide();
+			files.find('input[type="checkbox"]').removeAttr('checked');
+			files.removeClass('selected');
 		});
 		procesSelection();
 		FileList.deleteCanceled=false;
@@ -208,7 +216,7 @@ $(document).ready(function(){
 		if($('#notification').data('deletefile'))
 		{
 			$.each(FileList.deleteFiles,function(index,file){
-				$('tr[data-file="'+file+'"]').show();
+				$('tr').filterAttr('data-file',file).show();
 // 			alert(file);
 			});
 			FileList.deleteCanceled=true;
diff --git a/files/js/files.js b/files/js/files.js
index 902c5e54934faa45b4cdc4946c406ad3b5f9a067..4eaa098241b4c24448c43a1629c6405f78a0319c 100644
--- a/files/js/files.js
+++ b/files/js/files.js
@@ -1,4 +1,9 @@
 $(document).ready(function() {
+	$('#fileList tr').each(function(){
+		//little hack to set unescape filenames in attribute
+		$(this).attr('data-file',decodeURIComponent($(this).attr('data-file')));
+	});
+		
 	if($('tr[data-file]').length==0){
 		$('.file_upload_filename').addClass('highlight');
 	}
@@ -64,7 +69,7 @@ $(document).ready(function() {
 			}
 			procesSelection();
 		} else {
-			var filename=$(this).parent().parent().data('file');
+			var filename=$(this).parent().parent().attr('data-file');
 			if(!FileList.isLoading(filename)){
 				var mime=$(this).parent().parent().data('mime');
 				var type=$(this).parent().parent().data('type');
@@ -158,7 +163,7 @@ $(document).ready(function() {
 	});
 
 	$('.file_upload_start').live('change',function(){
-		var form=$(this).parent().parent();
+		var form=$(this).closest('form');
 		var uploadId=form.attr('data-upload-id');
 		var files=this.files;
 		var target=form.children('iframe');
@@ -185,9 +190,9 @@ $(document).ready(function() {
 					if(response[0] != undefined && response[0].status == 'success'){
 						for(var i=0;i<response.length;i++){
 							var file=response[i];
-							$('tr[data-file="'+file.name+'"]').data('mime',file.mime);
+							$('tr').filterAttr('data-file',file.name).data('mime',file.mime);
 							if(size=='Pending'){
-								$('tr[data-file='+file.name+'] td.filesize').text(file.size);
+								$('tr').filterAttr('data-file',file.name).find('td.filesize').text(file.size);
 							}
 							FileList.loadingDone(file.name);
 						}
@@ -255,32 +260,82 @@ $(document).ready(function() {
 		text=text.substr(0,text.length-6)+'...';
 		crumb.text(text);
 	}
+	
+	$(window).click(function(){
+		$('#new>ul').hide();
+		$('#new').removeClass('active');
+		$('button.file_upload_filename').removeClass('active');
+		$('#new li').each(function(i,element){
+			if($(element).children('p').length==0){
+				$(element).children('input').remove();
+				$(element).append('<p>'+$(element).data('text')+'</p>');
+			}
+		});
+	});
+	$('#new').click(function(event){
+		event.stopPropagation();
+	});
+	$('#new>a').click(function(){
+		$('#new>ul').toggle();
+		$('#new').toggleClass('active');
+		$('button.file_upload_filename').toggleClass('active');
+	});
+	$('#new li').click(function(){
+		if($(this).children('p').length==0){
+			return;
+		}
+		
+		$('#new li').each(function(i,element){
+			if($(element).children('p').length==0){
+				$(element).children('input').remove();
+				$(element).append('<p>'+$(element).data('text')+'</p>');
+			}
+		});
+		
+		var type=$(this).data('type');
+		var text=$(this).children('p').text();
+		$(this).data('text',text);
+		$(this).children('p').remove();
+		var input=$('<input>');
+		$(this).append(input);
+		input.focus();
+		input.change(function(){
+			var name=$(this).val();
+			switch(type){
+				case 'file':
+					$.ajax({
+						url: OC.filePath('files','ajax','newfile.php'),
+						data: "dir="+encodeURIComponent($('#dir').val())+"&filename="+encodeURIComponent(name)+'&content=%20%0A',
+						complete: function(data){boolOperationFinished(data, function(){
+							var date=new Date();
+							FileList.addFile(name,0,date);
+							var tr=$('tr').filterAttr('data-file',name);
+							tr.data('mime','text/plain');
+							getMimeIcon('text/plain',function(path){
+								tr.find('td.filename').attr('style','background-image:url('+path+')');
+							});
+						});}
+					});
+					break;
+				case 'folder':
+					$.ajax({
+						url: OC.filePath('files','ajax','newfolder.php'),
+						data: "dir="+encodeURIComponent($('#dir').val())+"&foldername="+encodeURIComponent(name),
+						complete: function(data){boolOperationFinished(data, function(){
+							var date=new Date();
+							FileList.addDir(name,0,date);
+						});}
+					});
+					break;
+			}
+			var li=$(this).parent();
+			$(this).remove();
+			li.append('<p>'+li.data('text')+'</p>');
+			$('#new>a').click();
+		});
+	});
 });
 
-var adjustNewFolderSize = function() {
-	if($('#file_newfolder_name').val() != '') {
-		splitSize($('#file_newfolder_name'),$('#file_newfolder_submit'));
-		$('#file_newfolder_name').unbind('keyup', adjustNewFolderSize);
-	};
-}
-
-function splitSize(existingEl, appearingEl) {
-	nw = parseInt($(existingEl).css('width')) - parseInt($(appearingEl).css('width'));
-	$(existingEl).css('width', nw + 'px');
-	$(appearingEl).fadeIn(250);
-}
-
-function unsplitSize(stayingEl, vanishingEl) {
-	nw = parseInt($(stayingEl).css('width')) + parseInt($(vanishingEl).css('width'));
-	$(stayingEl).css('width', nw + 'px');
-	$(vanishingEl).fadeOut(250);
-}
-
-function resetFileActionPanel() {
-	$('#file_action_panel form').css({"display":"none"});
-	$('#file_action_panel').attr('activeAction', false);
-}
-
 function boolOperationFinished(data, callback) {
 	result = jQuery.parseJSON(data.responseText);
 	if(result.status == 'success'){
@@ -343,7 +398,7 @@ var folderDropOptions={
 			url: 'ajax/move.php',
 		data: "dir="+dir+"&file="+file+'&target='+dir+'/'+target,
 		complete: function(data){boolOperationFinished(data, function(){
-			var el=$('#fileList tr[data-file="'+file+'"] td.filename');
+			var el = $('#fileList tr').filterAttr('data-file',file).find('td.filename');
 			el.draggable('destroy');
 			FileList.remove(file);
 		});}
@@ -445,7 +500,7 @@ function getSelectedFiles(property){
 	var files=[];
 	elements.each(function(i,element){
 		var file={
-			name:$(element).data('file'),
+			name:$(element).attr('data-file'),
 			mime:$(element).data('mime'),
 			type:$(element).data('type'),
 			size:$(element).data('size'),
diff --git a/files/templates/index.php b/files/templates/index.php
index a63f6e62b638fdc1442f23e435a138d4c22487b2..722c38e477694475beb09e372875a0739c218b33 100644
--- a/files/templates/index.php
+++ b/files/templates/index.php
@@ -2,20 +2,27 @@
 	<?php echo($_['breadcrumb']); ?>
 	<?php if (!isset($_['readonly']) || !$_['readonly']) {?>
 	<div class="actions">
-		<form data-upload-id='1' class="file_upload_form" action="ajax/upload.php" method="post" enctype="multipart/form-data" target="file_upload_target_1">
-			<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $_['uploadMaxFilesize'] ?>" id="max_upload">
-			<input type="hidden" class="max_human_file_size" value="(max <?php echo $_['uploadMaxHumanFilesize']; ?>)">
-			<input type="hidden" name="dir" value="<?php echo $_['dir'] ?>" id="dir">
-			<div class="file_upload_wrapper svg">
-				<input type="submit" class="file_upload_filename" value="<?php echo $l->t('Upload'); ?>"/>
+		<div id='new' class='button'>
+			<a>
+				<?php echo $l->t('New');?>
+			</a>
+			<ul class="popup popupTop">
+				<li style="background-image:url('<?php echo mimetype_icon('text/plain') ?>')" data-type='file'><p><?php echo $l->t('Text file');?></p></li>
+				<li style="background-image:url('<?php echo mimetype_icon('dir') ?>')" data-type='folder'><p><?php echo $l->t('Folder');?></p></li>
+<!-- 				<li style="background-image:url('<?php echo mimetype_icon('dir') ?>')" data-type='web'><p><?php echo $l->t('From the web');?></p></li> -->
+			</ul>
+		</div>
+		<div class="file_upload_wrapper svg">
+			<form data-upload-id='1' class="file_upload_form" action="ajax/upload.php" method="post" enctype="multipart/form-data" target="file_upload_target_1">
+				<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $_['uploadMaxFilesize'] ?>" id="max_upload">
+				<input type="hidden" class="max_human_file_size" value="(max <?php echo $_['uploadMaxHumanFilesize']; ?>)">
+				<input type="hidden" name="dir" value="<?php echo $_['dir'] ?>" id="dir">
+				<button class="file_upload_filename"><img class='svg action' alt="Upload" src="<?php echo image_path("core", "actions/upload.svg"); ?>" /></button>
 				<input class="file_upload_start" type="file" name='files[]'/>
-				<a href="#" class="file_upload_button_wrapper" onclick="return false;" title="<?php echo  'max. '.$_['uploadMaxHumanFilesize'] ?>"></a>
-			</div>
-			<iframe name="file_upload_target_1" class='file_upload_target' src=""></iframe>
-		</form>
-		<form id="file_newfolder_form">
-			<input class="svg" type="text" name="file_newfolder_name" id="file_newfolder_name" value="" placeholder="<?php echo $l->t('New Folder')?>" />
-		</form>
+					<a href="#" class="file_upload_button_wrapper" onclick="return false;" title="<?php echo $l->t('Upload'); echo  ' max. '.$_['uploadMaxHumanFilesize'] ?>"></a>
+				<iframe name="file_upload_target_1" class='file_upload_target' src=""></iframe>
+			</form>
+		</div>
 	</div>
 	<div id="file_action_panel">
 	</div>
diff --git a/files/templates/part.list.php b/files/templates/part.list.php
index 6bf5efe2fb2c6c0101bba8e29704da64e5e4aa9c..46830ba3a37cf8311c56ba80d222e6ab55d9e04c 100644
--- a/files/templates/part.list.php
+++ b/files/templates/part.list.php
@@ -5,7 +5,7 @@
 			$relative_modified_date = relative_modified_date($file['mtime']);
 			$relative_date_color = round((time()-$file['mtime'])/60/60/24*14); // the older the file, the brighter the shade of grey; days*14
 			if($relative_date_color>200) $relative_date_color = 200; ?>
-			<tr data-file="<?php echo $file['name'];?>" data-type="<?php echo ($file['type'] == 'dir')?'dir':'file'?>" data-mime="<?php echo $file['mime']?>" data-size='<?php echo $file['size'];?>'>
+			<tr data-file="<?php echo str_replace('+','%20',urlencode($file['name']));?>" data-type="<?php echo ($file['type'] == 'dir')?'dir':'file'?>" data-mime="<?php echo $file['mime']?>" data-size='<?php echo $file['size'];?>'>
 				<td class="filename svg" style="background-image:url(<?php if($file['type'] == 'dir') echo mimetype_icon('dir'); else echo mimetype_icon($file['mime']); ?>)">
 					<?php if(!isset($_['readonly']) || !$_['readonly']) { ?><input type="checkbox" /><?php } ?>
 					<a class="name" href="<?php if($file['type'] == 'dir') echo $_['baseURL'].$file['directory'].'/'.$file['name']; else echo $_['downloadURL'].urlencode($file['directory']).'/'.urlencode($file['name']); ?>" title="">
diff --git a/lib/app.php b/lib/app.php
index 30ebcf032b3d910feba016633cb6162ed49bccae..d3d998657622e8785fe01f62bdca4d46e0aa5200 100644
--- a/lib/app.php
+++ b/lib/app.php
@@ -100,11 +100,11 @@ class OC_App{
 	}
 
 	/**
-	 * @brief enables an app
+	 * @brief disables an app
 	 * @param $app app
 	 * @returns true/false
 	 *
-	 * This function set an app as enabled in appconfig.
+	 * This function set an app as disabled in appconfig.
 	 */
 	public static function disable( $app ){
 		OC_Appconfig::setValue( $app, 'enabled', 'no' );
diff --git a/lib/base.php b/lib/base.php
index d5fff1e0a7450b0a10576425ac6077bc58e5621e..c52b4493e01bb6e4845ee46923a55ed9be2f6ea0 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -77,6 +77,9 @@ class OC{
 		// set some stuff
 		//ob_start();
 		error_reporting(E_ALL | E_STRICT);
+		if (defined('DEBUG') && DEBUG){
+			ini_set('display_errors', 1);
+		}
 
 		date_default_timezone_set('Europe/Berlin');
 		ini_set('arg_separator.output','&amp;');
diff --git a/lib/connector/sabre/file.php b/lib/connector/sabre/file.php
index b049f39c171aa8f39f686c1d268a1e56b3730059..98661dbb184a4f53f833f04b81521fdfbcd51615 100644
--- a/lib/connector/sabre/file.php
+++ b/lib/connector/sabre/file.php
@@ -29,7 +29,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
 	 */
 	public function get() {
 
-		return OC_Filesystem::file_get_contents($this->path);
+		return OC_Filesystem::fopen($this->path,'r');
 
 	}
 
diff --git a/lib/db.php b/lib/db.php
index 421b08c2320cb9376a0b8842c62ba4c8036e072a..c059f5ab3366e696b0b7103909984ba7f694a3c3 100644
--- a/lib/db.php
+++ b/lib/db.php
@@ -224,6 +224,7 @@ class OC_DB {
 
 	/**
 	 * @brief gets last value of autoincrement
+	 * @param $table string The optional table name (will replace *PREFIX*) and add sequence suffix
 	 * @returns id
 	 *
 	 * MDB2 lastInsertID()
@@ -231,9 +232,14 @@ class OC_DB {
 	 * Call this method right after the insert command or other functions may
 	 * cause trouble!
 	 */
-	public static function insertid(){
+	public static function insertid($table=null){
 		self::connect();
-		return self::$connection->lastInsertId();
+		if($table !== null){
+			$prefix = OC_Config::getValue( "dbtableprefix", "oc_" );
+			$suffix = OC_Config::getValue( "dbsequencesuffix", "_id_seq" );
+			$table = str_replace( '*PREFIX*', $prefix, $table );
+		}
+		return self::$connection->lastInsertId($table.$suffix);
 	}
 
 	/**
diff --git a/lib/filestorage/local.php b/lib/filestorage/local.php
index 01523b6b0b3647a6f65fb46b5343623dd1ba0988..9e29f85071a22d815928eb4bcdb58f44e8ef789e 100644
--- a/lib/filestorage/local.php
+++ b/lib/filestorage/local.php
@@ -84,6 +84,11 @@ class OC_Filestorage_Local extends OC_Filestorage{
 		return $return;
 	}
 	public function rename($path1,$path2){
+		if(! $this->file_exists($path1)){
+			OC_Log::write('core','unable to rename, file does not exists : '.$path1,OC_Log::ERROR);
+			return false;
+		}
+
 		if($return=rename($this->datadir.$path1,$this->datadir.$path2)){
 			$this->clearFolderSizeCache($path1);
 			$this->clearFolderSizeCache($path2);
diff --git a/lib/hook.php b/lib/hook.php
index b069a7da6c0f36988fb270b4935107190025cc97..83a16106bf0909e03eaadd977d5d66236714242e 100644
--- a/lib/hook.php
+++ b/lib/hook.php
@@ -20,7 +20,7 @@ class OC_Hook{
 	 * TODO: write example
 	 */
 	static public function connect( $signalclass, $signalname, $slotclass, $slotname ){
-		// Cerate the data structure
+		// Create the data structure
 		if( !array_key_exists( $signalclass, self::$registered )){
 			self::$registered[$signalclass] = array();
 		}
diff --git a/lib/log.php b/lib/log.php
index 98333be54fee5fcadeb73246eb75ad5d1775ddd5..446ddd48848c3809485245f11f78fb51624e0566 100644
--- a/lib/log.php
+++ b/lib/log.php
@@ -59,6 +59,9 @@ class OC_Log{
 			return array();
 		}
 		$fh=fopen($logFile,'r');
+		if($fh === false){ // Unable to read log file!
+			return array();
+		}
 		while(!feof($fh)){
 			$line=fgets($fh);
 			if($line){
diff --git a/lib/ocsclient.php b/lib/ocsclient.php
index 654c5e0527b511af36a97a6593a6eee1314f9061..072fd236fee18a70d5186a78d08febb4026e244a 100644
--- a/lib/ocsclient.php
+++ b/lib/ocsclient.php
@@ -108,6 +108,7 @@ class OC_OCSClient{
 
 		$xml=@file_get_contents($url);
 		if($xml==FALSE){
+			OC_Log::write('core','Unable to parse OCS content',OC_Log::FATAL);
 			return NULL;
 		}
 		$data=simplexml_load_string($xml);
@@ -143,6 +144,7 @@ class OC_OCSClient{
 		$kbe=array();
 		$xml=@file_get_contents($url);
 		if($xml==FALSE){
+			OC_Log::write('core','Unable to parse knowledgebase content',OC_Log::FATAL);
 			return NULL;
 		}
 		$data=simplexml_load_string($xml);
diff --git a/lib/setup.php b/lib/setup.php
index 2dcedb9b82067a353f46bb7178728376628392d1..e2d56ddaf4ad2f78824c0750ce96caf2aaad170f 100644
--- a/lib/setup.php
+++ b/lib/setup.php
@@ -82,7 +82,7 @@ class OC_Setup {
 				$dbpass = $options['dbpass'];
 				$dbname = $options['dbname'];
 				$dbhost = $options['dbhost'];
-				$dbtableprefix = OC_Config::getValue('dbtableprefix','oc_');
+				$dbtableprefix = $options['dbtableprefix'];
 				OC_Config::setValue('dbname', $dbname);
 				OC_Config::setValue('dbhost', $dbhost);
 				OC_Config::setValue('dbtableprefix', $dbtableprefix);
@@ -135,7 +135,7 @@ class OC_Setup {
 				$dbpass = $options['dbpass'];
 				$dbname = $options['dbname'];
 				$dbhost = $options['dbhost'];
-				$dbtableprefix = OC_Config::getValue('dbtableprefix','oc_');
+				$dbtableprefix = $options['dbtableprefix'];
 				OC_CONFIG::setValue('dbname', $dbname);
 				OC_CONFIG::setValue('dbhost', $dbhost);
 				OC_CONFIG::setValue('dbtableprefix', $dbtableprefix);
diff --git a/lib/template.php b/lib/template.php
index 440b62003e77dc6343a9ccac57de462c06e6f427..d1439199e1ee23fb2807d08940bf40eed7eca00f 100644
--- a/lib/template.php
+++ b/lib/template.php
@@ -98,6 +98,33 @@ function relative_modified_date($timestamp) {
 	else { return $l->t('years ago'); }
 }
 
+function html_select_options($options, $selected, $params=array()) {
+	if (!is_array($selected)){
+		$selected=array($selected);
+	}
+	if (isset($params['combine']) && $params['combine']){
+		$options = array_combine($options, $options);
+	}
+	$value_name = $label_name = false;
+	if (isset($params['value'])){
+		$value_name = $params['value'];
+	}
+	if (isset($params['label'])){
+		$label_name = $params['label'];
+	}
+	$html = '';
+	foreach($options as $value => $label){
+		if ($value_name && is_array($label)){
+			$value = $label[$value_name];
+		}
+		if ($label_name && is_array($label)){
+			$label = $label[$label_name];
+		}
+		$select = in_array($value, $selected) ? ' selected="selected"' : '';
+		$html .= '<option value="' . $value . '"' . $select . '>' . $label . '</option>';
+	}
+	return $html;
+}
 
 /**
  * This class provides the templates for owncloud.
diff --git a/settings/templates/help.php b/settings/templates/help.php
index 4e3cdd7b908cdc68d0167c3f474770703453812e..754bf8b6376d84357acd7e4691368cb76bbe4222 100644
--- a/settings/templates/help.php
+++ b/settings/templates/help.php
@@ -9,7 +9,10 @@
 	<?php
 		$url=OC_Helper::linkTo( "settings", "help.php" ).'?page=';
 		$pageNavi=OC_Util::getPageNavi($_['pagecount'],$_['page'],$url);
-		$pageNavi->printPage();
+		if($pageNavi)
+		{
+			$pageNavi->printPage();
+		}
 	?>
 </diV>
 <?php if(is_null($_["kbe"])):?>