diff --git a/apps/files/appinfo/remote.php b/apps/files/appinfo/remote.php
index 6c92cc80b69830bc46fa6b4889a5df5140e0b283..a14441410991d986188c636cd62c1954e4b58b65 100644
--- a/apps/files/appinfo/remote.php
+++ b/apps/files/appinfo/remote.php
@@ -43,7 +43,8 @@ $server->httpRequest = $requestBackend;
 $server->setBaseUri($baseuri);
 
 // Load plugins
-$server->addPlugin(new Sabre_DAV_Auth_Plugin($authBackend, 'ownCloud'));
+$defaults = new OC_Defaults();
+$server->addPlugin(new Sabre_DAV_Auth_Plugin($authBackend, $defaults->getName()));
 $server->addPlugin(new Sabre_DAV_Locks_Plugin($lockBackend));
 $server->addPlugin(new Sabre_DAV_Browser_Plugin(false)); // Show something in the Browser, but no upload
 $server->addPlugin(new OC_Connector_Sabre_QuotaPlugin());
diff --git a/apps/files_external/3rdparty/google-api-php-client/LICENSE b/apps/files_external/3rdparty/google-api-php-client/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..a148ba564bf25ee9234bc1a71d6d807ad8cf763e
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/LICENSE
@@ -0,0 +1,203 @@
+Apache License
+Version 2.0, January 2004
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction,
+and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by
+the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all
+other entities that control, are controlled by, or are under common
+control with that entity. For the purposes of this definition,
+"control" means (i) the power, direct or indirect, to cause the
+direction or management of such entity, whether by contract or
+otherwise, or (ii) ownership of fifty percent (50%) or more of the
+outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity
+exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications,
+including but not limited to software source code, documentation
+source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical
+transformation or translation of a Source form, including but
+not limited to compiled object code, generated documentation,
+and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or
+Object form, made available under the License, as indicated by a
+copyright notice that is included in or attached to the work
+(an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object
+form, that is based on (or derived from) the Work and for which the
+editorial revisions, annotations, elaborations, or other modifications
+represent, as a whole, an original work of authorship. For the purposes
+of this License, Derivative Works shall not include works that remain
+separable from, or merely link (or bind by name) to the interfaces of,
+the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including
+the original version of the Work and any modifications or additions
+to that Work or Derivative Works thereof, that is intentionally
+submitted to Licensor for inclusion in the Work by the copyright owner
+or by an individual or Legal Entity authorized to submit on behalf of
+the copyright owner. For the purposes of this definition, "submitted"
+means any form of electronic, verbal, or written communication sent
+to the Licensor or its representatives, including but not limited to
+communication on electronic mailing lists, source code control systems,
+and issue tracking systems that are managed by, or on behalf of, the
+Licensor for the purpose of discussing and improving the Work, but
+excluding communication that is conspicuously marked or otherwise
+designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity
+on behalf of whom a Contribution has been received by Licensor and
+subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+this License, each Contributor hereby grants to You a perpetual,
+worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+copyright license to reproduce, prepare Derivative Works of,
+publicly display, publicly perform, sublicense, and distribute the
+Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+this License, each Contributor hereby grants to You a perpetual,
+worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+(except as stated in this section) patent license to make, have made,
+use, offer to sell, sell, import, and otherwise transfer the Work,
+where such license applies only to those patent claims licensable
+by such Contributor that are necessarily infringed by their
+Contribution(s) alone or by combination of their Contribution(s)
+with the Work to which such Contribution(s) was submitted. If You
+institute patent litigation against any entity (including a
+cross-claim or counterclaim in a lawsuit) alleging that the Work
+or a Contribution incorporated within the Work constitutes direct
+or contributory patent infringement, then any patent licenses
+granted to You under this License for that Work shall terminate
+as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+Work or Derivative Works thereof in any medium, with or without
+modifications, and in Source or Object form, provided that You
+meet the following conditions:
+
+(a) You must give any other recipients of the Work or
+Derivative Works a copy of this License; and
+
+(b) You must cause any modified files to carry prominent notices
+stating that You changed the files; and
+
+(c) You must retain, in the Source form of any Derivative Works
+that You distribute, all copyright, patent, trademark, and
+attribution notices from the Source form of the Work,
+excluding those notices that do not pertain to any part of
+the Derivative Works; and
+
+(d) If the Work includes a "NOTICE" text file as part of its
+distribution, then any Derivative Works that You distribute must
+include a readable copy of the attribution notices contained
+within such NOTICE file, excluding those notices that do not
+pertain to any part of the Derivative Works, in at least one
+of the following places: within a NOTICE text file distributed
+as part of the Derivative Works; within the Source form or
+documentation, if provided along with the Derivative Works; or,
+within a display generated by the Derivative Works, if and
+wherever such third-party notices normally appear. The contents
+of the NOTICE file are for informational purposes only and
+do not modify the License. You may add Your own attribution
+notices within Derivative Works that You distribute, alongside
+or as an addendum to the NOTICE text from the Work, provided
+that such additional attribution notices cannot be construed
+as modifying the License.
+
+You may add Your own copyright statement to Your modifications and
+may provide additional or different license terms and conditions
+for use, reproduction, or distribution of Your modifications, or
+for any such Derivative Works as a whole, provided Your use,
+reproduction, and distribution of the Work otherwise complies with
+the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+any Contribution intentionally submitted for inclusion in the Work
+by You to the Licensor shall be under the terms and conditions of
+this License, without any additional terms or conditions.
+Notwithstanding the above, nothing herein shall supersede or modify
+the terms of any separate license agreement you may have executed
+with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+names, trademarks, service marks, or product names of the Licensor,
+except as required for reasonable and customary use in describing the
+origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+agreed to in writing, Licensor provides the Work (and each
+Contributor provides its Contributions) on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+implied, including, without limitation, any warranties or conditions
+of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+PARTICULAR PURPOSE. You are solely responsible for determining the
+appropriateness of using or redistributing the Work and assume any
+risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+whether in tort (including negligence), contract, or otherwise,
+unless required by applicable law (such as deliberate and grossly
+negligent acts) or agreed to in writing, shall any Contributor be
+liable to You for damages, including any direct, indirect, special,
+incidental, or consequential damages of any character arising as a
+result of this License or out of the use or inability to use the
+Work (including but not limited to damages for loss of goodwill,
+work stoppage, computer failure or malfunction, or any and all
+other commercial damages or losses), even if such Contributor
+has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+the Work or Derivative Works thereof, You may choose to offer,
+and charge a fee for, acceptance of support, warranty, indemnity,
+or other liability obligations and/or rights consistent with this
+License. However, in accepting such obligations, You may act only
+on Your own behalf and on Your sole responsibility, not on behalf
+of any other Contributor, and only if You agree to indemnify,
+defend, and hold each Contributor harmless for any liability
+incurred by, or claims asserted against, such Contributor by reason
+of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following
+boilerplate notice, with the fields enclosed by brackets "[]"
+replaced with your own identifying information. (Don't include
+the brackets!) The text should be enclosed in the appropriate
+comment syntax for the file format. We also recommend that a
+file or class name and description of purpose be included on the
+same "printed page" as the copyright notice for easier
+identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
diff --git a/apps/files_external/3rdparty/google-api-php-client/NOTICE b/apps/files_external/3rdparty/google-api-php-client/NOTICE
new file mode 100644
index 0000000000000000000000000000000000000000..22d7cb59867c301cbe1d33aa661628d5cf879dce
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/NOTICE
@@ -0,0 +1,4 @@
+This product contains the following libraries:
+
+XRDS-Simple library from http://code.google.com/p/diso/
+Apache License 2.0
diff --git a/apps/files_external/3rdparty/google-api-php-client/README b/apps/files_external/3rdparty/google-api-php-client/README
new file mode 100644
index 0000000000000000000000000000000000000000..42c42c0d5c73dcefc72f2d17097cfc6894674972
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/README
@@ -0,0 +1,40 @@
+Google APIs Client Library for PHP
+=====================================
+
+== Description
+The Google API Client Library enables you to work with Google APIs such as Google+, Drive, Tasks, or Latitude on your server.
+
+Requirements:
+  PHP 5.2.x or higher [http://www.php.net/]
+  PHP Curl extension [http://www.php.net/manual/en/intro.curl.php]
+  PHP JSON extension [http://php.net/manual/en/book.json.php]
+
+Project page:
+  http://code.google.com/p/google-api-php-client
+
+OAuth 2 instructions:
+  http://code.google.com/p/google-api-php-client/wiki/OAuth2
+
+Report a defect or feature request here:
+  http://code.google.com/p/google-api-php-client/issues/entry
+
+Subscribe to project updates in your feed reader:
+  http://code.google.com/feeds/p/google-api-php-client/updates/basic
+
+Supported sample applications:
+  http://code.google.com/p/google-api-php-client/wiki/Samples
+
+== Basic Example
+  <?php
+  require_once 'path/to/src/Google_Client.php';
+  require_once 'path/to/src/contrib/apiBooksService.php';
+
+  $client = new Google_Client();
+  $service = new Google_BooksService($client);
+
+  $optParams = array('filter' => 'free-ebooks');
+  $results = $service->volumes->listVolumes('Henry David Thoreau', $optParams);
+
+  foreach ($results['items'] as $item) {
+    print($item['volumeInfo']['title'] . '<br>');
+  }
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/Google_Client.php b/apps/files_external/3rdparty/google-api-php-client/src/Google_Client.php
new file mode 100644
index 0000000000000000000000000000000000000000..498d3a8e9dd284267226e541b1fdc30d02aa16d8
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/Google_Client.php
@@ -0,0 +1,462 @@
+<?php
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Check for the required json and curl extensions, the Google APIs PHP Client
+// won't function without them.
+if (! function_exists('curl_init')) {
+  throw new Exception('Google PHP API Client requires the CURL PHP extension');
+}
+
+if (! function_exists('json_decode')) {
+  throw new Exception('Google PHP API Client requires the JSON PHP extension');
+}
+
+if (! function_exists('http_build_query')) {
+  throw new Exception('Google PHP API Client requires http_build_query()');
+}
+
+if (! ini_get('date.timezone') && function_exists('date_default_timezone_set')) {
+  date_default_timezone_set('UTC');
+}
+
+// hack around with the include paths a bit so the library 'just works'
+set_include_path(dirname(__FILE__) . PATH_SEPARATOR . get_include_path());
+
+require_once "config.php";
+// If a local configuration file is found, merge it's values with the default configuration
+if (file_exists(dirname(__FILE__)  . '/local_config.php')) {
+  $defaultConfig = $apiConfig;
+  require_once (dirname(__FILE__)  . '/local_config.php');
+  $apiConfig = array_merge($defaultConfig, $apiConfig);
+}
+
+// Include the top level classes, they each include their own dependencies
+require_once 'service/Google_Model.php';
+require_once 'service/Google_Service.php';
+require_once 'service/Google_ServiceResource.php';
+require_once 'auth/Google_AssertionCredentials.php';
+require_once 'auth/Google_Signer.php';
+require_once 'auth/Google_P12Signer.php';
+require_once 'service/Google_BatchRequest.php';
+require_once 'external/URITemplateParser.php';
+require_once 'auth/Google_Auth.php';
+require_once 'cache/Google_Cache.php';
+require_once 'io/Google_IO.php';
+require_once('service/Google_MediaFileUpload.php');
+
+/**
+ * The Google API Client
+ * http://code.google.com/p/google-api-php-client/
+ *
+ * @author Chris Chabot <chabotc@google.com>
+ * @author Chirag Shah <chirags@google.com>
+ */
+class Google_Client {
+  /**
+   * @static
+   * @var Google_Auth $auth
+   */
+  static $auth;
+
+  /**
+   * @static
+   * @var Google_IO $io
+   */
+  static $io;
+
+  /**
+   * @static
+   * @var Google_Cache $cache
+   */
+  static $cache;
+
+  /**
+   * @static
+   * @var boolean $useBatch
+   */
+  static $useBatch = false;
+
+  /** @var array $scopes */
+  protected $scopes = array();
+
+  /** @var bool $useObjects */
+  protected $useObjects = false;
+
+  // definitions of services that are discovered.
+  protected $services = array();
+
+  // Used to track authenticated state, can't discover services after doing authenticate()
+  private $authenticated = false;
+
+  public function __construct($config = array()) {
+    global $apiConfig;
+    $apiConfig = array_merge($apiConfig, $config);
+    self::$cache = new $apiConfig['cacheClass']();
+    self::$auth = new $apiConfig['authClass']();
+    self::$io = new $apiConfig['ioClass']();
+  }
+
+  /**
+   * Add a service
+   */
+  public function addService($service, $version = false) {
+    global $apiConfig;
+    if ($this->authenticated) {
+      throw new Google_Exception('Cant add services after having authenticated');
+    }
+    $this->services[$service] = array();
+    if (isset($apiConfig['services'][$service])) {
+      // Merge the service descriptor with the default values
+      $this->services[$service] = array_merge($this->services[$service], $apiConfig['services'][$service]);
+    }
+  }
+
+  public function authenticate($code = null) {
+    $service = $this->prepareService();
+    $this->authenticated = true;
+    return self::$auth->authenticate($service, $code);
+  }
+
+  /**
+   * @return array
+   * @visible For Testing
+   */
+  public function prepareService() {
+    $service = array();
+    $scopes = array();
+    if ($this->scopes) {
+      $scopes = $this->scopes;
+    } else {
+      foreach ($this->services as $key => $val) {
+        if (isset($val['scope'])) {
+          if (is_array($val['scope'])) {
+            $scopes = array_merge($val['scope'], $scopes);
+          } else {
+            $scopes[] = $val['scope'];
+          }
+        } else {
+          $scopes[] = 'https://www.googleapis.com/auth/' . $key;
+        }
+        unset($val['discoveryURI']);
+        unset($val['scope']);
+        $service = array_merge($service, $val);
+      }
+    }
+    $service['scope'] = implode(' ', $scopes);
+    return $service;
+  }
+
+  /**
+   * Set the OAuth 2.0 access token using the string that resulted from calling authenticate()
+   * or Google_Client#getAccessToken().
+   * @param string $accessToken JSON encoded string containing in the following format:
+   * {"access_token":"TOKEN", "refresh_token":"TOKEN", "token_type":"Bearer",
+   *  "expires_in":3600, "id_token":"TOKEN", "created":1320790426}
+   */
+  public function setAccessToken($accessToken) {
+    if ($accessToken == null || 'null' == $accessToken) {
+      $accessToken = null;
+    }
+    self::$auth->setAccessToken($accessToken);
+  }
+
+  /**
+   * Set the type of Auth class the client should use.
+   * @param string $authClassName
+   */
+  public function setAuthClass($authClassName) {
+    self::$auth = new $authClassName();
+  }
+
+  /**
+   * Construct the OAuth 2.0 authorization request URI.
+   * @return string
+   */
+  public function createAuthUrl() {
+    $service = $this->prepareService();
+    return self::$auth->createAuthUrl($service['scope']);
+  }
+
+  /**
+   * Get the OAuth 2.0 access token.
+   * @return string $accessToken JSON encoded string in the following format:
+   * {"access_token":"TOKEN", "refresh_token":"TOKEN", "token_type":"Bearer",
+   *  "expires_in":3600,"id_token":"TOKEN", "created":1320790426}
+   */
+  public function getAccessToken() {
+    $token = self::$auth->getAccessToken();
+    return (null == $token || 'null' == $token) ? null : $token;
+  }
+
+  /**
+   * Returns if the access_token is expired.
+   * @return bool Returns True if the access_token is expired.
+   */
+  public function isAccessTokenExpired() {
+    return self::$auth->isAccessTokenExpired();
+  }
+
+  /**
+   * Set the developer key to use, these are obtained through the API Console.
+   * @see http://code.google.com/apis/console-help/#generatingdevkeys
+   * @param string $developerKey
+   */
+  public function setDeveloperKey($developerKey) {
+    self::$auth->setDeveloperKey($developerKey);
+  }
+
+  /**
+   * Set OAuth 2.0 "state" parameter to achieve per-request customization.
+   * @see http://tools.ietf.org/html/draft-ietf-oauth-v2-22#section-3.1.2.2
+   * @param string $state
+   */
+  public function setState($state) {
+    self::$auth->setState($state);
+  }
+
+  /**
+   * @param string $accessType Possible values for access_type include:
+   *  {@code "offline"} to request offline access from the user. (This is the default value)
+   *  {@code "online"} to request online access from the user.
+   */
+  public function setAccessType($accessType) {
+    self::$auth->setAccessType($accessType);
+  }
+
+  /**
+   * @param string $approvalPrompt Possible values for approval_prompt include:
+   *  {@code "force"} to force the approval UI to appear. (This is the default value)
+   *  {@code "auto"} to request auto-approval when possible.
+   */
+  public function setApprovalPrompt($approvalPrompt) {
+    self::$auth->setApprovalPrompt($approvalPrompt);
+  }
+
+  /**
+   * Set the application name, this is included in the User-Agent HTTP header.
+   * @param string $applicationName
+   */
+  public function setApplicationName($applicationName) {
+    global $apiConfig;
+    $apiConfig['application_name'] = $applicationName;
+  }
+
+  /**
+   * Set the OAuth 2.0 Client ID.
+   * @param string $clientId
+   */
+  public function setClientId($clientId) {
+    global $apiConfig;
+    $apiConfig['oauth2_client_id'] = $clientId;
+    self::$auth->clientId = $clientId;
+  }
+
+  /**
+   * Get the OAuth 2.0 Client ID.
+   */
+  public function getClientId() {
+    return self::$auth->clientId;
+  }
+
+  /**
+   * Set the OAuth 2.0 Client Secret.
+   * @param string $clientSecret
+   */
+  public function setClientSecret($clientSecret) {
+    global $apiConfig;
+    $apiConfig['oauth2_client_secret'] = $clientSecret;
+    self::$auth->clientSecret = $clientSecret;
+  }
+
+  /**
+   * Get the OAuth 2.0 Client Secret.
+   */
+  public function getClientSecret() {
+    return self::$auth->clientSecret;
+  }
+
+  /**
+   * Set the OAuth 2.0 Redirect URI.
+   * @param string $redirectUri
+   */
+  public function setRedirectUri($redirectUri) {
+    global $apiConfig;
+    $apiConfig['oauth2_redirect_uri'] = $redirectUri;
+    self::$auth->redirectUri = $redirectUri;
+  }
+
+  /**
+   * Get the OAuth 2.0 Redirect URI.
+   */
+  public function getRedirectUri() {
+    return self::$auth->redirectUri;
+  }
+
+  /**
+   * Fetches a fresh OAuth 2.0 access token with the given refresh token.
+   * @param string $refreshToken
+   * @return void
+   */
+  public function refreshToken($refreshToken) {
+    self::$auth->refreshToken($refreshToken);
+  }
+
+  /**
+   * Revoke an OAuth2 access token or refresh token. This method will revoke the current access
+   * token, if a token isn't provided.
+   * @throws Google_AuthException
+   * @param string|null $token The token (access token or a refresh token) that should be revoked.
+   * @return boolean Returns True if the revocation was successful, otherwise False.
+   */
+  public function revokeToken($token = null) {
+    self::$auth->revokeToken($token);
+  }
+
+  /**
+   * Verify an id_token. This method will verify the current id_token, if one
+   * isn't provided.
+   * @throws Google_AuthException
+   * @param string|null $token The token (id_token) that should be verified.
+   * @return Google_LoginTicket Returns an apiLoginTicket if the verification was
+   * successful.
+   */
+  public function verifyIdToken($token = null) {
+    return self::$auth->verifyIdToken($token);
+  }
+
+  /**
+   * @param Google_AssertionCredentials $creds
+   * @return void
+   */
+  public function setAssertionCredentials(Google_AssertionCredentials $creds) {
+    self::$auth->setAssertionCredentials($creds);
+  }
+
+  /**
+   * This function allows you to overrule the automatically generated scopes,
+   * so that you can ask for more or less permission in the auth flow
+   * Set this before you call authenticate() though!
+   * @param array $scopes, ie: array('https://www.googleapis.com/auth/plus.me', 'https://www.googleapis.com/auth/moderator')
+   */
+  public function setScopes($scopes) {
+    $this->scopes = is_string($scopes) ? explode(" ", $scopes) : $scopes;
+  }
+
+  /**
+   * Returns the list of scopes set on the client
+   * @return array the list of scopes
+   *
+   */
+  public function getScopes() {
+     return $this->scopes;
+  }
+
+  /**
+   * Declare if objects should be returned by the api service classes.
+   *
+   * @param boolean $useObjects True if objects should be returned by the service classes.
+   * False if associative arrays should be returned (default behavior).
+   * @experimental
+   */
+  public function setUseObjects($useObjects) {
+    global $apiConfig;
+    $apiConfig['use_objects'] = $useObjects;
+  }
+
+  /**
+   * Declare if objects should be returned by the api service classes.
+   *
+   * @param boolean $useBatch True if the experimental batch support should
+   * be enabled. Defaults to False.
+   * @experimental
+   */
+  public function setUseBatch($useBatch) {
+    self::$useBatch = $useBatch;
+  }
+
+  /**
+   * @static
+   * @return Google_Auth the implementation of apiAuth.
+   */
+  public static function getAuth() {
+    return Google_Client::$auth;
+  }
+
+  /**
+   * @static
+   * @return Google_IO the implementation of apiIo.
+   */
+  public static function getIo() {
+    return Google_Client::$io;
+  }
+
+  /**
+   * @return Google_Cache the implementation of apiCache.
+   */
+  public function getCache() {
+    return Google_Client::$cache;
+  }
+}
+
+// Exceptions that the Google PHP API Library can throw
+class Google_Exception extends Exception {}
+class Google_AuthException extends Google_Exception {}
+class Google_CacheException extends Google_Exception {}
+class Google_IOException extends Google_Exception {}
+class Google_ServiceException extends Google_Exception {
+  /**
+   * Optional list of errors returned in a JSON body of an HTTP error response.
+   */
+  protected $errors = array();
+
+  /**
+   * Override default constructor to add ability to set $errors.
+   *
+   * @param string $message
+   * @param int $code
+   * @param Exception|null $previous
+   * @param [{string, string}] errors List of errors returned in an HTTP
+   * response.  Defaults to [].
+   */
+  public function __construct($message, $code = 0, Exception $previous = null,
+                              $errors = array()) {
+    if(version_compare(PHP_VERSION, '5.3.0') >= 0) {
+      parent::__construct($message, $code, $previous);
+    } else {
+      parent::__construct($message, $code);
+    }
+
+    $this->errors = $errors;
+  }
+
+  /**
+   * An example of the possible errors returned.
+   *
+   * {
+   *   "domain": "global",
+   *   "reason": "authError",
+   *   "message": "Invalid Credentials",
+   *   "locationType": "header",
+   *   "location": "Authorization",
+   * }
+   *
+   * @return [{string, string}] List of errors return in an HTTP response or [].
+   */
+  public function getErrors() {
+    return $this->errors;
+  }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_AssertionCredentials.php b/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_AssertionCredentials.php
new file mode 100644
index 0000000000000000000000000000000000000000..d9b4394ba38fa6c71831e0b0e6f5fca285bd5c09
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_AssertionCredentials.php
@@ -0,0 +1,104 @@
+<?php
+/*
+ * Copyright 2012 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Credentials object used for OAuth 2.0 Signed JWT assertion grants.
+ *
+ * @author Chirag Shah <chirags@google.com>
+ */
+class Google_AssertionCredentials {
+  const MAX_TOKEN_LIFETIME_SECS = 3600;
+
+  public $serviceAccountName;
+  public $scopes;
+  public $privateKey;
+  public $privateKeyPassword;
+  public $assertionType;
+  public $sub;
+  /**
+   * @deprecated
+   * @link http://tools.ietf.org/html/draft-ietf-oauth-json-web-token-06
+   */
+  public $prn;
+
+  /**
+   * @param $serviceAccountName
+   * @param $scopes array List of scopes
+   * @param $privateKey
+   * @param string $privateKeyPassword
+   * @param string $assertionType
+   * @param bool|string $sub The email address of the user for which the
+   *               application is requesting delegated access.
+   *
+   */
+  public function __construct(
+      $serviceAccountName,
+      $scopes,
+      $privateKey,
+      $privateKeyPassword = 'notasecret',
+      $assertionType = 'http://oauth.net/grant_type/jwt/1.0/bearer',
+      $sub = false) {
+    $this->serviceAccountName = $serviceAccountName;
+    $this->scopes = is_string($scopes) ? $scopes : implode(' ', $scopes);
+    $this->privateKey = $privateKey;
+    $this->privateKeyPassword = $privateKeyPassword;
+    $this->assertionType = $assertionType;
+    $this->sub = $sub;
+    $this->prn = $sub;
+  }
+
+  public function generateAssertion() {
+    $now = time();
+
+    $jwtParams = array(
+          'aud' => Google_OAuth2::OAUTH2_TOKEN_URI,
+          'scope' => $this->scopes,
+          'iat' => $now,
+          'exp' => $now + self::MAX_TOKEN_LIFETIME_SECS,
+          'iss' => $this->serviceAccountName,
+    );
+
+    if ($this->sub !== false) {
+      $jwtParams['sub'] = $this->sub;
+    } else if ($this->prn !== false) {
+      $jwtParams['prn'] = $this->prn;
+    }
+
+    return $this->makeSignedJwt($jwtParams);
+  }
+
+  /**
+   * Creates a signed JWT.
+   * @param array $payload
+   * @return string The signed JWT.
+   */
+  private function makeSignedJwt($payload) {
+    $header = array('typ' => 'JWT', 'alg' => 'RS256');
+
+    $segments = array(
+      Google_Utils::urlSafeB64Encode(json_encode($header)),
+      Google_Utils::urlSafeB64Encode(json_encode($payload))
+    );
+
+    $signingInput = implode('.', $segments);
+    $signer = new Google_P12Signer($this->privateKey, $this->privateKeyPassword);
+    $signature = $signer->sign($signingInput);
+    $segments[] = Google_Utils::urlSafeB64Encode($signature);
+
+    return implode(".", $segments);
+  }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_Auth.php b/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_Auth.php
new file mode 100644
index 0000000000000000000000000000000000000000..010782d4a60ed91eeb4f113cb129389c8d8f21f5
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_Auth.php
@@ -0,0 +1,36 @@
+<?php
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once "Google_AuthNone.php";
+require_once "Google_OAuth2.php";
+
+/**
+ * Abstract class for the Authentication in the API client
+ * @author Chris Chabot <chabotc@google.com>
+ *
+ */
+abstract class Google_Auth {
+  abstract public function authenticate($service);
+  abstract public function sign(Google_HttpRequest $request);
+  abstract public function createAuthUrl($scope);
+
+  abstract public function getAccessToken();
+  abstract public function setAccessToken($accessToken);
+  abstract public function setDeveloperKey($developerKey);
+  abstract public function refreshToken($refreshToken);
+  abstract public function revokeToken();
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_AuthNone.php b/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_AuthNone.php
new file mode 100644
index 0000000000000000000000000000000000000000..6ca6bc2b0db00d2f3ed1db06b7aa78bfd454fae9
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_AuthNone.php
@@ -0,0 +1,48 @@
+<?php
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Do-nothing authentication implementation, use this if you want to make un-authenticated calls
+ * @author Chris Chabot <chabotc@google.com>
+ * @author Chirag Shah <chirags@google.com>
+ */
+class Google_AuthNone extends Google_Auth {
+  public $key = null;
+
+  public function __construct() {
+    global $apiConfig;
+    if (!empty($apiConfig['developer_key'])) {
+      $this->setDeveloperKey($apiConfig['developer_key']);
+    }
+  }
+
+  public function setDeveloperKey($key) {$this->key = $key;}
+  public function authenticate($service) {/*noop*/}
+  public function setAccessToken($accessToken) {/* noop*/}
+  public function getAccessToken() {return null;}
+  public function createAuthUrl($scope) {return null;}
+  public function refreshToken($refreshToken) {/* noop*/}
+  public function revokeToken() {/* noop*/}
+
+  public function sign(Google_HttpRequest $request) {
+    if ($this->key) {
+      $request->setUrl($request->getUrl() . ((strpos($request->getUrl(), '?') === false) ? '?' : '&')
+          . 'key='.urlencode($this->key));
+    }
+    return $request;
+  }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_LoginTicket.php b/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_LoginTicket.php
new file mode 100644
index 0000000000000000000000000000000000000000..c0ce614232bd63500bc599895cda11607b823b52
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_LoginTicket.php
@@ -0,0 +1,63 @@
+<?php
+/*
+ * Copyright 2011 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Class to hold information about an authenticated login.
+ *
+ * @author Brian Eaton <beaton@google.com>
+ */
+class Google_LoginTicket {
+  const USER_ATTR = "id";
+
+  // Information from id token envelope.
+  private $envelope;
+
+  // Information from id token payload.
+  private $payload;
+
+  /**
+   * Creates a user based on the supplied token.
+   *
+   * @param string $envelope Header from a verified authentication token.
+   * @param string $payload Information from a verified authentication token.
+   */
+  public function __construct($envelope, $payload) {
+    $this->envelope = $envelope;
+    $this->payload = $payload;
+  }
+
+  /**
+   * Returns the numeric identifier for the user.
+   * @throws Google_AuthException
+   * @return
+   */
+  public function getUserId() {
+    if (array_key_exists(self::USER_ATTR, $this->payload)) {
+      return $this->payload[self::USER_ATTR];
+    }
+    throw new Google_AuthException("No user_id in token");
+  }
+
+  /**
+   * Returns attributes from the login ticket.  This can contain
+   * various information about the user session.
+   * @return array
+   */
+  public function getAttributes() {
+    return array("envelope" => $this->envelope, "payload" => $this->payload);
+  }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_OAuth2.php b/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_OAuth2.php
new file mode 100644
index 0000000000000000000000000000000000000000..a07d4365a7a6ce33e1f77371f1cbc505307393e4
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_OAuth2.php
@@ -0,0 +1,445 @@
+<?php
+/*
+ * Copyright 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once "Google_Verifier.php";
+require_once "Google_LoginTicket.php";
+require_once "service/Google_Utils.php";
+
+/**
+ * Authentication class that deals with the OAuth 2 web-server authentication flow
+ *
+ * @author Chris Chabot <chabotc@google.com>
+ * @author Chirag Shah <chirags@google.com>
+ *
+ */
+class Google_OAuth2 extends Google_Auth {
+  public $clientId;
+  public $clientSecret;
+  public $developerKey;
+  public $token;
+  public $redirectUri;
+  public $state;
+  public $accessType = 'offline';
+  public $approvalPrompt = 'force';
+
+  /** @var Google_AssertionCredentials $assertionCredentials */
+  public $assertionCredentials;
+
+  const OAUTH2_REVOKE_URI = 'https://accounts.google.com/o/oauth2/revoke';
+  const OAUTH2_TOKEN_URI = 'https://accounts.google.com/o/oauth2/token';
+  const OAUTH2_AUTH_URL = 'https://accounts.google.com/o/oauth2/auth';
+  const OAUTH2_FEDERATED_SIGNON_CERTS_URL = 'https://www.googleapis.com/oauth2/v1/certs';
+  const CLOCK_SKEW_SECS = 300; // five minutes in seconds
+  const AUTH_TOKEN_LIFETIME_SECS = 300; // five minutes in seconds
+  const MAX_TOKEN_LIFETIME_SECS = 86400; // one day in seconds
+
+  /**
+   * Instantiates the class, but does not initiate the login flow, leaving it
+   * to the discretion of the caller (which is done by calling authenticate()).
+   */
+  public function __construct() {
+    global $apiConfig;
+
+    if (! empty($apiConfig['developer_key'])) {
+      $this->developerKey = $apiConfig['developer_key'];
+    }
+
+    if (! empty($apiConfig['oauth2_client_id'])) {
+      $this->clientId = $apiConfig['oauth2_client_id'];
+    }
+
+    if (! empty($apiConfig['oauth2_client_secret'])) {
+      $this->clientSecret = $apiConfig['oauth2_client_secret'];
+    }
+
+    if (! empty($apiConfig['oauth2_redirect_uri'])) {
+      $this->redirectUri = $apiConfig['oauth2_redirect_uri'];
+    }
+
+    if (! empty($apiConfig['oauth2_access_type'])) {
+      $this->accessType = $apiConfig['oauth2_access_type'];
+    }
+
+    if (! empty($apiConfig['oauth2_approval_prompt'])) {
+      $this->approvalPrompt = $apiConfig['oauth2_approval_prompt'];
+    }
+
+  }
+
+  /**
+   * @param $service
+   * @param string|null $code
+   * @throws Google_AuthException
+   * @return string
+   */
+  public function authenticate($service, $code = null) {
+    if (!$code && isset($_GET['code'])) {
+      $code = $_GET['code'];
+    }
+
+    if ($code) {
+      // We got here from the redirect from a successful authorization grant, fetch the access token
+      $request = Google_Client::$io->makeRequest(new Google_HttpRequest(self::OAUTH2_TOKEN_URI, 'POST', array(), array(
+          'code' => $code,
+          'grant_type' => 'authorization_code',
+          'redirect_uri' => $this->redirectUri,
+          'client_id' => $this->clientId,
+          'client_secret' => $this->clientSecret
+      )));
+
+      if ($request->getResponseHttpCode() == 200) {
+        $this->setAccessToken($request->getResponseBody());
+        $this->token['created'] = time();
+        return $this->getAccessToken();
+      } else {
+        $response = $request->getResponseBody();
+        $decodedResponse = json_decode($response, true);
+        if ($decodedResponse != null && $decodedResponse['error']) {
+          $response = $decodedResponse['error'];
+        }
+        throw new Google_AuthException("Error fetching OAuth2 access token, message: '$response'", $request->getResponseHttpCode());
+      }
+    }
+
+    $authUrl = $this->createAuthUrl($service['scope']);
+    header('Location: ' . $authUrl);
+    return true;
+  }
+
+  /**
+   * Create a URL to obtain user authorization.
+   * The authorization endpoint allows the user to first
+   * authenticate, and then grant/deny the access request.
+   * @param string $scope The scope is expressed as a list of space-delimited strings.
+   * @return string
+   */
+  public function createAuthUrl($scope) {
+    $params = array(
+        'response_type=code',
+        'redirect_uri=' . urlencode($this->redirectUri),
+        'client_id=' . urlencode($this->clientId),
+        'scope=' . urlencode($scope),
+        'access_type=' . urlencode($this->accessType),
+        'approval_prompt=' . urlencode($this->approvalPrompt),
+    );
+
+    if (isset($this->state)) {
+      $params[] = 'state=' . urlencode($this->state);
+    }
+    $params = implode('&', $params);
+    return self::OAUTH2_AUTH_URL . "?$params";
+  }
+
+  /**
+   * @param string $token
+   * @throws Google_AuthException
+   */
+  public function setAccessToken($token) {
+    $token = json_decode($token, true);
+    if ($token == null) {
+      throw new Google_AuthException('Could not json decode the token');
+    }
+    if (! isset($token['access_token'])) {
+      throw new Google_AuthException("Invalid token format");
+    }
+    $this->token = $token;
+  }
+
+  public function getAccessToken() {
+    return json_encode($this->token);
+  }
+
+  public function setDeveloperKey($developerKey) {
+    $this->developerKey = $developerKey;
+  }
+
+  public function setState($state) {
+    $this->state = $state;
+  }
+
+  public function setAccessType($accessType) {
+    $this->accessType = $accessType;
+  }
+
+  public function setApprovalPrompt($approvalPrompt) {
+    $this->approvalPrompt = $approvalPrompt;
+  }
+
+  public function setAssertionCredentials(Google_AssertionCredentials $creds) {
+    $this->assertionCredentials = $creds;
+  }
+
+  /**
+   * Include an accessToken in a given apiHttpRequest.
+   * @param Google_HttpRequest $request
+   * @return Google_HttpRequest
+   * @throws Google_AuthException
+   */
+  public function sign(Google_HttpRequest $request) {
+    // add the developer key to the request before signing it
+    if ($this->developerKey) {
+      $requestUrl = $request->getUrl();
+      $requestUrl .= (strpos($request->getUrl(), '?') === false) ? '?' : '&';
+      $requestUrl .=  'key=' . urlencode($this->developerKey);
+      $request->setUrl($requestUrl);
+    }
+
+    // Cannot sign the request without an OAuth access token.
+    if (null == $this->token && null == $this->assertionCredentials) {
+      return $request;
+    }
+
+    // Check if the token is set to expire in the next 30 seconds
+    // (or has already expired).
+    if ($this->isAccessTokenExpired()) {
+      if ($this->assertionCredentials) {
+        $this->refreshTokenWithAssertion();
+      } else {
+        if (! array_key_exists('refresh_token', $this->token)) {
+            throw new Google_AuthException("The OAuth 2.0 access token has expired, "
+                . "and a refresh token is not available. Refresh tokens are not "
+                . "returned for responses that were auto-approved.");
+        }
+        $this->refreshToken($this->token['refresh_token']);
+      }
+    }
+
+    // Add the OAuth2 header to the request
+    $request->setRequestHeaders(
+        array('Authorization' => 'Bearer ' . $this->token['access_token'])
+    );
+
+    return $request;
+  }
+
+  /**
+   * Fetches a fresh access token with the given refresh token.
+   * @param string $refreshToken
+   * @return void
+   */
+  public function refreshToken($refreshToken) {
+    $this->refreshTokenRequest(array(
+        'client_id' => $this->clientId,
+        'client_secret' => $this->clientSecret,
+        'refresh_token' => $refreshToken,
+        'grant_type' => 'refresh_token'
+    ));
+  }
+
+  /**
+   * Fetches a fresh access token with a given assertion token.
+   * @param Google_AssertionCredentials $assertionCredentials optional.
+   * @return void
+   */
+  public function refreshTokenWithAssertion($assertionCredentials = null) {
+    if (!$assertionCredentials) {
+      $assertionCredentials = $this->assertionCredentials;
+    }
+
+    $this->refreshTokenRequest(array(
+        'grant_type' => 'assertion',
+        'assertion_type' => $assertionCredentials->assertionType,
+        'assertion' => $assertionCredentials->generateAssertion(),
+    ));
+  }
+
+  private function refreshTokenRequest($params) {
+    $http = new Google_HttpRequest(self::OAUTH2_TOKEN_URI, 'POST', array(), $params);
+    $request = Google_Client::$io->makeRequest($http);
+
+    $code = $request->getResponseHttpCode();
+    $body = $request->getResponseBody();
+    if (200 == $code) {
+      $token = json_decode($body, true);
+      if ($token == null) {
+        throw new Google_AuthException("Could not json decode the access token");
+      }
+
+      if (! isset($token['access_token']) || ! isset($token['expires_in'])) {
+        throw new Google_AuthException("Invalid token format");
+      }
+
+      $this->token['access_token'] = $token['access_token'];
+      $this->token['expires_in'] = $token['expires_in'];
+      $this->token['created'] = time();
+    } else {
+      throw new Google_AuthException("Error refreshing the OAuth2 token, message: '$body'", $code);
+    }
+  }
+
+    /**
+     * Revoke an OAuth2 access token or refresh token. This method will revoke the current access
+     * token, if a token isn't provided.
+     * @throws Google_AuthException
+     * @param string|null $token The token (access token or a refresh token) that should be revoked.
+     * @return boolean Returns True if the revocation was successful, otherwise False.
+     */
+  public function revokeToken($token = null) {
+    if (!$token) {
+      $token = $this->token['access_token'];
+    }
+    $request = new Google_HttpRequest(self::OAUTH2_REVOKE_URI, 'POST', array(), "token=$token");
+    $response = Google_Client::$io->makeRequest($request);
+    $code = $response->getResponseHttpCode();
+    if ($code == 200) {
+      $this->token = null;
+      return true;
+    }
+
+    return false;
+  }
+
+  /**
+   * Returns if the access_token is expired.
+   * @return bool Returns True if the access_token is expired.
+   */
+  public function isAccessTokenExpired() {
+    if (null == $this->token) {
+      return true;
+    }
+
+    // If the token is set to expire in the next 30 seconds.
+    $expired = ($this->token['created']
+        + ($this->token['expires_in'] - 30)) < time();
+
+    return $expired;
+  }
+
+  // Gets federated sign-on certificates to use for verifying identity tokens.
+  // Returns certs as array structure, where keys are key ids, and values
+  // are PEM encoded certificates.
+  private function getFederatedSignOnCerts() {
+    // This relies on makeRequest caching certificate responses.
+    $request = Google_Client::$io->makeRequest(new Google_HttpRequest(
+        self::OAUTH2_FEDERATED_SIGNON_CERTS_URL));
+    if ($request->getResponseHttpCode() == 200) {
+      $certs = json_decode($request->getResponseBody(), true);
+      if ($certs) {
+        return $certs;
+      }
+    }
+    throw new Google_AuthException(
+        "Failed to retrieve verification certificates: '" .
+            $request->getResponseBody() . "'.",
+        $request->getResponseHttpCode());
+  }
+
+  /**
+   * Verifies an id token and returns the authenticated apiLoginTicket.
+   * Throws an exception if the id token is not valid.
+   * The audience parameter can be used to control which id tokens are
+   * accepted.  By default, the id token must have been issued to this OAuth2 client.
+   *
+   * @param $id_token
+   * @param $audience
+   * @return Google_LoginTicket
+   */
+  public function verifyIdToken($id_token = null, $audience = null) {
+    if (!$id_token) {
+      $id_token = $this->token['id_token'];
+    }
+
+    $certs = $this->getFederatedSignonCerts();
+    if (!$audience) {
+      $audience = $this->clientId;
+    }
+    return $this->verifySignedJwtWithCerts($id_token, $certs, $audience);
+  }
+
+  // Verifies the id token, returns the verified token contents.
+  // Visible for testing.
+  function verifySignedJwtWithCerts($jwt, $certs, $required_audience) {
+    $segments = explode(".", $jwt);
+    if (count($segments) != 3) {
+      throw new Google_AuthException("Wrong number of segments in token: $jwt");
+    }
+    $signed = $segments[0] . "." . $segments[1];
+    $signature = Google_Utils::urlSafeB64Decode($segments[2]);
+
+    // Parse envelope.
+    $envelope = json_decode(Google_Utils::urlSafeB64Decode($segments[0]), true);
+    if (!$envelope) {
+      throw new Google_AuthException("Can't parse token envelope: " . $segments[0]);
+    }
+
+    // Parse token
+    $json_body = Google_Utils::urlSafeB64Decode($segments[1]);
+    $payload = json_decode($json_body, true);
+    if (!$payload) {
+      throw new Google_AuthException("Can't parse token payload: " . $segments[1]);
+    }
+
+    // Check signature
+    $verified = false;
+    foreach ($certs as $keyName => $pem) {
+      $public_key = new Google_PemVerifier($pem);
+      if ($public_key->verify($signed, $signature)) {
+        $verified = true;
+        break;
+      }
+    }
+
+    if (!$verified) {
+      throw new Google_AuthException("Invalid token signature: $jwt");
+    }
+
+    // Check issued-at timestamp
+    $iat = 0;
+    if (array_key_exists("iat", $payload)) {
+      $iat = $payload["iat"];
+    }
+    if (!$iat) {
+      throw new Google_AuthException("No issue time in token: $json_body");
+    }
+    $earliest = $iat - self::CLOCK_SKEW_SECS;
+
+    // Check expiration timestamp
+    $now = time();
+    $exp = 0;
+    if (array_key_exists("exp", $payload)) {
+      $exp = $payload["exp"];
+    }
+    if (!$exp) {
+      throw new Google_AuthException("No expiration time in token: $json_body");
+    }
+    if ($exp >= $now + self::MAX_TOKEN_LIFETIME_SECS) {
+      throw new Google_AuthException(
+          "Expiration time too far in future: $json_body");
+    }
+
+    $latest = $exp + self::CLOCK_SKEW_SECS;
+    if ($now < $earliest) {
+      throw new Google_AuthException(
+          "Token used too early, $now < $earliest: $json_body");
+    }
+    if ($now > $latest) {
+      throw new Google_AuthException(
+          "Token used too late, $now > $latest: $json_body");
+    }
+
+    // TODO(beaton): check issuer field?
+
+    // Check audience
+    $aud = $payload["aud"];
+    if ($aud != $required_audience) {
+      throw new Google_AuthException("Wrong recipient, $aud != $required_audience: $json_body");
+    }
+
+    // All good.
+    return new Google_LoginTicket($envelope, $payload);
+  }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_P12Signer.php b/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_P12Signer.php
new file mode 100644
index 0000000000000000000000000000000000000000..1bed5909913686db299bf20a97abb4c698a42bcc
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_P12Signer.php
@@ -0,0 +1,70 @@
+<?php
+/*
+ * Copyright 2011 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Signs data.
+ *
+ * Only used for testing.
+ *
+ * @author Brian Eaton <beaton@google.com>
+ */
+class Google_P12Signer extends Google_Signer {
+  // OpenSSL private key resource
+  private $privateKey;
+
+  // Creates a new signer from a .p12 file.
+  function __construct($p12, $password) {
+    if (!function_exists('openssl_x509_read')) {
+      throw new Exception(
+          'The Google PHP API library needs the openssl PHP extension');
+    }
+
+    // This throws on error
+    $certs = array();
+    if (!openssl_pkcs12_read($p12, $certs, $password)) {
+      throw new Google_AuthException("Unable to parse the p12 file.  " .
+          "Is this a .p12 file?  Is the password correct?  OpenSSL error: " .
+          openssl_error_string());
+    }
+    // TODO(beaton): is this part of the contract for the openssl_pkcs12_read
+    // method?  What happens if there are multiple private keys?  Do we care?
+    if (!array_key_exists("pkey", $certs) || !$certs["pkey"]) {
+      throw new Google_AuthException("No private key found in p12 file.");
+    }
+    $this->privateKey = openssl_pkey_get_private($certs["pkey"]);
+    if (!$this->privateKey) {
+      throw new Google_AuthException("Unable to load private key in ");
+    }
+  }
+
+  function __destruct() {
+    if ($this->privateKey) {
+      openssl_pkey_free($this->privateKey);
+    }
+  }
+
+  function sign($data) {
+    if(version_compare(PHP_VERSION, '5.3.0') < 0) {
+      throw new Google_AuthException(
+        "PHP 5.3.0 or higher is required to use service accounts.");
+    }
+    if (!openssl_sign($data, $signature, $this->privateKey, "sha256")) {
+      throw new Google_AuthException("Unable to sign data");
+    }
+    return $signature;
+  }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_PemVerifier.php b/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_PemVerifier.php
new file mode 100644
index 0000000000000000000000000000000000000000..6c1c85fa20e1161cd7b225c0a55a2abe70e361a1
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_PemVerifier.php
@@ -0,0 +1,66 @@
+<?php
+/*
+ * Copyright 2011 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Verifies signatures using PEM encoded certificates.
+ *
+ * @author Brian Eaton <beaton@google.com>
+ */
+class Google_PemVerifier extends Google_Verifier {
+  private $publicKey;
+
+  /**
+   * Constructs a verifier from the supplied PEM-encoded certificate.
+   *
+   * $pem: a PEM encoded certificate (not a file).
+   * @param $pem
+   * @throws Google_AuthException
+   * @throws Google_Exception
+   */
+  function __construct($pem) {
+    if (!function_exists('openssl_x509_read')) {
+      throw new Google_Exception('Google API PHP client needs the openssl PHP extension');
+    }
+    $this->publicKey = openssl_x509_read($pem);
+    if (!$this->publicKey) {
+      throw new Google_AuthException("Unable to parse PEM: $pem");
+    }
+  }
+
+  function __destruct() {
+    if ($this->publicKey) {
+      openssl_x509_free($this->publicKey);
+    }
+  }
+
+  /**
+   * Verifies the signature on data.
+   *
+   * Returns true if the signature is valid, false otherwise.
+   * @param $data
+   * @param $signature
+   * @throws Google_AuthException
+   * @return bool
+   */
+  function verify($data, $signature) {
+    $status = openssl_verify($data, $signature, $this->publicKey, "sha256");
+    if ($status === -1) {
+      throw new Google_AuthException('Signature verification error: ' . openssl_error_string());
+    }
+    return $status === 1;
+  }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_Signer.php b/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_Signer.php
new file mode 100644
index 0000000000000000000000000000000000000000..7892baac8dffa65fb64f23ff8ba474aa8e28045e
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_Signer.php
@@ -0,0 +1,30 @@
+<?php
+/*
+ * Copyright 2011 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once "Google_P12Signer.php";
+
+/**
+ * Signs data.
+ *
+ * @author Brian Eaton <beaton@google.com>
+ */
+abstract class Google_Signer {
+  /**
+   * Signs data, returns the signature as binary data.
+   */
+  abstract public function sign($data);
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_Verifier.php b/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_Verifier.php
new file mode 100644
index 0000000000000000000000000000000000000000..2839a371df18e51e0181b74db024b98af8c910a6
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/auth/Google_Verifier.php
@@ -0,0 +1,31 @@
+<?php
+/*
+ * Copyright 2011 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once "Google_PemVerifier.php";
+
+/**
+ * Verifies signatures.
+ *
+ * @author Brian Eaton <beaton@google.com>
+ */
+abstract class Google_Verifier {
+  /**
+   * Checks a signature, returns true if the signature is correct,
+   * false otherwise.
+   */
+  abstract public function verify($data, $signature);
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_ApcCache.php b/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_ApcCache.php
new file mode 100644
index 0000000000000000000000000000000000000000..3523c98dccab3172b57a60fd3727432711454ebd
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_ApcCache.php
@@ -0,0 +1,98 @@
+<?php
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * A persistent storage class based on the APC cache, which is not
+ * really very persistent, as soon as you restart your web server
+ * the storage will be wiped, however for debugging and/or speed
+ * it can be useful, kinda, and cache is a lot cheaper then storage.
+ *
+ * @author Chris Chabot <chabotc@google.com>
+ */
+class googleApcCache extends Google_Cache {
+
+  public function __construct() {
+    if (! function_exists('apc_add')) {
+      throw new Google_CacheException("Apc functions not available");
+    }
+  }
+
+  private function isLocked($key) {
+    if ((@apc_fetch($key . '.lock')) === false) {
+      return false;
+    }
+    return true;
+  }
+
+  private function createLock($key) {
+    // the interesting thing is that this could fail if the lock was created in the meantime..
+    // but we'll ignore that out of convenience
+    @apc_add($key . '.lock', '', 5);
+  }
+
+  private function removeLock($key) {
+    // suppress all warnings, if some other process removed it that's ok too
+    @apc_delete($key . '.lock');
+  }
+
+  private function waitForLock($key) {
+    // 20 x 250 = 5 seconds
+    $tries = 20;
+    $cnt = 0;
+    do {
+      // 250 ms is a long time to sleep, but it does stop the server from burning all resources on polling locks..
+      usleep(250);
+      $cnt ++;
+    } while ($cnt <= $tries && $this->isLocked($key));
+    if ($this->isLocked($key)) {
+      // 5 seconds passed, assume the owning process died off and remove it
+      $this->removeLock($key);
+    }
+  }
+
+   /**
+   * @inheritDoc
+   */
+  public function get($key, $expiration = false) {
+
+    if (($ret = @apc_fetch($key)) === false) {
+      return false;
+    }
+    if (!$expiration || (time() - $ret['time'] > $expiration)) {
+      $this->delete($key);
+      return false;
+    }
+    return unserialize($ret['data']);
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function set($key, $value) {
+    if (@apc_store($key, array('time' => time(), 'data' => serialize($value))) == false) {
+      throw new Google_CacheException("Couldn't store data");
+    }
+  }
+
+  /**
+   * @inheritDoc
+   * @param String $key
+   */
+  public function delete($key) {
+    @apc_delete($key);
+  }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_Cache.php b/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_Cache.php
new file mode 100644
index 0000000000000000000000000000000000000000..809c55e2b154d8d5f1c50eb3d3bd372efb81b44a
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_Cache.php
@@ -0,0 +1,55 @@
+<?php
+/*
+ * Copyright 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once "Google_FileCache.php";
+require_once "Google_MemcacheCache.php";
+
+/**
+ * Abstract storage class
+ *
+ * @author Chris Chabot <chabotc@google.com>
+ */
+abstract class Google_Cache {
+
+  /**
+   * Retrieves the data for the given key, or false if they
+   * key is unknown or expired
+   *
+   * @param String $key The key who's data to retrieve
+   * @param boolean|int $expiration Expiration time in seconds
+   *
+   */
+  abstract function get($key, $expiration = false);
+
+  /**
+   * Store the key => $value set. The $value is serialized
+   * by this function so can be of any type
+   *
+   * @param string $key Key of the data
+   * @param string $value data
+   */
+  abstract function set($key, $value);
+
+  /**
+   * Removes the key/data pair for the given $key
+   *
+   * @param String $key
+   */
+  abstract function delete($key);
+}
+
+
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_FileCache.php b/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_FileCache.php
new file mode 100644
index 0000000000000000000000000000000000000000..1e32859a48bd25ed306796eacbdcd3c380944285
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_FileCache.php
@@ -0,0 +1,137 @@
+<?php
+/*
+ * Copyright 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * This class implements a basic on disk storage. While that does
+ * work quite well it's not the most elegant and scalable solution.
+ * It will also get you into a heap of trouble when you try to run
+ * this in a clustered environment. In those cases please use the
+ * MySql back-end
+ *
+ * @author Chris Chabot <chabotc@google.com>
+ */
+class Google_FileCache extends Google_Cache {
+  private $path;
+
+  public function __construct() {
+    global $apiConfig;
+    $this->path = $apiConfig['ioFileCache_directory'];
+  }
+
+  private function isLocked($storageFile) {
+    // our lock file convention is simple: /the/file/path.lock
+    return file_exists($storageFile . '.lock');
+  }
+
+  private function createLock($storageFile) {
+    $storageDir = dirname($storageFile);
+    if (! is_dir($storageDir)) {
+      // @codeCoverageIgnoreStart
+      if (! @mkdir($storageDir, 0755, true)) {
+        // make sure the failure isn't because of a concurrency issue
+        if (! is_dir($storageDir)) {
+          throw new Google_CacheException("Could not create storage directory: $storageDir");
+        }
+      }
+      // @codeCoverageIgnoreEnd
+    }
+    @touch($storageFile . '.lock');
+  }
+
+  private function removeLock($storageFile) {
+    // suppress all warnings, if some other process removed it that's ok too
+    @unlink($storageFile . '.lock');
+  }
+
+  private function waitForLock($storageFile) {
+    // 20 x 250 = 5 seconds
+    $tries = 20;
+    $cnt = 0;
+    do {
+      // make sure PHP picks up on file changes. This is an expensive action but really can't be avoided
+      clearstatcache();
+      // 250 ms is a long time to sleep, but it does stop the server from burning all resources on polling locks..
+      usleep(250);
+      $cnt ++;
+    } while ($cnt <= $tries && $this->isLocked($storageFile));
+    if ($this->isLocked($storageFile)) {
+      // 5 seconds passed, assume the owning process died off and remove it
+      $this->removeLock($storageFile);
+    }
+  }
+
+  private function getCacheDir($hash) {
+    // use the first 2 characters of the hash as a directory prefix
+    // this should prevent slowdowns due to huge directory listings
+    // and thus give some basic amount of scalability
+    return $this->path . '/' . substr($hash, 0, 2);
+  }
+
+  private function getCacheFile($hash) {
+    return $this->getCacheDir($hash) . '/' . $hash;
+  }
+
+  public function get($key, $expiration = false) {
+    $storageFile = $this->getCacheFile(md5($key));
+    // See if this storage file is locked, if so we wait up to 5 seconds for the lock owning process to
+    // complete it's work. If the lock is not released within that time frame, it's cleaned up.
+    // This should give us a fair amount of 'Cache Stampeding' protection
+    if ($this->isLocked($storageFile)) {
+      $this->waitForLock($storageFile);
+    }
+    if (file_exists($storageFile) && is_readable($storageFile)) {
+      $now = time();
+      if (! $expiration || (($mtime = @filemtime($storageFile)) !== false && ($now - $mtime) < $expiration)) {
+        if (($data = @file_get_contents($storageFile)) !== false) {
+          $data = unserialize($data);
+          return $data;
+        }
+      }
+    }
+    return false;
+  }
+
+  public function set($key, $value) {
+    $storageDir = $this->getCacheDir(md5($key));
+    $storageFile = $this->getCacheFile(md5($key));
+    if ($this->isLocked($storageFile)) {
+      // some other process is writing to this file too, wait until it's done to prevent hiccups
+      $this->waitForLock($storageFile);
+    }
+    if (! is_dir($storageDir)) {
+      if (! @mkdir($storageDir, 0755, true)) {
+        throw new Google_CacheException("Could not create storage directory: $storageDir");
+      }
+    }
+    // we serialize the whole request object, since we don't only want the
+    // responseContent but also the postBody used, headers, size, etc
+    $data = serialize($value);
+    $this->createLock($storageFile);
+    if (! @file_put_contents($storageFile, $data)) {
+      $this->removeLock($storageFile);
+      throw new Google_CacheException("Could not store data in the file");
+    }
+    $this->removeLock($storageFile);
+  }
+
+  public function delete($key) {
+    $file = $this->getCacheFile(md5($key));
+    if (! @unlink($file)) {
+      throw new Google_CacheException("Cache file could not be deleted");
+    }
+  }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_MemcacheCache.php b/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_MemcacheCache.php
new file mode 100644
index 0000000000000000000000000000000000000000..22493f8b1ecd3987da10f1ae4c1238b1e350b712
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/cache/Google_MemcacheCache.php
@@ -0,0 +1,130 @@
+<?php
+/*
+ * Copyright 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * A persistent storage class based on the memcache, which is not
+ * really very persistent, as soon as you restart your memcache daemon
+ * the storage will be wiped, however for debugging and/or speed
+ * it can be useful, kinda, and cache is a lot cheaper then storage.
+ *
+ * @author Chris Chabot <chabotc@google.com>
+ */
+class Google_MemcacheCache extends Google_Cache {
+  private $connection = false;
+
+  public function __construct() {
+    global $apiConfig;
+    if (! function_exists('memcache_connect')) {
+      throw new Google_CacheException("Memcache functions not available");
+    }
+    $this->host = $apiConfig['ioMemCacheCache_host'];
+    $this->port = $apiConfig['ioMemCacheCache_port'];
+    if (empty($this->host) || empty($this->port)) {
+      throw new Google_CacheException("You need to supply a valid memcache host and port");
+    }
+  }
+
+  private function isLocked($key) {
+    $this->check();
+    if ((@memcache_get($this->connection, $key . '.lock')) === false) {
+      return false;
+    }
+    return true;
+  }
+
+  private function createLock($key) {
+    $this->check();
+    // the interesting thing is that this could fail if the lock was created in the meantime..
+    // but we'll ignore that out of convenience
+    @memcache_add($this->connection, $key . '.lock', '', 0, 5);
+  }
+
+  private function removeLock($key) {
+    $this->check();
+    // suppress all warnings, if some other process removed it that's ok too
+    @memcache_delete($this->connection, $key . '.lock');
+  }
+
+  private function waitForLock($key) {
+    $this->check();
+    // 20 x 250 = 5 seconds
+    $tries = 20;
+    $cnt = 0;
+    do {
+      // 250 ms is a long time to sleep, but it does stop the server from burning all resources on polling locks..
+      usleep(250);
+      $cnt ++;
+    } while ($cnt <= $tries && $this->isLocked($key));
+    if ($this->isLocked($key)) {
+      // 5 seconds passed, assume the owning process died off and remove it
+      $this->removeLock($key);
+    }
+  }
+
+  // I prefer lazy initialization since the cache isn't used every request
+  // so this potentially saves a lot of overhead
+  private function connect() {
+    if (! $this->connection = @memcache_pconnect($this->host, $this->port)) {
+      throw new Google_CacheException("Couldn't connect to memcache server");
+    }
+  }
+
+  private function check() {
+    if (! $this->connection) {
+      $this->connect();
+    }
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function get($key, $expiration = false) {
+    $this->check();
+    if (($ret = @memcache_get($this->connection, $key)) === false) {
+      return false;
+    }
+    if (! $expiration || (time() - $ret['time'] > $expiration)) {
+      $this->delete($key);
+      return false;
+    }
+    return $ret['data'];
+  }
+
+  /**
+   * @inheritDoc
+   * @param string $key
+   * @param string $value
+   * @throws Google_CacheException
+   */
+  public function set($key, $value) {
+    $this->check();
+    // we store it with the cache_time default expiration so objects will at least get cleaned eventually.
+    if (@memcache_set($this->connection, $key, array('time' => time(),
+        'data' => $value), false) == false) {
+      throw new Google_CacheException("Couldn't store data in cache");
+    }
+  }
+
+  /**
+   * @inheritDoc
+   * @param String $key
+   */
+  public function delete($key) {
+    $this->check();
+    @memcache_delete($this->connection, $key);
+  }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/config.php b/apps/files_external/3rdparty/google-api-php-client/src/config.php
new file mode 100644
index 0000000000000000000000000000000000000000..e3a57138d05b3d84aec96137feeed73b7d947b83
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/config.php
@@ -0,0 +1,81 @@
+<?php
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+global $apiConfig;
+$apiConfig = array(
+    // True if objects should be returned by the service classes.
+    // False if associative arrays should be returned (default behavior).
+    'use_objects' => false,
+  
+    // The application_name is included in the User-Agent HTTP header.
+    'application_name' => '',
+
+    // OAuth2 Settings, you can get these keys at https://code.google.com/apis/console
+    'oauth2_client_id' => '',
+    'oauth2_client_secret' => '',
+    'oauth2_redirect_uri' => '',
+
+    // The developer key, you get this at https://code.google.com/apis/console
+    'developer_key' => '',
+  
+    // Site name to show in the Google's OAuth 1 authentication screen.
+    'site_name' => 'www.example.org',
+
+    // Which Authentication, Storage and HTTP IO classes to use.
+    'authClass'    => 'Google_OAuth2',
+    'ioClass'      => 'Google_CurlIO',
+    'cacheClass'   => 'Google_FileCache',
+
+    // Don't change these unless you're working against a special development or testing environment.
+    'basePath' => 'https://www.googleapis.com',
+
+    // IO Class dependent configuration, you only have to configure the values
+    // for the class that was configured as the ioClass above
+    'ioFileCache_directory'  =>
+        (function_exists('sys_get_temp_dir') ?
+            sys_get_temp_dir() . '/Google_Client' :
+        '/tmp/Google_Client'),
+
+    // Definition of service specific values like scopes, oauth token URLs, etc
+    'services' => array(
+      'analytics' => array('scope' => 'https://www.googleapis.com/auth/analytics.readonly'),
+      'calendar' => array(
+          'scope' => array(
+              "https://www.googleapis.com/auth/calendar",
+              "https://www.googleapis.com/auth/calendar.readonly",
+          )
+      ),
+      'books' => array('scope' => 'https://www.googleapis.com/auth/books'),
+      'latitude' => array(
+          'scope' => array(
+              'https://www.googleapis.com/auth/latitude.all.best',
+              'https://www.googleapis.com/auth/latitude.all.city',
+          )
+      ),
+      'moderator' => array('scope' => 'https://www.googleapis.com/auth/moderator'),
+      'oauth2' => array(
+          'scope' => array(
+              'https://www.googleapis.com/auth/userinfo.profile',
+              'https://www.googleapis.com/auth/userinfo.email',
+          )
+      ),
+      'plus' => array('scope' => 'https://www.googleapis.com/auth/plus.login'),
+      'siteVerification' => array('scope' => 'https://www.googleapis.com/auth/siteverification'),
+      'tasks' => array('scope' => 'https://www.googleapis.com/auth/tasks'),
+      'urlshortener' => array('scope' => 'https://www.googleapis.com/auth/urlshortener')
+    )
+);
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/contrib/Google_DriveService.php b/apps/files_external/3rdparty/google-api-php-client/src/contrib/Google_DriveService.php
new file mode 100644
index 0000000000000000000000000000000000000000..896e8b93826fc53d3cf540b402966d6d8cc3cd1c
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/contrib/Google_DriveService.php
@@ -0,0 +1,3143 @@
+<?php
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+
+  /**
+   * The "about" collection of methods.
+   * Typical usage is:
+   *  <code>
+   *   $driveService = new Google_DriveService(...);
+   *   $about = $driveService->about;
+   *  </code>
+   */
+  class Google_AboutServiceResource extends Google_ServiceResource {
+
+
+    /**
+     * Gets the information about the current user along with Drive API settings (about.get)
+     *
+     * @param array $optParams Optional parameters.
+     *
+     * @opt_param bool includeSubscribed When calculating the number of remaining change IDs, whether to include shared files and public files the user has opened. When set to false, this counts only change IDs for owned files and any shared or public files that the user has explictly added to a folder in Drive.
+     * @opt_param string maxChangeIdCount Maximum number of remaining change IDs to count
+     * @opt_param string startChangeId Change ID to start counting from when calculating number of remaining change IDs
+     * @return Google_About
+     */
+    public function get($optParams = array()) {
+      $params = array();
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('get', array($params));
+      if ($this->useObjects()) {
+        return new Google_About($data);
+      } else {
+        return $data;
+      }
+    }
+  }
+
+  /**
+   * The "apps" collection of methods.
+   * Typical usage is:
+   *  <code>
+   *   $driveService = new Google_DriveService(...);
+   *   $apps = $driveService->apps;
+   *  </code>
+   */
+  class Google_AppsServiceResource extends Google_ServiceResource {
+
+
+    /**
+     * Gets a specific app. (apps.get)
+     *
+     * @param string $appId The ID of the app.
+     * @param array $optParams Optional parameters.
+     * @return Google_App
+     */
+    public function get($appId, $optParams = array()) {
+      $params = array('appId' => $appId);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('get', array($params));
+      if ($this->useObjects()) {
+        return new Google_App($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Lists a user's installed apps. (apps.list)
+     *
+     * @param array $optParams Optional parameters.
+     * @return Google_AppList
+     */
+    public function listApps($optParams = array()) {
+      $params = array();
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('list', array($params));
+      if ($this->useObjects()) {
+        return new Google_AppList($data);
+      } else {
+        return $data;
+      }
+    }
+  }
+
+  /**
+   * The "changes" collection of methods.
+   * Typical usage is:
+   *  <code>
+   *   $driveService = new Google_DriveService(...);
+   *   $changes = $driveService->changes;
+   *  </code>
+   */
+  class Google_ChangesServiceResource extends Google_ServiceResource {
+
+
+    /**
+     * Gets a specific change. (changes.get)
+     *
+     * @param string $changeId The ID of the change.
+     * @param array $optParams Optional parameters.
+     * @return Google_Change
+     */
+    public function get($changeId, $optParams = array()) {
+      $params = array('changeId' => $changeId);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('get', array($params));
+      if ($this->useObjects()) {
+        return new Google_Change($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Lists the changes for a user. (changes.list)
+     *
+     * @param array $optParams Optional parameters.
+     *
+     * @opt_param bool includeDeleted Whether to include deleted items.
+     * @opt_param bool includeSubscribed Whether to include shared files and public files the user has opened. When set to false, the list will include owned files plus any shared or public files the user has explictly added to a folder in Drive.
+     * @opt_param int maxResults Maximum number of changes to return.
+     * @opt_param string pageToken Page token for changes.
+     * @opt_param string startChangeId Change ID to start listing changes from.
+     * @return Google_ChangeList
+     */
+    public function listChanges($optParams = array()) {
+      $params = array();
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('list', array($params));
+      if ($this->useObjects()) {
+        return new Google_ChangeList($data);
+      } else {
+        return $data;
+      }
+    }
+  }
+
+  /**
+   * The "children" collection of methods.
+   * Typical usage is:
+   *  <code>
+   *   $driveService = new Google_DriveService(...);
+   *   $children = $driveService->children;
+   *  </code>
+   */
+  class Google_ChildrenServiceResource extends Google_ServiceResource {
+
+
+    /**
+     * Removes a child from a folder. (children.delete)
+     *
+     * @param string $folderId The ID of the folder.
+     * @param string $childId The ID of the child.
+     * @param array $optParams Optional parameters.
+     */
+    public function delete($folderId, $childId, $optParams = array()) {
+      $params = array('folderId' => $folderId, 'childId' => $childId);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('delete', array($params));
+      return $data;
+    }
+    /**
+     * Gets a specific child reference. (children.get)
+     *
+     * @param string $folderId The ID of the folder.
+     * @param string $childId The ID of the child.
+     * @param array $optParams Optional parameters.
+     * @return Google_ChildReference
+     */
+    public function get($folderId, $childId, $optParams = array()) {
+      $params = array('folderId' => $folderId, 'childId' => $childId);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('get', array($params));
+      if ($this->useObjects()) {
+        return new Google_ChildReference($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Inserts a file into a folder. (children.insert)
+     *
+     * @param string $folderId The ID of the folder.
+     * @param Google_ChildReference $postBody
+     * @param array $optParams Optional parameters.
+     * @return Google_ChildReference
+     */
+    public function insert($folderId, Google_ChildReference $postBody, $optParams = array()) {
+      $params = array('folderId' => $folderId, 'postBody' => $postBody);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('insert', array($params));
+      if ($this->useObjects()) {
+        return new Google_ChildReference($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Lists a folder's children. (children.list)
+     *
+     * @param string $folderId The ID of the folder.
+     * @param array $optParams Optional parameters.
+     *
+     * @opt_param int maxResults Maximum number of children to return.
+     * @opt_param string pageToken Page token for children.
+     * @opt_param string q Query string for searching children.
+     * @return Google_ChildList
+     */
+    public function listChildren($folderId, $optParams = array()) {
+      $params = array('folderId' => $folderId);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('list', array($params));
+      if ($this->useObjects()) {
+        return new Google_ChildList($data);
+      } else {
+        return $data;
+      }
+    }
+  }
+
+  /**
+   * The "comments" collection of methods.
+   * Typical usage is:
+   *  <code>
+   *   $driveService = new Google_DriveService(...);
+   *   $comments = $driveService->comments;
+   *  </code>
+   */
+  class Google_CommentsServiceResource extends Google_ServiceResource {
+
+
+    /**
+     * Deletes a comment. (comments.delete)
+     *
+     * @param string $fileId The ID of the file.
+     * @param string $commentId The ID of the comment.
+     * @param array $optParams Optional parameters.
+     */
+    public function delete($fileId, $commentId, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'commentId' => $commentId);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('delete', array($params));
+      return $data;
+    }
+    /**
+     * Gets a comment by ID. (comments.get)
+     *
+     * @param string $fileId The ID of the file.
+     * @param string $commentId The ID of the comment.
+     * @param array $optParams Optional parameters.
+     *
+     * @opt_param bool includeDeleted If set, this will succeed when retrieving a deleted comment, and will include any deleted replies.
+     * @return Google_Comment
+     */
+    public function get($fileId, $commentId, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'commentId' => $commentId);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('get', array($params));
+      if ($this->useObjects()) {
+        return new Google_Comment($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Creates a new comment on the given file. (comments.insert)
+     *
+     * @param string $fileId The ID of the file.
+     * @param Google_Comment $postBody
+     * @param array $optParams Optional parameters.
+     * @return Google_Comment
+     */
+    public function insert($fileId, Google_Comment $postBody, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'postBody' => $postBody);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('insert', array($params));
+      if ($this->useObjects()) {
+        return new Google_Comment($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Lists a file's comments. (comments.list)
+     *
+     * @param string $fileId The ID of the file.
+     * @param array $optParams Optional parameters.
+     *
+     * @opt_param bool includeDeleted If set, all comments and replies, including deleted comments and replies (with content stripped) will be returned.
+     * @opt_param int maxResults The maximum number of discussions to include in the response, used for paging.
+     * @opt_param string pageToken The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of "nextPageToken" from the previous response.
+     * @opt_param string updatedMin Only discussions that were updated after this timestamp will be returned. Formatted as an RFC 3339 timestamp.
+     * @return Google_CommentList
+     */
+    public function listComments($fileId, $optParams = array()) {
+      $params = array('fileId' => $fileId);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('list', array($params));
+      if ($this->useObjects()) {
+        return new Google_CommentList($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Updates an existing comment. This method supports patch semantics. (comments.patch)
+     *
+     * @param string $fileId The ID of the file.
+     * @param string $commentId The ID of the comment.
+     * @param Google_Comment $postBody
+     * @param array $optParams Optional parameters.
+     * @return Google_Comment
+     */
+    public function patch($fileId, $commentId, Google_Comment $postBody, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'commentId' => $commentId, 'postBody' => $postBody);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('patch', array($params));
+      if ($this->useObjects()) {
+        return new Google_Comment($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Updates an existing comment. (comments.update)
+     *
+     * @param string $fileId The ID of the file.
+     * @param string $commentId The ID of the comment.
+     * @param Google_Comment $postBody
+     * @param array $optParams Optional parameters.
+     * @return Google_Comment
+     */
+    public function update($fileId, $commentId, Google_Comment $postBody, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'commentId' => $commentId, 'postBody' => $postBody);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('update', array($params));
+      if ($this->useObjects()) {
+        return new Google_Comment($data);
+      } else {
+        return $data;
+      }
+    }
+  }
+
+  /**
+   * The "files" collection of methods.
+   * Typical usage is:
+   *  <code>
+   *   $driveService = new Google_DriveService(...);
+   *   $files = $driveService->files;
+   *  </code>
+   */
+  class Google_FilesServiceResource extends Google_ServiceResource {
+
+
+    /**
+     * Creates a copy of the specified file. (files.copy)
+     *
+     * @param string $fileId The ID of the file to copy.
+     * @param Google_DriveFile $postBody
+     * @param array $optParams Optional parameters.
+     *
+     * @opt_param bool convert Whether to convert this file to the corresponding Google Docs format.
+     * @opt_param bool ocr Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
+     * @opt_param string ocrLanguage If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.
+     * @opt_param bool pinned Whether to pin the head revision of the new copy.
+     * @opt_param string timedTextLanguage The language of the timed text.
+     * @opt_param string timedTextTrackName The timed text track name.
+     * @return Google_DriveFile
+     */
+    public function copy($fileId, Google_DriveFile $postBody, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'postBody' => $postBody);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('copy', array($params));
+      if ($this->useObjects()) {
+        return new Google_DriveFile($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Permanently deletes a file by ID. Skips the trash. (files.delete)
+     *
+     * @param string $fileId The ID of the file to delete.
+     * @param array $optParams Optional parameters.
+     */
+    public function delete($fileId, $optParams = array()) {
+      $params = array('fileId' => $fileId);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('delete', array($params));
+      return $data;
+    }
+    /**
+     * Gets a file's metadata by ID. (files.get)
+     *
+     * @param string $fileId The ID for the file in question.
+     * @param array $optParams Optional parameters.
+     *
+     * @opt_param string projection This parameter is deprecated and has no function.
+     * @opt_param bool updateViewedDate Whether to update the view date after successfully retrieving the file.
+     * @return Google_DriveFile
+     */
+    public function get($fileId, $optParams = array()) {
+      $params = array('fileId' => $fileId);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('get', array($params));
+      if ($this->useObjects()) {
+        return new Google_DriveFile($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Insert a new file. (files.insert)
+     *
+     * @param Google_DriveFile $postBody
+     * @param array $optParams Optional parameters.
+     *
+     * @opt_param bool convert Whether to convert this file to the corresponding Google Docs format.
+     * @opt_param bool ocr Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
+     * @opt_param string ocrLanguage If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.
+     * @opt_param bool pinned Whether to pin the head revision of the uploaded file.
+     * @opt_param string timedTextLanguage The language of the timed text.
+     * @opt_param string timedTextTrackName The timed text track name.
+     * @opt_param bool useContentAsIndexableText Whether to use the content as indexable text.
+     * @return Google_DriveFile
+     */
+    public function insert(Google_DriveFile $postBody, $optParams = array()) {
+      $params = array('postBody' => $postBody);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('insert', array($params));
+      if ($this->useObjects()) {
+        return new Google_DriveFile($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Lists the user's files. (files.list)
+     *
+     * @param array $optParams Optional parameters.
+     *
+     * @opt_param int maxResults Maximum number of files to return.
+     * @opt_param string pageToken Page token for files.
+     * @opt_param string projection This parameter is deprecated and has no function.
+     * @opt_param string q Query string for searching files.
+     * @return Google_FileList
+     */
+    public function listFiles($optParams = array()) {
+      $params = array();
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('list', array($params));
+      if ($this->useObjects()) {
+        return new Google_FileList($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Updates file metadata and/or content. This method supports patch semantics. (files.patch)
+     *
+     * @param string $fileId The ID of the file to update.
+     * @param Google_DriveFile $postBody
+     * @param array $optParams Optional parameters.
+     *
+     * @opt_param bool convert Whether to convert this file to the corresponding Google Docs format.
+     * @opt_param bool newRevision Whether a blob upload should create a new revision. If not set or false, the blob data in the current head revision is replaced. If true, a new blob is created as head revision, and previous revisions are preserved (causing increased use of the user's data storage quota).
+     * @opt_param bool ocr Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
+     * @opt_param string ocrLanguage If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.
+     * @opt_param bool pinned Whether to pin the new revision.
+     * @opt_param bool setModifiedDate Whether to set the modified date with the supplied modified date.
+     * @opt_param string timedTextLanguage The language of the timed text.
+     * @opt_param string timedTextTrackName The timed text track name.
+     * @opt_param bool updateViewedDate Whether to update the view date after successfully updating the file.
+     * @opt_param bool useContentAsIndexableText Whether to use the content as indexable text.
+     * @return Google_DriveFile
+     */
+    public function patch($fileId, Google_DriveFile $postBody, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'postBody' => $postBody);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('patch', array($params));
+      if ($this->useObjects()) {
+        return new Google_DriveFile($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Set the file's updated time to the current server time. (files.touch)
+     *
+     * @param string $fileId The ID of the file to update.
+     * @param array $optParams Optional parameters.
+     * @return Google_DriveFile
+     */
+    public function touch($fileId, $optParams = array()) {
+      $params = array('fileId' => $fileId);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('touch', array($params));
+      if ($this->useObjects()) {
+        return new Google_DriveFile($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Moves a file to the trash. (files.trash)
+     *
+     * @param string $fileId The ID of the file to trash.
+     * @param array $optParams Optional parameters.
+     * @return Google_DriveFile
+     */
+    public function trash($fileId, $optParams = array()) {
+      $params = array('fileId' => $fileId);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('trash', array($params));
+      if ($this->useObjects()) {
+        return new Google_DriveFile($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Restores a file from the trash. (files.untrash)
+     *
+     * @param string $fileId The ID of the file to untrash.
+     * @param array $optParams Optional parameters.
+     * @return Google_DriveFile
+     */
+    public function untrash($fileId, $optParams = array()) {
+      $params = array('fileId' => $fileId);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('untrash', array($params));
+      if ($this->useObjects()) {
+        return new Google_DriveFile($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Updates file metadata and/or content. (files.update)
+     *
+     * @param string $fileId The ID of the file to update.
+     * @param Google_DriveFile $postBody
+     * @param array $optParams Optional parameters.
+     *
+     * @opt_param bool convert Whether to convert this file to the corresponding Google Docs format.
+     * @opt_param bool newRevision Whether a blob upload should create a new revision. If not set or false, the blob data in the current head revision is replaced. If true, a new blob is created as head revision, and previous revisions are preserved (causing increased use of the user's data storage quota).
+     * @opt_param bool ocr Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
+     * @opt_param string ocrLanguage If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.
+     * @opt_param bool pinned Whether to pin the new revision.
+     * @opt_param bool setModifiedDate Whether to set the modified date with the supplied modified date.
+     * @opt_param string timedTextLanguage The language of the timed text.
+     * @opt_param string timedTextTrackName The timed text track name.
+     * @opt_param bool updateViewedDate Whether to update the view date after successfully updating the file.
+     * @opt_param bool useContentAsIndexableText Whether to use the content as indexable text.
+     * @return Google_DriveFile
+     */
+    public function update($fileId, Google_DriveFile $postBody, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'postBody' => $postBody);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('update', array($params));
+      if ($this->useObjects()) {
+        return new Google_DriveFile($data);
+      } else {
+        return $data;
+      }
+    }
+  }
+
+  /**
+   * The "parents" collection of methods.
+   * Typical usage is:
+   *  <code>
+   *   $driveService = new Google_DriveService(...);
+   *   $parents = $driveService->parents;
+   *  </code>
+   */
+  class Google_ParentsServiceResource extends Google_ServiceResource {
+
+
+    /**
+     * Removes a parent from a file. (parents.delete)
+     *
+     * @param string $fileId The ID of the file.
+     * @param string $parentId The ID of the parent.
+     * @param array $optParams Optional parameters.
+     */
+    public function delete($fileId, $parentId, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'parentId' => $parentId);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('delete', array($params));
+      return $data;
+    }
+    /**
+     * Gets a specific parent reference. (parents.get)
+     *
+     * @param string $fileId The ID of the file.
+     * @param string $parentId The ID of the parent.
+     * @param array $optParams Optional parameters.
+     * @return Google_ParentReference
+     */
+    public function get($fileId, $parentId, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'parentId' => $parentId);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('get', array($params));
+      if ($this->useObjects()) {
+        return new Google_ParentReference($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Adds a parent folder for a file. (parents.insert)
+     *
+     * @param string $fileId The ID of the file.
+     * @param Google_ParentReference $postBody
+     * @param array $optParams Optional parameters.
+     * @return Google_ParentReference
+     */
+    public function insert($fileId, Google_ParentReference $postBody, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'postBody' => $postBody);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('insert', array($params));
+      if ($this->useObjects()) {
+        return new Google_ParentReference($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Lists a file's parents. (parents.list)
+     *
+     * @param string $fileId The ID of the file.
+     * @param array $optParams Optional parameters.
+     * @return Google_ParentList
+     */
+    public function listParents($fileId, $optParams = array()) {
+      $params = array('fileId' => $fileId);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('list', array($params));
+      if ($this->useObjects()) {
+        return new Google_ParentList($data);
+      } else {
+        return $data;
+      }
+    }
+  }
+
+  /**
+   * The "permissions" collection of methods.
+   * Typical usage is:
+   *  <code>
+   *   $driveService = new Google_DriveService(...);
+   *   $permissions = $driveService->permissions;
+   *  </code>
+   */
+  class Google_PermissionsServiceResource extends Google_ServiceResource {
+
+
+    /**
+     * Deletes a permission from a file. (permissions.delete)
+     *
+     * @param string $fileId The ID for the file.
+     * @param string $permissionId The ID for the permission.
+     * @param array $optParams Optional parameters.
+     */
+    public function delete($fileId, $permissionId, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'permissionId' => $permissionId);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('delete', array($params));
+      return $data;
+    }
+    /**
+     * Gets a permission by ID. (permissions.get)
+     *
+     * @param string $fileId The ID for the file.
+     * @param string $permissionId The ID for the permission.
+     * @param array $optParams Optional parameters.
+     * @return Google_Permission
+     */
+    public function get($fileId, $permissionId, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'permissionId' => $permissionId);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('get', array($params));
+      if ($this->useObjects()) {
+        return new Google_Permission($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Inserts a permission for a file. (permissions.insert)
+     *
+     * @param string $fileId The ID for the file.
+     * @param Google_Permission $postBody
+     * @param array $optParams Optional parameters.
+     *
+     * @opt_param string emailMessage A custom message to include in notification emails.
+     * @opt_param bool sendNotificationEmails Whether to send notification emails when sharing to users or groups.
+     * @return Google_Permission
+     */
+    public function insert($fileId, Google_Permission $postBody, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'postBody' => $postBody);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('insert', array($params));
+      if ($this->useObjects()) {
+        return new Google_Permission($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Lists a file's permissions. (permissions.list)
+     *
+     * @param string $fileId The ID for the file.
+     * @param array $optParams Optional parameters.
+     * @return Google_PermissionList
+     */
+    public function listPermissions($fileId, $optParams = array()) {
+      $params = array('fileId' => $fileId);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('list', array($params));
+      if ($this->useObjects()) {
+        return new Google_PermissionList($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Updates a permission. This method supports patch semantics. (permissions.patch)
+     *
+     * @param string $fileId The ID for the file.
+     * @param string $permissionId The ID for the permission.
+     * @param Google_Permission $postBody
+     * @param array $optParams Optional parameters.
+     *
+     * @opt_param bool transferOwnership Whether changing a role to 'owner' should also downgrade the current owners to writers.
+     * @return Google_Permission
+     */
+    public function patch($fileId, $permissionId, Google_Permission $postBody, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'permissionId' => $permissionId, 'postBody' => $postBody);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('patch', array($params));
+      if ($this->useObjects()) {
+        return new Google_Permission($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Updates a permission. (permissions.update)
+     *
+     * @param string $fileId The ID for the file.
+     * @param string $permissionId The ID for the permission.
+     * @param Google_Permission $postBody
+     * @param array $optParams Optional parameters.
+     *
+     * @opt_param bool transferOwnership Whether changing a role to 'owner' should also downgrade the current owners to writers.
+     * @return Google_Permission
+     */
+    public function update($fileId, $permissionId, Google_Permission $postBody, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'permissionId' => $permissionId, 'postBody' => $postBody);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('update', array($params));
+      if ($this->useObjects()) {
+        return new Google_Permission($data);
+      } else {
+        return $data;
+      }
+    }
+  }
+
+  /**
+   * The "properties" collection of methods.
+   * Typical usage is:
+   *  <code>
+   *   $driveService = new Google_DriveService(...);
+   *   $properties = $driveService->properties;
+   *  </code>
+   */
+  class Google_PropertiesServiceResource extends Google_ServiceResource {
+
+
+    /**
+     * Deletes a property. (properties.delete)
+     *
+     * @param string $fileId The ID of the file.
+     * @param string $propertyKey The key of the property.
+     * @param array $optParams Optional parameters.
+     *
+     * @opt_param string visibility The visibility of the property.
+     */
+    public function delete($fileId, $propertyKey, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'propertyKey' => $propertyKey);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('delete', array($params));
+      return $data;
+    }
+    /**
+     * Gets a property by its key. (properties.get)
+     *
+     * @param string $fileId The ID of the file.
+     * @param string $propertyKey The key of the property.
+     * @param array $optParams Optional parameters.
+     *
+     * @opt_param string visibility The visibility of the property.
+     * @return Google_Property
+     */
+    public function get($fileId, $propertyKey, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'propertyKey' => $propertyKey);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('get', array($params));
+      if ($this->useObjects()) {
+        return new Google_Property($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Adds a property to a file. (properties.insert)
+     *
+     * @param string $fileId The ID of the file.
+     * @param Google_Property $postBody
+     * @param array $optParams Optional parameters.
+     * @return Google_Property
+     */
+    public function insert($fileId, Google_Property $postBody, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'postBody' => $postBody);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('insert', array($params));
+      if ($this->useObjects()) {
+        return new Google_Property($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Lists a file's properties. (properties.list)
+     *
+     * @param string $fileId The ID of the file.
+     * @param array $optParams Optional parameters.
+     * @return Google_PropertyList
+     */
+    public function listProperties($fileId, $optParams = array()) {
+      $params = array('fileId' => $fileId);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('list', array($params));
+      if ($this->useObjects()) {
+        return new Google_PropertyList($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Updates a property. This method supports patch semantics. (properties.patch)
+     *
+     * @param string $fileId The ID of the file.
+     * @param string $propertyKey The key of the property.
+     * @param Google_Property $postBody
+     * @param array $optParams Optional parameters.
+     *
+     * @opt_param string visibility The visibility of the property.
+     * @return Google_Property
+     */
+    public function patch($fileId, $propertyKey, Google_Property $postBody, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'propertyKey' => $propertyKey, 'postBody' => $postBody);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('patch', array($params));
+      if ($this->useObjects()) {
+        return new Google_Property($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Updates a property. (properties.update)
+     *
+     * @param string $fileId The ID of the file.
+     * @param string $propertyKey The key of the property.
+     * @param Google_Property $postBody
+     * @param array $optParams Optional parameters.
+     *
+     * @opt_param string visibility The visibility of the property.
+     * @return Google_Property
+     */
+    public function update($fileId, $propertyKey, Google_Property $postBody, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'propertyKey' => $propertyKey, 'postBody' => $postBody);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('update', array($params));
+      if ($this->useObjects()) {
+        return new Google_Property($data);
+      } else {
+        return $data;
+      }
+    }
+  }
+
+  /**
+   * The "replies" collection of methods.
+   * Typical usage is:
+   *  <code>
+   *   $driveService = new Google_DriveService(...);
+   *   $replies = $driveService->replies;
+   *  </code>
+   */
+  class Google_RepliesServiceResource extends Google_ServiceResource {
+
+
+    /**
+     * Deletes a reply. (replies.delete)
+     *
+     * @param string $fileId The ID of the file.
+     * @param string $commentId The ID of the comment.
+     * @param string $replyId The ID of the reply.
+     * @param array $optParams Optional parameters.
+     */
+    public function delete($fileId, $commentId, $replyId, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'commentId' => $commentId, 'replyId' => $replyId);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('delete', array($params));
+      return $data;
+    }
+    /**
+     * Gets a reply. (replies.get)
+     *
+     * @param string $fileId The ID of the file.
+     * @param string $commentId The ID of the comment.
+     * @param string $replyId The ID of the reply.
+     * @param array $optParams Optional parameters.
+     *
+     * @opt_param bool includeDeleted If set, this will succeed when retrieving a deleted reply.
+     * @return Google_CommentReply
+     */
+    public function get($fileId, $commentId, $replyId, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'commentId' => $commentId, 'replyId' => $replyId);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('get', array($params));
+      if ($this->useObjects()) {
+        return new Google_CommentReply($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Creates a new reply to the given comment. (replies.insert)
+     *
+     * @param string $fileId The ID of the file.
+     * @param string $commentId The ID of the comment.
+     * @param Google_CommentReply $postBody
+     * @param array $optParams Optional parameters.
+     * @return Google_CommentReply
+     */
+    public function insert($fileId, $commentId, Google_CommentReply $postBody, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'commentId' => $commentId, 'postBody' => $postBody);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('insert', array($params));
+      if ($this->useObjects()) {
+        return new Google_CommentReply($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Lists all of the replies to a comment. (replies.list)
+     *
+     * @param string $fileId The ID of the file.
+     * @param string $commentId The ID of the comment.
+     * @param array $optParams Optional parameters.
+     *
+     * @opt_param bool includeDeleted If set, all replies, including deleted replies (with content stripped) will be returned.
+     * @opt_param int maxResults The maximum number of replies to include in the response, used for paging.
+     * @opt_param string pageToken The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of "nextPageToken" from the previous response.
+     * @return Google_CommentReplyList
+     */
+    public function listReplies($fileId, $commentId, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'commentId' => $commentId);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('list', array($params));
+      if ($this->useObjects()) {
+        return new Google_CommentReplyList($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Updates an existing reply. This method supports patch semantics. (replies.patch)
+     *
+     * @param string $fileId The ID of the file.
+     * @param string $commentId The ID of the comment.
+     * @param string $replyId The ID of the reply.
+     * @param Google_CommentReply $postBody
+     * @param array $optParams Optional parameters.
+     * @return Google_CommentReply
+     */
+    public function patch($fileId, $commentId, $replyId, Google_CommentReply $postBody, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'commentId' => $commentId, 'replyId' => $replyId, 'postBody' => $postBody);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('patch', array($params));
+      if ($this->useObjects()) {
+        return new Google_CommentReply($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Updates an existing reply. (replies.update)
+     *
+     * @param string $fileId The ID of the file.
+     * @param string $commentId The ID of the comment.
+     * @param string $replyId The ID of the reply.
+     * @param Google_CommentReply $postBody
+     * @param array $optParams Optional parameters.
+     * @return Google_CommentReply
+     */
+    public function update($fileId, $commentId, $replyId, Google_CommentReply $postBody, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'commentId' => $commentId, 'replyId' => $replyId, 'postBody' => $postBody);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('update', array($params));
+      if ($this->useObjects()) {
+        return new Google_CommentReply($data);
+      } else {
+        return $data;
+      }
+    }
+  }
+
+  /**
+   * The "revisions" collection of methods.
+   * Typical usage is:
+   *  <code>
+   *   $driveService = new Google_DriveService(...);
+   *   $revisions = $driveService->revisions;
+   *  </code>
+   */
+  class Google_RevisionsServiceResource extends Google_ServiceResource {
+
+
+    /**
+     * Removes a revision. (revisions.delete)
+     *
+     * @param string $fileId The ID of the file.
+     * @param string $revisionId The ID of the revision.
+     * @param array $optParams Optional parameters.
+     */
+    public function delete($fileId, $revisionId, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'revisionId' => $revisionId);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('delete', array($params));
+      return $data;
+    }
+    /**
+     * Gets a specific revision. (revisions.get)
+     *
+     * @param string $fileId The ID of the file.
+     * @param string $revisionId The ID of the revision.
+     * @param array $optParams Optional parameters.
+     * @return Google_Revision
+     */
+    public function get($fileId, $revisionId, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'revisionId' => $revisionId);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('get', array($params));
+      if ($this->useObjects()) {
+        return new Google_Revision($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Lists a file's revisions. (revisions.list)
+     *
+     * @param string $fileId The ID of the file.
+     * @param array $optParams Optional parameters.
+     * @return Google_RevisionList
+     */
+    public function listRevisions($fileId, $optParams = array()) {
+      $params = array('fileId' => $fileId);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('list', array($params));
+      if ($this->useObjects()) {
+        return new Google_RevisionList($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Updates a revision. This method supports patch semantics. (revisions.patch)
+     *
+     * @param string $fileId The ID for the file.
+     * @param string $revisionId The ID for the revision.
+     * @param Google_Revision $postBody
+     * @param array $optParams Optional parameters.
+     * @return Google_Revision
+     */
+    public function patch($fileId, $revisionId, Google_Revision $postBody, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'revisionId' => $revisionId, 'postBody' => $postBody);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('patch', array($params));
+      if ($this->useObjects()) {
+        return new Google_Revision($data);
+      } else {
+        return $data;
+      }
+    }
+    /**
+     * Updates a revision. (revisions.update)
+     *
+     * @param string $fileId The ID for the file.
+     * @param string $revisionId The ID for the revision.
+     * @param Google_Revision $postBody
+     * @param array $optParams Optional parameters.
+     * @return Google_Revision
+     */
+    public function update($fileId, $revisionId, Google_Revision $postBody, $optParams = array()) {
+      $params = array('fileId' => $fileId, 'revisionId' => $revisionId, 'postBody' => $postBody);
+      $params = array_merge($params, $optParams);
+      $data = $this->__call('update', array($params));
+      if ($this->useObjects()) {
+        return new Google_Revision($data);
+      } else {
+        return $data;
+      }
+    }
+  }
+
+/**
+ * Service definition for Google_Drive (v2).
+ *
+ * <p>
+ * The API to interact with Drive.
+ * </p>
+ *
+ * <p>
+ * For more information about this service, see the
+ * <a href="https://developers.google.com/drive/" target="_blank">API Documentation</a>
+ * </p>
+ *
+ * @author Google, Inc.
+ */
+class Google_DriveService extends Google_Service {
+  public $about;
+  public $apps;
+  public $changes;
+  public $children;
+  public $comments;
+  public $files;
+  public $parents;
+  public $permissions;
+  public $properties;
+  public $replies;
+  public $revisions;
+  /**
+   * Constructs the internal representation of the Drive service.
+   *
+   * @param Google_Client $client
+   */
+  public function __construct(Google_Client $client) {
+    $this->servicePath = 'drive/v2/';
+    $this->version = 'v2';
+    $this->serviceName = 'drive';
+
+    $client->addService($this->serviceName, $this->version);
+    $this->about = new Google_AboutServiceResource($this, $this->serviceName, 'about', json_decode('{"methods": {"get": {"id": "drive.about.get", "path": "about", "httpMethod": "GET", "parameters": {"includeSubscribed": {"type": "boolean", "default": "true", "location": "query"}, "maxChangeIdCount": {"type": "string", "default": "1", "format": "int64", "location": "query"}, "startChangeId": {"type": "string", "format": "int64", "location": "query"}}, "response": {"$ref": "About"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}}}', true));
+    $this->apps = new Google_AppsServiceResource($this, $this->serviceName, 'apps', json_decode('{"methods": {"get": {"id": "drive.apps.get", "path": "apps/{appId}", "httpMethod": "GET", "parameters": {"appId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "App"}, "scopes": ["https://www.googleapis.com/auth/drive.apps.readonly"]}, "list": {"id": "drive.apps.list", "path": "apps", "httpMethod": "GET", "response": {"$ref": "AppList"}, "scopes": ["https://www.googleapis.com/auth/drive.apps.readonly"]}}}', true));
+    $this->changes = new Google_ChangesServiceResource($this, $this->serviceName, 'changes', json_decode('{"methods": {"get": {"id": "drive.changes.get", "path": "changes/{changeId}", "httpMethod": "GET", "parameters": {"changeId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "Change"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}, "list": {"id": "drive.changes.list", "path": "changes", "httpMethod": "GET", "parameters": {"includeDeleted": {"type": "boolean", "default": "true", "location": "query"}, "includeSubscribed": {"type": "boolean", "default": "true", "location": "query"}, "maxResults": {"type": "integer", "default": "100", "format": "int32", "minimum": "0", "location": "query"}, "pageToken": {"type": "string", "location": "query"}, "startChangeId": {"type": "string", "format": "int64", "location": "query"}}, "response": {"$ref": "ChangeList"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"], "supportsSubscription": true}}}', true));
+    $this->children = new Google_ChildrenServiceResource($this, $this->serviceName, 'children', json_decode('{"methods": {"delete": {"id": "drive.children.delete", "path": "files/{folderId}/children/{childId}", "httpMethod": "DELETE", "parameters": {"childId": {"type": "string", "required": true, "location": "path"}, "folderId": {"type": "string", "required": true, "location": "path"}}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "get": {"id": "drive.children.get", "path": "files/{folderId}/children/{childId}", "httpMethod": "GET", "parameters": {"childId": {"type": "string", "required": true, "location": "path"}, "folderId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "ChildReference"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}, "insert": {"id": "drive.children.insert", "path": "files/{folderId}/children", "httpMethod": "POST", "parameters": {"folderId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "ChildReference"}, "response": {"$ref": "ChildReference"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "list": {"id": "drive.children.list", "path": "files/{folderId}/children", "httpMethod": "GET", "parameters": {"folderId": {"type": "string", "required": true, "location": "path"}, "maxResults": {"type": "integer", "default": "100", "format": "int32", "minimum": "0", "location": "query"}, "pageToken": {"type": "string", "location": "query"}, "q": {"type": "string", "location": "query"}}, "response": {"$ref": "ChildList"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}}}', true));
+    $this->comments = new Google_CommentsServiceResource($this, $this->serviceName, 'comments', json_decode('{"methods": {"delete": {"id": "drive.comments.delete", "path": "files/{fileId}/comments/{commentId}", "httpMethod": "DELETE", "parameters": {"commentId": {"type": "string", "required": true, "location": "path"}, "fileId": {"type": "string", "required": true, "location": "path"}}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.readonly"]}, "get": {"id": "drive.comments.get", "path": "files/{fileId}/comments/{commentId}", "httpMethod": "GET", "parameters": {"commentId": {"type": "string", "required": true, "location": "path"}, "fileId": {"type": "string", "required": true, "location": "path"}, "includeDeleted": {"type": "boolean", "default": "false", "location": "query"}}, "response": {"$ref": "Comment"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.readonly"]}, "insert": {"id": "drive.comments.insert", "path": "files/{fileId}/comments", "httpMethod": "POST", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "Comment"}, "response": {"$ref": "Comment"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.readonly"]}, "list": {"id": "drive.comments.list", "path": "files/{fileId}/comments", "httpMethod": "GET", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "includeDeleted": {"type": "boolean", "default": "false", "location": "query"}, "maxResults": {"type": "integer", "default": "20", "format": "int32", "minimum": "0", "maximum": "100", "location": "query"}, "pageToken": {"type": "string", "location": "query"}, "updatedMin": {"type": "string", "location": "query"}}, "response": {"$ref": "CommentList"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.readonly"]}, "patch": {"id": "drive.comments.patch", "path": "files/{fileId}/comments/{commentId}", "httpMethod": "PATCH", "parameters": {"commentId": {"type": "string", "required": true, "location": "path"}, "fileId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "Comment"}, "response": {"$ref": "Comment"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "update": {"id": "drive.comments.update", "path": "files/{fileId}/comments/{commentId}", "httpMethod": "PUT", "parameters": {"commentId": {"type": "string", "required": true, "location": "path"}, "fileId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "Comment"}, "response": {"$ref": "Comment"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}}}', true));
+    $this->files = new Google_FilesServiceResource($this, $this->serviceName, 'files', json_decode('{"methods": {"copy": {"id": "drive.files.copy", "path": "files/{fileId}/copy", "httpMethod": "POST", "parameters": {"convert": {"type": "boolean", "default": "false", "location": "query"}, "fileId": {"type": "string", "required": true, "location": "path"}, "ocr": {"type": "boolean", "default": "false", "location": "query"}, "ocrLanguage": {"type": "string", "location": "query"}, "pinned": {"type": "boolean", "default": "false", "location": "query"}, "timedTextLanguage": {"type": "string", "location": "query"}, "timedTextTrackName": {"type": "string", "location": "query"}}, "request": {"$ref": "File"}, "response": {"$ref": "File"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "delete": {"id": "drive.files.delete", "path": "files/{fileId}", "httpMethod": "DELETE", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "get": {"id": "drive.files.get", "path": "files/{fileId}", "httpMethod": "GET", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "projection": {"type": "string", "enum": ["BASIC", "FULL"], "location": "query"}, "updateViewedDate": {"type": "boolean", "default": "false", "location": "query"}}, "response": {"$ref": "File"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"], "supportsSubscription": true}, "insert": {"id": "drive.files.insert", "path": "files", "httpMethod": "POST", "parameters": {"convert": {"type": "boolean", "default": "false", "location": "query"}, "ocr": {"type": "boolean", "default": "false", "location": "query"}, "ocrLanguage": {"type": "string", "location": "query"}, "pinned": {"type": "boolean", "default": "false", "location": "query"}, "timedTextLanguage": {"type": "string", "location": "query"}, "timedTextTrackName": {"type": "string", "location": "query"}, "useContentAsIndexableText": {"type": "boolean", "default": "false", "location": "query"}}, "request": {"$ref": "File"}, "response": {"$ref": "File"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"], "supportsMediaUpload": true, "mediaUpload": {"accept": ["*/*"], "maxSize": "10GB", "protocols": {"simple": {"multipart": true, "path": "/upload/drive/v2/files"}, "resumable": {"multipart": true, "path": "/resumable/upload/drive/v2/files"}}}, "supportsSubscription": true}, "list": {"id": "drive.files.list", "path": "files", "httpMethod": "GET", "parameters": {"maxResults": {"type": "integer", "default": "100", "format": "int32", "minimum": "0", "location": "query"}, "pageToken": {"type": "string", "location": "query"}, "projection": {"type": "string", "enum": ["BASIC", "FULL"], "location": "query"}, "q": {"type": "string", "location": "query"}}, "response": {"$ref": "FileList"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}, "patch": {"id": "drive.files.patch", "path": "files/{fileId}", "httpMethod": "PATCH", "parameters": {"convert": {"type": "boolean", "default": "false", "location": "query"}, "fileId": {"type": "string", "required": true, "location": "path"}, "newRevision": {"type": "boolean", "default": "true", "location": "query"}, "ocr": {"type": "boolean", "default": "false", "location": "query"}, "ocrLanguage": {"type": "string", "location": "query"}, "pinned": {"type": "boolean", "default": "false", "location": "query"}, "setModifiedDate": {"type": "boolean", "default": "false", "location": "query"}, "timedTextLanguage": {"type": "string", "location": "query"}, "timedTextTrackName": {"type": "string", "location": "query"}, "updateViewedDate": {"type": "boolean", "default": "true", "location": "query"}, "useContentAsIndexableText": {"type": "boolean", "default": "false", "location": "query"}}, "request": {"$ref": "File"}, "response": {"$ref": "File"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.scripts"]}, "touch": {"id": "drive.files.touch", "path": "files/{fileId}/touch", "httpMethod": "POST", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "File"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "trash": {"id": "drive.files.trash", "path": "files/{fileId}/trash", "httpMethod": "POST", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "File"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "untrash": {"id": "drive.files.untrash", "path": "files/{fileId}/untrash", "httpMethod": "POST", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "File"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "update": {"id": "drive.files.update", "path": "files/{fileId}", "httpMethod": "PUT", "parameters": {"convert": {"type": "boolean", "default": "false", "location": "query"}, "fileId": {"type": "string", "required": true, "location": "path"}, "newRevision": {"type": "boolean", "default": "true", "location": "query"}, "ocr": {"type": "boolean", "default": "false", "location": "query"}, "ocrLanguage": {"type": "string", "location": "query"}, "pinned": {"type": "boolean", "default": "false", "location": "query"}, "setModifiedDate": {"type": "boolean", "default": "false", "location": "query"}, "timedTextLanguage": {"type": "string", "location": "query"}, "timedTextTrackName": {"type": "string", "location": "query"}, "updateViewedDate": {"type": "boolean", "default": "true", "location": "query"}, "useContentAsIndexableText": {"type": "boolean", "default": "false", "location": "query"}}, "request": {"$ref": "File"}, "response": {"$ref": "File"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.scripts"], "supportsMediaUpload": true, "mediaUpload": {"accept": ["*/*"], "maxSize": "10GB", "protocols": {"simple": {"multipart": true, "path": "/upload/drive/v2/files/{fileId}"}, "resumable": {"multipart": true, "path": "/resumable/upload/drive/v2/files/{fileId}"}}}}}}', true));
+    $this->parents = new Google_ParentsServiceResource($this, $this->serviceName, 'parents', json_decode('{"methods": {"delete": {"id": "drive.parents.delete", "path": "files/{fileId}/parents/{parentId}", "httpMethod": "DELETE", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "parentId": {"type": "string", "required": true, "location": "path"}}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "get": {"id": "drive.parents.get", "path": "files/{fileId}/parents/{parentId}", "httpMethod": "GET", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "parentId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "ParentReference"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}, "insert": {"id": "drive.parents.insert", "path": "files/{fileId}/parents", "httpMethod": "POST", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "ParentReference"}, "response": {"$ref": "ParentReference"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "list": {"id": "drive.parents.list", "path": "files/{fileId}/parents", "httpMethod": "GET", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "ParentList"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}}}', true));
+    $this->permissions = new Google_PermissionsServiceResource($this, $this->serviceName, 'permissions', json_decode('{"methods": {"delete": {"id": "drive.permissions.delete", "path": "files/{fileId}/permissions/{permissionId}", "httpMethod": "DELETE", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "permissionId": {"type": "string", "required": true, "location": "path"}}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "get": {"id": "drive.permissions.get", "path": "files/{fileId}/permissions/{permissionId}", "httpMethod": "GET", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "permissionId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "Permission"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}, "insert": {"id": "drive.permissions.insert", "path": "files/{fileId}/permissions", "httpMethod": "POST", "parameters": {"emailMessage": {"type": "string", "location": "query"}, "fileId": {"type": "string", "required": true, "location": "path"}, "sendNotificationEmails": {"type": "boolean", "default": "true", "location": "query"}}, "request": {"$ref": "Permission"}, "response": {"$ref": "Permission"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "list": {"id": "drive.permissions.list", "path": "files/{fileId}/permissions", "httpMethod": "GET", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "PermissionList"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}, "patch": {"id": "drive.permissions.patch", "path": "files/{fileId}/permissions/{permissionId}", "httpMethod": "PATCH", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "permissionId": {"type": "string", "required": true, "location": "path"}, "transferOwnership": {"type": "boolean", "default": "false", "location": "query"}}, "request": {"$ref": "Permission"}, "response": {"$ref": "Permission"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "update": {"id": "drive.permissions.update", "path": "files/{fileId}/permissions/{permissionId}", "httpMethod": "PUT", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "permissionId": {"type": "string", "required": true, "location": "path"}, "transferOwnership": {"type": "boolean", "default": "false", "location": "query"}}, "request": {"$ref": "Permission"}, "response": {"$ref": "Permission"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}}}', true));
+    $this->properties = new Google_PropertiesServiceResource($this, $this->serviceName, 'properties', json_decode('{"methods": {"delete": {"id": "drive.properties.delete", "path": "files/{fileId}/properties/{propertyKey}", "httpMethod": "DELETE", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "propertyKey": {"type": "string", "required": true, "location": "path"}, "visibility": {"type": "string", "default": "private", "location": "query"}}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "get": {"id": "drive.properties.get", "path": "files/{fileId}/properties/{propertyKey}", "httpMethod": "GET", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "propertyKey": {"type": "string", "required": true, "location": "path"}, "visibility": {"type": "string", "default": "private", "location": "query"}}, "response": {"$ref": "Property"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}, "insert": {"id": "drive.properties.insert", "path": "files/{fileId}/properties", "httpMethod": "POST", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "Property"}, "response": {"$ref": "Property"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "list": {"id": "drive.properties.list", "path": "files/{fileId}/properties", "httpMethod": "GET", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "PropertyList"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}, "patch": {"id": "drive.properties.patch", "path": "files/{fileId}/properties/{propertyKey}", "httpMethod": "PATCH", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "propertyKey": {"type": "string", "required": true, "location": "path"}, "visibility": {"type": "string", "default": "private", "location": "query"}}, "request": {"$ref": "Property"}, "response": {"$ref": "Property"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "update": {"id": "drive.properties.update", "path": "files/{fileId}/properties/{propertyKey}", "httpMethod": "PUT", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "propertyKey": {"type": "string", "required": true, "location": "path"}, "visibility": {"type": "string", "default": "private", "location": "query"}}, "request": {"$ref": "Property"}, "response": {"$ref": "Property"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}}}', true));
+    $this->replies = new Google_RepliesServiceResource($this, $this->serviceName, 'replies', json_decode('{"methods": {"delete": {"id": "drive.replies.delete", "path": "files/{fileId}/comments/{commentId}/replies/{replyId}", "httpMethod": "DELETE", "parameters": {"commentId": {"type": "string", "required": true, "location": "path"}, "fileId": {"type": "string", "required": true, "location": "path"}, "replyId": {"type": "string", "required": true, "location": "path"}}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "get": {"id": "drive.replies.get", "path": "files/{fileId}/comments/{commentId}/replies/{replyId}", "httpMethod": "GET", "parameters": {"commentId": {"type": "string", "required": true, "location": "path"}, "fileId": {"type": "string", "required": true, "location": "path"}, "includeDeleted": {"type": "boolean", "default": "false", "location": "query"}, "replyId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "CommentReply"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.readonly"]}, "insert": {"id": "drive.replies.insert", "path": "files/{fileId}/comments/{commentId}/replies", "httpMethod": "POST", "parameters": {"commentId": {"type": "string", "required": true, "location": "path"}, "fileId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "CommentReply"}, "response": {"$ref": "CommentReply"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "list": {"id": "drive.replies.list", "path": "files/{fileId}/comments/{commentId}/replies", "httpMethod": "GET", "parameters": {"commentId": {"type": "string", "required": true, "location": "path"}, "fileId": {"type": "string", "required": true, "location": "path"}, "includeDeleted": {"type": "boolean", "default": "false", "location": "query"}, "maxResults": {"type": "integer", "default": "20", "format": "int32", "minimum": "0", "maximum": "100", "location": "query"}, "pageToken": {"type": "string", "location": "query"}}, "response": {"$ref": "CommentReplyList"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.readonly"]}, "patch": {"id": "drive.replies.patch", "path": "files/{fileId}/comments/{commentId}/replies/{replyId}", "httpMethod": "PATCH", "parameters": {"commentId": {"type": "string", "required": true, "location": "path"}, "fileId": {"type": "string", "required": true, "location": "path"}, "replyId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "CommentReply"}, "response": {"$ref": "CommentReply"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "update": {"id": "drive.replies.update", "path": "files/{fileId}/comments/{commentId}/replies/{replyId}", "httpMethod": "PUT", "parameters": {"commentId": {"type": "string", "required": true, "location": "path"}, "fileId": {"type": "string", "required": true, "location": "path"}, "replyId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "CommentReply"}, "response": {"$ref": "CommentReply"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}}}', true));
+    $this->revisions = new Google_RevisionsServiceResource($this, $this->serviceName, 'revisions', json_decode('{"methods": {"delete": {"id": "drive.revisions.delete", "path": "files/{fileId}/revisions/{revisionId}", "httpMethod": "DELETE", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "revisionId": {"type": "string", "required": true, "location": "path"}}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "get": {"id": "drive.revisions.get", "path": "files/{fileId}/revisions/{revisionId}", "httpMethod": "GET", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "revisionId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "Revision"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}, "list": {"id": "drive.revisions.list", "path": "files/{fileId}/revisions", "httpMethod": "GET", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}}, "response": {"$ref": "RevisionList"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.metadata.readonly", "https://www.googleapis.com/auth/drive.readonly"]}, "patch": {"id": "drive.revisions.patch", "path": "files/{fileId}/revisions/{revisionId}", "httpMethod": "PATCH", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "revisionId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "Revision"}, "response": {"$ref": "Revision"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}, "update": {"id": "drive.revisions.update", "path": "files/{fileId}/revisions/{revisionId}", "httpMethod": "PUT", "parameters": {"fileId": {"type": "string", "required": true, "location": "path"}, "revisionId": {"type": "string", "required": true, "location": "path"}}, "request": {"$ref": "Revision"}, "response": {"$ref": "Revision"}, "scopes": ["https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file"]}}}', true));
+
+  }
+}
+
+
+
+class Google_About extends Google_Model {
+  protected $__additionalRoleInfoType = 'Google_AboutAdditionalRoleInfo';
+  protected $__additionalRoleInfoDataType = 'array';
+  public $additionalRoleInfo;
+  public $domainSharingPolicy;
+  public $etag;
+  protected $__exportFormatsType = 'Google_AboutExportFormats';
+  protected $__exportFormatsDataType = 'array';
+  public $exportFormats;
+  protected $__featuresType = 'Google_AboutFeatures';
+  protected $__featuresDataType = 'array';
+  public $features;
+  protected $__importFormatsType = 'Google_AboutImportFormats';
+  protected $__importFormatsDataType = 'array';
+  public $importFormats;
+  public $isCurrentAppInstalled;
+  public $kind;
+  public $largestChangeId;
+  protected $__maxUploadSizesType = 'Google_AboutMaxUploadSizes';
+  protected $__maxUploadSizesDataType = 'array';
+  public $maxUploadSizes;
+  public $name;
+  public $permissionId;
+  public $quotaBytesTotal;
+  public $quotaBytesUsed;
+  public $quotaBytesUsedAggregate;
+  public $quotaBytesUsedInTrash;
+  public $remainingChangeIds;
+  public $rootFolderId;
+  public $selfLink;
+  protected $__userType = 'Google_User';
+  protected $__userDataType = '';
+  public $user;
+  public function setAdditionalRoleInfo(/* array(Google_AboutAdditionalRoleInfo) */ $additionalRoleInfo) {
+    $this->assertIsArray($additionalRoleInfo, 'Google_AboutAdditionalRoleInfo', __METHOD__);
+    $this->additionalRoleInfo = $additionalRoleInfo;
+  }
+  public function getAdditionalRoleInfo() {
+    return $this->additionalRoleInfo;
+  }
+  public function setDomainSharingPolicy($domainSharingPolicy) {
+    $this->domainSharingPolicy = $domainSharingPolicy;
+  }
+  public function getDomainSharingPolicy() {
+    return $this->domainSharingPolicy;
+  }
+  public function setEtag($etag) {
+    $this->etag = $etag;
+  }
+  public function getEtag() {
+    return $this->etag;
+  }
+  public function setExportFormats(/* array(Google_AboutExportFormats) */ $exportFormats) {
+    $this->assertIsArray($exportFormats, 'Google_AboutExportFormats', __METHOD__);
+    $this->exportFormats = $exportFormats;
+  }
+  public function getExportFormats() {
+    return $this->exportFormats;
+  }
+  public function setFeatures(/* array(Google_AboutFeatures) */ $features) {
+    $this->assertIsArray($features, 'Google_AboutFeatures', __METHOD__);
+    $this->features = $features;
+  }
+  public function getFeatures() {
+    return $this->features;
+  }
+  public function setImportFormats(/* array(Google_AboutImportFormats) */ $importFormats) {
+    $this->assertIsArray($importFormats, 'Google_AboutImportFormats', __METHOD__);
+    $this->importFormats = $importFormats;
+  }
+  public function getImportFormats() {
+    return $this->importFormats;
+  }
+  public function setIsCurrentAppInstalled($isCurrentAppInstalled) {
+    $this->isCurrentAppInstalled = $isCurrentAppInstalled;
+  }
+  public function getIsCurrentAppInstalled() {
+    return $this->isCurrentAppInstalled;
+  }
+  public function setKind($kind) {
+    $this->kind = $kind;
+  }
+  public function getKind() {
+    return $this->kind;
+  }
+  public function setLargestChangeId($largestChangeId) {
+    $this->largestChangeId = $largestChangeId;
+  }
+  public function getLargestChangeId() {
+    return $this->largestChangeId;
+  }
+  public function setMaxUploadSizes(/* array(Google_AboutMaxUploadSizes) */ $maxUploadSizes) {
+    $this->assertIsArray($maxUploadSizes, 'Google_AboutMaxUploadSizes', __METHOD__);
+    $this->maxUploadSizes = $maxUploadSizes;
+  }
+  public function getMaxUploadSizes() {
+    return $this->maxUploadSizes;
+  }
+  public function setName($name) {
+    $this->name = $name;
+  }
+  public function getName() {
+    return $this->name;
+  }
+  public function setPermissionId($permissionId) {
+    $this->permissionId = $permissionId;
+  }
+  public function getPermissionId() {
+    return $this->permissionId;
+  }
+  public function setQuotaBytesTotal($quotaBytesTotal) {
+    $this->quotaBytesTotal = $quotaBytesTotal;
+  }
+  public function getQuotaBytesTotal() {
+    return $this->quotaBytesTotal;
+  }
+  public function setQuotaBytesUsed($quotaBytesUsed) {
+    $this->quotaBytesUsed = $quotaBytesUsed;
+  }
+  public function getQuotaBytesUsed() {
+    return $this->quotaBytesUsed;
+  }
+  public function setQuotaBytesUsedAggregate($quotaBytesUsedAggregate) {
+    $this->quotaBytesUsedAggregate = $quotaBytesUsedAggregate;
+  }
+  public function getQuotaBytesUsedAggregate() {
+    return $this->quotaBytesUsedAggregate;
+  }
+  public function setQuotaBytesUsedInTrash($quotaBytesUsedInTrash) {
+    $this->quotaBytesUsedInTrash = $quotaBytesUsedInTrash;
+  }
+  public function getQuotaBytesUsedInTrash() {
+    return $this->quotaBytesUsedInTrash;
+  }
+  public function setRemainingChangeIds($remainingChangeIds) {
+    $this->remainingChangeIds = $remainingChangeIds;
+  }
+  public function getRemainingChangeIds() {
+    return $this->remainingChangeIds;
+  }
+  public function setRootFolderId($rootFolderId) {
+    $this->rootFolderId = $rootFolderId;
+  }
+  public function getRootFolderId() {
+    return $this->rootFolderId;
+  }
+  public function setSelfLink($selfLink) {
+    $this->selfLink = $selfLink;
+  }
+  public function getSelfLink() {
+    return $this->selfLink;
+  }
+  public function setUser(Google_User $user) {
+    $this->user = $user;
+  }
+  public function getUser() {
+    return $this->user;
+  }
+}
+
+class Google_AboutAdditionalRoleInfo extends Google_Model {
+  protected $__roleSetsType = 'Google_AboutAdditionalRoleInfoRoleSets';
+  protected $__roleSetsDataType = 'array';
+  public $roleSets;
+  public $type;
+  public function setRoleSets(/* array(Google_AboutAdditionalRoleInfoRoleSets) */ $roleSets) {
+    $this->assertIsArray($roleSets, 'Google_AboutAdditionalRoleInfoRoleSets', __METHOD__);
+    $this->roleSets = $roleSets;
+  }
+  public function getRoleSets() {
+    return $this->roleSets;
+  }
+  public function setType($type) {
+    $this->type = $type;
+  }
+  public function getType() {
+    return $this->type;
+  }
+}
+
+class Google_AboutAdditionalRoleInfoRoleSets extends Google_Model {
+  public $additionalRoles;
+  public $primaryRole;
+  public function setAdditionalRoles(/* array(Google_string) */ $additionalRoles) {
+    $this->assertIsArray($additionalRoles, 'Google_string', __METHOD__);
+    $this->additionalRoles = $additionalRoles;
+  }
+  public function getAdditionalRoles() {
+    return $this->additionalRoles;
+  }
+  public function setPrimaryRole($primaryRole) {
+    $this->primaryRole = $primaryRole;
+  }
+  public function getPrimaryRole() {
+    return $this->primaryRole;
+  }
+}
+
+class Google_AboutExportFormats extends Google_Model {
+  public $source;
+  public $targets;
+  public function setSource($source) {
+    $this->source = $source;
+  }
+  public function getSource() {
+    return $this->source;
+  }
+  public function setTargets(/* array(Google_string) */ $targets) {
+    $this->assertIsArray($targets, 'Google_string', __METHOD__);
+    $this->targets = $targets;
+  }
+  public function getTargets() {
+    return $this->targets;
+  }
+}
+
+class Google_AboutFeatures extends Google_Model {
+  public $featureName;
+  public $featureRate;
+  public function setFeatureName($featureName) {
+    $this->featureName = $featureName;
+  }
+  public function getFeatureName() {
+    return $this->featureName;
+  }
+  public function setFeatureRate($featureRate) {
+    $this->featureRate = $featureRate;
+  }
+  public function getFeatureRate() {
+    return $this->featureRate;
+  }
+}
+
+class Google_AboutImportFormats extends Google_Model {
+  public $source;
+  public $targets;
+  public function setSource($source) {
+    $this->source = $source;
+  }
+  public function getSource() {
+    return $this->source;
+  }
+  public function setTargets(/* array(Google_string) */ $targets) {
+    $this->assertIsArray($targets, 'Google_string', __METHOD__);
+    $this->targets = $targets;
+  }
+  public function getTargets() {
+    return $this->targets;
+  }
+}
+
+class Google_AboutMaxUploadSizes extends Google_Model {
+  public $size;
+  public $type;
+  public function setSize($size) {
+    $this->size = $size;
+  }
+  public function getSize() {
+    return $this->size;
+  }
+  public function setType($type) {
+    $this->type = $type;
+  }
+  public function getType() {
+    return $this->type;
+  }
+}
+
+class Google_App extends Google_Model {
+  public $authorized;
+  protected $__iconsType = 'Google_AppIcons';
+  protected $__iconsDataType = 'array';
+  public $icons;
+  public $id;
+  public $installed;
+  public $kind;
+  public $name;
+  public $objectType;
+  public $primaryFileExtensions;
+  public $primaryMimeTypes;
+  public $productUrl;
+  public $secondaryFileExtensions;
+  public $secondaryMimeTypes;
+  public $supportsCreate;
+  public $supportsImport;
+  public $useByDefault;
+  public function setAuthorized($authorized) {
+    $this->authorized = $authorized;
+  }
+  public function getAuthorized() {
+    return $this->authorized;
+  }
+  public function setIcons(/* array(Google_AppIcons) */ $icons) {
+    $this->assertIsArray($icons, 'Google_AppIcons', __METHOD__);
+    $this->icons = $icons;
+  }
+  public function getIcons() {
+    return $this->icons;
+  }
+  public function setId($id) {
+    $this->id = $id;
+  }
+  public function getId() {
+    return $this->id;
+  }
+  public function setInstalled($installed) {
+    $this->installed = $installed;
+  }
+  public function getInstalled() {
+    return $this->installed;
+  }
+  public function setKind($kind) {
+    $this->kind = $kind;
+  }
+  public function getKind() {
+    return $this->kind;
+  }
+  public function setName($name) {
+    $this->name = $name;
+  }
+  public function getName() {
+    return $this->name;
+  }
+  public function setObjectType($objectType) {
+    $this->objectType = $objectType;
+  }
+  public function getObjectType() {
+    return $this->objectType;
+  }
+  public function setPrimaryFileExtensions(/* array(Google_string) */ $primaryFileExtensions) {
+    $this->assertIsArray($primaryFileExtensions, 'Google_string', __METHOD__);
+    $this->primaryFileExtensions = $primaryFileExtensions;
+  }
+  public function getPrimaryFileExtensions() {
+    return $this->primaryFileExtensions;
+  }
+  public function setPrimaryMimeTypes(/* array(Google_string) */ $primaryMimeTypes) {
+    $this->assertIsArray($primaryMimeTypes, 'Google_string', __METHOD__);
+    $this->primaryMimeTypes = $primaryMimeTypes;
+  }
+  public function getPrimaryMimeTypes() {
+    return $this->primaryMimeTypes;
+  }
+  public function setProductUrl($productUrl) {
+    $this->productUrl = $productUrl;
+  }
+  public function getProductUrl() {
+    return $this->productUrl;
+  }
+  public function setSecondaryFileExtensions(/* array(Google_string) */ $secondaryFileExtensions) {
+    $this->assertIsArray($secondaryFileExtensions, 'Google_string', __METHOD__);
+    $this->secondaryFileExtensions = $secondaryFileExtensions;
+  }
+  public function getSecondaryFileExtensions() {
+    return $this->secondaryFileExtensions;
+  }
+  public function setSecondaryMimeTypes(/* array(Google_string) */ $secondaryMimeTypes) {
+    $this->assertIsArray($secondaryMimeTypes, 'Google_string', __METHOD__);
+    $this->secondaryMimeTypes = $secondaryMimeTypes;
+  }
+  public function getSecondaryMimeTypes() {
+    return $this->secondaryMimeTypes;
+  }
+  public function setSupportsCreate($supportsCreate) {
+    $this->supportsCreate = $supportsCreate;
+  }
+  public function getSupportsCreate() {
+    return $this->supportsCreate;
+  }
+  public function setSupportsImport($supportsImport) {
+    $this->supportsImport = $supportsImport;
+  }
+  public function getSupportsImport() {
+    return $this->supportsImport;
+  }
+  public function setUseByDefault($useByDefault) {
+    $this->useByDefault = $useByDefault;
+  }
+  public function getUseByDefault() {
+    return $this->useByDefault;
+  }
+}
+
+class Google_AppIcons extends Google_Model {
+  public $category;
+  public $iconUrl;
+  public $size;
+  public function setCategory($category) {
+    $this->category = $category;
+  }
+  public function getCategory() {
+    return $this->category;
+  }
+  public function setIconUrl($iconUrl) {
+    $this->iconUrl = $iconUrl;
+  }
+  public function getIconUrl() {
+    return $this->iconUrl;
+  }
+  public function setSize($size) {
+    $this->size = $size;
+  }
+  public function getSize() {
+    return $this->size;
+  }
+}
+
+class Google_AppList extends Google_Model {
+  public $etag;
+  protected $__itemsType = 'Google_App';
+  protected $__itemsDataType = 'array';
+  public $items;
+  public $kind;
+  public $selfLink;
+  public function setEtag($etag) {
+    $this->etag = $etag;
+  }
+  public function getEtag() {
+    return $this->etag;
+  }
+  public function setItems(/* array(Google_App) */ $items) {
+    $this->assertIsArray($items, 'Google_App', __METHOD__);
+    $this->items = $items;
+  }
+  public function getItems() {
+    return $this->items;
+  }
+  public function setKind($kind) {
+    $this->kind = $kind;
+  }
+  public function getKind() {
+    return $this->kind;
+  }
+  public function setSelfLink($selfLink) {
+    $this->selfLink = $selfLink;
+  }
+  public function getSelfLink() {
+    return $this->selfLink;
+  }
+}
+
+class Google_Change extends Google_Model {
+  public $deleted;
+  protected $__fileType = 'Google_DriveFile';
+  protected $__fileDataType = '';
+  public $file;
+  public $fileId;
+  public $id;
+  public $kind;
+  public $selfLink;
+  public function setDeleted($deleted) {
+    $this->deleted = $deleted;
+  }
+  public function getDeleted() {
+    return $this->deleted;
+  }
+  public function setFile(Google_DriveFile $file) {
+    $this->file = $file;
+  }
+  public function getFile() {
+    return $this->file;
+  }
+  public function setFileId($fileId) {
+    $this->fileId = $fileId;
+  }
+  public function getFileId() {
+    return $this->fileId;
+  }
+  public function setId($id) {
+    $this->id = $id;
+  }
+  public function getId() {
+    return $this->id;
+  }
+  public function setKind($kind) {
+    $this->kind = $kind;
+  }
+  public function getKind() {
+    return $this->kind;
+  }
+  public function setSelfLink($selfLink) {
+    $this->selfLink = $selfLink;
+  }
+  public function getSelfLink() {
+    return $this->selfLink;
+  }
+}
+
+class Google_ChangeList extends Google_Model {
+  public $etag;
+  protected $__itemsType = 'Google_Change';
+  protected $__itemsDataType = 'array';
+  public $items;
+  public $kind;
+  public $largestChangeId;
+  public $nextLink;
+  public $nextPageToken;
+  public $selfLink;
+  public function setEtag($etag) {
+    $this->etag = $etag;
+  }
+  public function getEtag() {
+    return $this->etag;
+  }
+  public function setItems(/* array(Google_Change) */ $items) {
+    $this->assertIsArray($items, 'Google_Change', __METHOD__);
+    $this->items = $items;
+  }
+  public function getItems() {
+    return $this->items;
+  }
+  public function setKind($kind) {
+    $this->kind = $kind;
+  }
+  public function getKind() {
+    return $this->kind;
+  }
+  public function setLargestChangeId($largestChangeId) {
+    $this->largestChangeId = $largestChangeId;
+  }
+  public function getLargestChangeId() {
+    return $this->largestChangeId;
+  }
+  public function setNextLink($nextLink) {
+    $this->nextLink = $nextLink;
+  }
+  public function getNextLink() {
+    return $this->nextLink;
+  }
+  public function setNextPageToken($nextPageToken) {
+    $this->nextPageToken = $nextPageToken;
+  }
+  public function getNextPageToken() {
+    return $this->nextPageToken;
+  }
+  public function setSelfLink($selfLink) {
+    $this->selfLink = $selfLink;
+  }
+  public function getSelfLink() {
+    return $this->selfLink;
+  }
+}
+
+class Google_ChildList extends Google_Model {
+  public $etag;
+  protected $__itemsType = 'Google_ChildReference';
+  protected $__itemsDataType = 'array';
+  public $items;
+  public $kind;
+  public $nextLink;
+  public $nextPageToken;
+  public $selfLink;
+  public function setEtag($etag) {
+    $this->etag = $etag;
+  }
+  public function getEtag() {
+    return $this->etag;
+  }
+  public function setItems(/* array(Google_ChildReference) */ $items) {
+    $this->assertIsArray($items, 'Google_ChildReference', __METHOD__);
+    $this->items = $items;
+  }
+  public function getItems() {
+    return $this->items;
+  }
+  public function setKind($kind) {
+    $this->kind = $kind;
+  }
+  public function getKind() {
+    return $this->kind;
+  }
+  public function setNextLink($nextLink) {
+    $this->nextLink = $nextLink;
+  }
+  public function getNextLink() {
+    return $this->nextLink;
+  }
+  public function setNextPageToken($nextPageToken) {
+    $this->nextPageToken = $nextPageToken;
+  }
+  public function getNextPageToken() {
+    return $this->nextPageToken;
+  }
+  public function setSelfLink($selfLink) {
+    $this->selfLink = $selfLink;
+  }
+  public function getSelfLink() {
+    return $this->selfLink;
+  }
+}
+
+class Google_ChildReference extends Google_Model {
+  public $childLink;
+  public $id;
+  public $kind;
+  public $selfLink;
+  public function setChildLink($childLink) {
+    $this->childLink = $childLink;
+  }
+  public function getChildLink() {
+    return $this->childLink;
+  }
+  public function setId($id) {
+    $this->id = $id;
+  }
+  public function getId() {
+    return $this->id;
+  }
+  public function setKind($kind) {
+    $this->kind = $kind;
+  }
+  public function getKind() {
+    return $this->kind;
+  }
+  public function setSelfLink($selfLink) {
+    $this->selfLink = $selfLink;
+  }
+  public function getSelfLink() {
+    return $this->selfLink;
+  }
+}
+
+class Google_Comment extends Google_Model {
+  public $anchor;
+  protected $__authorType = 'Google_User';
+  protected $__authorDataType = '';
+  public $author;
+  public $commentId;
+  public $content;
+  protected $__contextType = 'Google_CommentContext';
+  protected $__contextDataType = '';
+  public $context;
+  public $createdDate;
+  public $deleted;
+  public $fileId;
+  public $fileTitle;
+  public $htmlContent;
+  public $kind;
+  public $modifiedDate;
+  protected $__repliesType = 'Google_CommentReply';
+  protected $__repliesDataType = 'array';
+  public $replies;
+  public $selfLink;
+  public $status;
+  public function setAnchor($anchor) {
+    $this->anchor = $anchor;
+  }
+  public function getAnchor() {
+    return $this->anchor;
+  }
+  public function setAuthor(Google_User $author) {
+    $this->author = $author;
+  }
+  public function getAuthor() {
+    return $this->author;
+  }
+  public function setCommentId($commentId) {
+    $this->commentId = $commentId;
+  }
+  public function getCommentId() {
+    return $this->commentId;
+  }
+  public function setContent($content) {
+    $this->content = $content;
+  }
+  public function getContent() {
+    return $this->content;
+  }
+  public function setContext(Google_CommentContext $context) {
+    $this->context = $context;
+  }
+  public function getContext() {
+    return $this->context;
+  }
+  public function setCreatedDate($createdDate) {
+    $this->createdDate = $createdDate;
+  }
+  public function getCreatedDate() {
+    return $this->createdDate;
+  }
+  public function setDeleted($deleted) {
+    $this->deleted = $deleted;
+  }
+  public function getDeleted() {
+    return $this->deleted;
+  }
+  public function setFileId($fileId) {
+    $this->fileId = $fileId;
+  }
+  public function getFileId() {
+    return $this->fileId;
+  }
+  public function setFileTitle($fileTitle) {
+    $this->fileTitle = $fileTitle;
+  }
+  public function getFileTitle() {
+    return $this->fileTitle;
+  }
+  public function setHtmlContent($htmlContent) {
+    $this->htmlContent = $htmlContent;
+  }
+  public function getHtmlContent() {
+    return $this->htmlContent;
+  }
+  public function setKind($kind) {
+    $this->kind = $kind;
+  }
+  public function getKind() {
+    return $this->kind;
+  }
+  public function setModifiedDate($modifiedDate) {
+    $this->modifiedDate = $modifiedDate;
+  }
+  public function getModifiedDate() {
+    return $this->modifiedDate;
+  }
+  public function setReplies(/* array(Google_CommentReply) */ $replies) {
+    $this->assertIsArray($replies, 'Google_CommentReply', __METHOD__);
+    $this->replies = $replies;
+  }
+  public function getReplies() {
+    return $this->replies;
+  }
+  public function setSelfLink($selfLink) {
+    $this->selfLink = $selfLink;
+  }
+  public function getSelfLink() {
+    return $this->selfLink;
+  }
+  public function setStatus($status) {
+    $this->status = $status;
+  }
+  public function getStatus() {
+    return $this->status;
+  }
+}
+
+class Google_CommentContext extends Google_Model {
+  public $type;
+  public $value;
+  public function setType($type) {
+    $this->type = $type;
+  }
+  public function getType() {
+    return $this->type;
+  }
+  public function setValue($value) {
+    $this->value = $value;
+  }
+  public function getValue() {
+    return $this->value;
+  }
+}
+
+class Google_CommentList extends Google_Model {
+  protected $__itemsType = 'Google_Comment';
+  protected $__itemsDataType = 'array';
+  public $items;
+  public $kind;
+  public $nextPageToken;
+  public function setItems(/* array(Google_Comment) */ $items) {
+    $this->assertIsArray($items, 'Google_Comment', __METHOD__);
+    $this->items = $items;
+  }
+  public function getItems() {
+    return $this->items;
+  }
+  public function setKind($kind) {
+    $this->kind = $kind;
+  }
+  public function getKind() {
+    return $this->kind;
+  }
+  public function setNextPageToken($nextPageToken) {
+    $this->nextPageToken = $nextPageToken;
+  }
+  public function getNextPageToken() {
+    return $this->nextPageToken;
+  }
+}
+
+class Google_CommentReply extends Google_Model {
+  protected $__authorType = 'Google_User';
+  protected $__authorDataType = '';
+  public $author;
+  public $content;
+  public $createdDate;
+  public $deleted;
+  public $htmlContent;
+  public $kind;
+  public $modifiedDate;
+  public $replyId;
+  public $verb;
+  public function setAuthor(Google_User $author) {
+    $this->author = $author;
+  }
+  public function getAuthor() {
+    return $this->author;
+  }
+  public function setContent($content) {
+    $this->content = $content;
+  }
+  public function getContent() {
+    return $this->content;
+  }
+  public function setCreatedDate($createdDate) {
+    $this->createdDate = $createdDate;
+  }
+  public function getCreatedDate() {
+    return $this->createdDate;
+  }
+  public function setDeleted($deleted) {
+    $this->deleted = $deleted;
+  }
+  public function getDeleted() {
+    return $this->deleted;
+  }
+  public function setHtmlContent($htmlContent) {
+    $this->htmlContent = $htmlContent;
+  }
+  public function getHtmlContent() {
+    return $this->htmlContent;
+  }
+  public function setKind($kind) {
+    $this->kind = $kind;
+  }
+  public function getKind() {
+    return $this->kind;
+  }
+  public function setModifiedDate($modifiedDate) {
+    $this->modifiedDate = $modifiedDate;
+  }
+  public function getModifiedDate() {
+    return $this->modifiedDate;
+  }
+  public function setReplyId($replyId) {
+    $this->replyId = $replyId;
+  }
+  public function getReplyId() {
+    return $this->replyId;
+  }
+  public function setVerb($verb) {
+    $this->verb = $verb;
+  }
+  public function getVerb() {
+    return $this->verb;
+  }
+}
+
+class Google_CommentReplyList extends Google_Model {
+  protected $__itemsType = 'Google_CommentReply';
+  protected $__itemsDataType = 'array';
+  public $items;
+  public $kind;
+  public $nextPageToken;
+  public function setItems(/* array(Google_CommentReply) */ $items) {
+    $this->assertIsArray($items, 'Google_CommentReply', __METHOD__);
+    $this->items = $items;
+  }
+  public function getItems() {
+    return $this->items;
+  }
+  public function setKind($kind) {
+    $this->kind = $kind;
+  }
+  public function getKind() {
+    return $this->kind;
+  }
+  public function setNextPageToken($nextPageToken) {
+    $this->nextPageToken = $nextPageToken;
+  }
+  public function getNextPageToken() {
+    return $this->nextPageToken;
+  }
+}
+
+class Google_DriveFile extends Google_Model {
+  public $alternateLink;
+  public $appDataContents;
+  public $createdDate;
+  public $description;
+  public $downloadUrl;
+  public $editable;
+  public $embedLink;
+  public $etag;
+  public $explicitlyTrashed;
+  public $exportLinks;
+  public $fileExtension;
+  public $fileSize;
+  public $iconLink;
+  public $id;
+  protected $__imageMediaMetadataType = 'Google_DriveFileImageMediaMetadata';
+  protected $__imageMediaMetadataDataType = '';
+  public $imageMediaMetadata;
+  protected $__indexableTextType = 'Google_DriveFileIndexableText';
+  protected $__indexableTextDataType = '';
+  public $indexableText;
+  public $kind;
+  protected $__labelsType = 'Google_DriveFileLabels';
+  protected $__labelsDataType = '';
+  public $labels;
+  protected $__lastModifyingUserType = 'Google_User';
+  protected $__lastModifyingUserDataType = '';
+  public $lastModifyingUser;
+  public $lastModifyingUserName;
+  public $lastViewedByMeDate;
+  public $md5Checksum;
+  public $mimeType;
+  public $modifiedByMeDate;
+  public $modifiedDate;
+  public $originalFilename;
+  public $ownerNames;
+  protected $__ownersType = 'Google_User';
+  protected $__ownersDataType = 'array';
+  public $owners;
+  protected $__parentsType = 'Google_ParentReference';
+  protected $__parentsDataType = 'array';
+  public $parents;
+  public $quotaBytesUsed;
+  public $selfLink;
+  public $shared;
+  public $sharedWithMeDate;
+  protected $__thumbnailType = 'Google_DriveFileThumbnail';
+  protected $__thumbnailDataType = '';
+  public $thumbnail;
+  public $thumbnailLink;
+  public $title;
+  protected $__userPermissionType = 'Google_Permission';
+  protected $__userPermissionDataType = '';
+  public $userPermission;
+  public $webContentLink;
+  public $webViewLink;
+  public $writersCanShare;
+  public function setAlternateLink($alternateLink) {
+    $this->alternateLink = $alternateLink;
+  }
+  public function getAlternateLink() {
+    return $this->alternateLink;
+  }
+  public function setAppDataContents($appDataContents) {
+    $this->appDataContents = $appDataContents;
+  }
+  public function getAppDataContents() {
+    return $this->appDataContents;
+  }
+  public function setCreatedDate($createdDate) {
+    $this->createdDate = $createdDate;
+  }
+  public function getCreatedDate() {
+    return $this->createdDate;
+  }
+  public function setDescription($description) {
+    $this->description = $description;
+  }
+  public function getDescription() {
+    return $this->description;
+  }
+  public function setDownloadUrl($downloadUrl) {
+    $this->downloadUrl = $downloadUrl;
+  }
+  public function getDownloadUrl() {
+    return $this->downloadUrl;
+  }
+  public function setEditable($editable) {
+    $this->editable = $editable;
+  }
+  public function getEditable() {
+    return $this->editable;
+  }
+  public function setEmbedLink($embedLink) {
+    $this->embedLink = $embedLink;
+  }
+  public function getEmbedLink() {
+    return $this->embedLink;
+  }
+  public function setEtag($etag) {
+    $this->etag = $etag;
+  }
+  public function getEtag() {
+    return $this->etag;
+  }
+  public function setExplicitlyTrashed($explicitlyTrashed) {
+    $this->explicitlyTrashed = $explicitlyTrashed;
+  }
+  public function getExplicitlyTrashed() {
+    return $this->explicitlyTrashed;
+  }
+  public function setExportLinks($exportLinks) {
+    $this->exportLinks = $exportLinks;
+  }
+  public function getExportLinks() {
+    return $this->exportLinks;
+  }
+  public function setFileExtension($fileExtension) {
+    $this->fileExtension = $fileExtension;
+  }
+  public function getFileExtension() {
+    return $this->fileExtension;
+  }
+  public function setFileSize($fileSize) {
+    $this->fileSize = $fileSize;
+  }
+  public function getFileSize() {
+    return $this->fileSize;
+  }
+  public function setIconLink($iconLink) {
+    $this->iconLink = $iconLink;
+  }
+  public function getIconLink() {
+    return $this->iconLink;
+  }
+  public function setId($id) {
+    $this->id = $id;
+  }
+  public function getId() {
+    return $this->id;
+  }
+  public function setImageMediaMetadata(Google_DriveFileImageMediaMetadata $imageMediaMetadata) {
+    $this->imageMediaMetadata = $imageMediaMetadata;
+  }
+  public function getImageMediaMetadata() {
+    return $this->imageMediaMetadata;
+  }
+  public function setIndexableText(Google_DriveFileIndexableText $indexableText) {
+    $this->indexableText = $indexableText;
+  }
+  public function getIndexableText() {
+    return $this->indexableText;
+  }
+  public function setKind($kind) {
+    $this->kind = $kind;
+  }
+  public function getKind() {
+    return $this->kind;
+  }
+  public function setLabels(Google_DriveFileLabels $labels) {
+    $this->labels = $labels;
+  }
+  public function getLabels() {
+    return $this->labels;
+  }
+  public function setLastModifyingUser(Google_User $lastModifyingUser) {
+    $this->lastModifyingUser = $lastModifyingUser;
+  }
+  public function getLastModifyingUser() {
+    return $this->lastModifyingUser;
+  }
+  public function setLastModifyingUserName($lastModifyingUserName) {
+    $this->lastModifyingUserName = $lastModifyingUserName;
+  }
+  public function getLastModifyingUserName() {
+    return $this->lastModifyingUserName;
+  }
+  public function setLastViewedByMeDate($lastViewedByMeDate) {
+    $this->lastViewedByMeDate = $lastViewedByMeDate;
+  }
+  public function getLastViewedByMeDate() {
+    return $this->lastViewedByMeDate;
+  }
+  public function setMd5Checksum($md5Checksum) {
+    $this->md5Checksum = $md5Checksum;
+  }
+  public function getMd5Checksum() {
+    return $this->md5Checksum;
+  }
+  public function setMimeType($mimeType) {
+    $this->mimeType = $mimeType;
+  }
+  public function getMimeType() {
+    return $this->mimeType;
+  }
+  public function setModifiedByMeDate($modifiedByMeDate) {
+    $this->modifiedByMeDate = $modifiedByMeDate;
+  }
+  public function getModifiedByMeDate() {
+    return $this->modifiedByMeDate;
+  }
+  public function setModifiedDate($modifiedDate) {
+    $this->modifiedDate = $modifiedDate;
+  }
+  public function getModifiedDate() {
+    return $this->modifiedDate;
+  }
+  public function setOriginalFilename($originalFilename) {
+    $this->originalFilename = $originalFilename;
+  }
+  public function getOriginalFilename() {
+    return $this->originalFilename;
+  }
+  public function setOwnerNames(/* array(Google_string) */ $ownerNames) {
+    $this->assertIsArray($ownerNames, 'Google_string', __METHOD__);
+    $this->ownerNames = $ownerNames;
+  }
+  public function getOwnerNames() {
+    return $this->ownerNames;
+  }
+  public function setOwners(/* array(Google_User) */ $owners) {
+    $this->assertIsArray($owners, 'Google_User', __METHOD__);
+    $this->owners = $owners;
+  }
+  public function getOwners() {
+    return $this->owners;
+  }
+  public function setParents(/* array(Google_ParentReference) */ $parents) {
+    $this->assertIsArray($parents, 'Google_ParentReference', __METHOD__);
+    $this->parents = $parents;
+  }
+  public function getParents() {
+    return $this->parents;
+  }
+  public function setQuotaBytesUsed($quotaBytesUsed) {
+    $this->quotaBytesUsed = $quotaBytesUsed;
+  }
+  public function getQuotaBytesUsed() {
+    return $this->quotaBytesUsed;
+  }
+  public function setSelfLink($selfLink) {
+    $this->selfLink = $selfLink;
+  }
+  public function getSelfLink() {
+    return $this->selfLink;
+  }
+  public function setShared($shared) {
+    $this->shared = $shared;
+  }
+  public function getShared() {
+    return $this->shared;
+  }
+  public function setSharedWithMeDate($sharedWithMeDate) {
+    $this->sharedWithMeDate = $sharedWithMeDate;
+  }
+  public function getSharedWithMeDate() {
+    return $this->sharedWithMeDate;
+  }
+  public function setThumbnail(Google_DriveFileThumbnail $thumbnail) {
+    $this->thumbnail = $thumbnail;
+  }
+  public function getThumbnail() {
+    return $this->thumbnail;
+  }
+  public function setThumbnailLink($thumbnailLink) {
+    $this->thumbnailLink = $thumbnailLink;
+  }
+  public function getThumbnailLink() {
+    return $this->thumbnailLink;
+  }
+  public function setTitle($title) {
+    $this->title = $title;
+  }
+  public function getTitle() {
+    return $this->title;
+  }
+  public function setUserPermission(Google_Permission $userPermission) {
+    $this->userPermission = $userPermission;
+  }
+  public function getUserPermission() {
+    return $this->userPermission;
+  }
+  public function setWebContentLink($webContentLink) {
+    $this->webContentLink = $webContentLink;
+  }
+  public function getWebContentLink() {
+    return $this->webContentLink;
+  }
+  public function setWebViewLink($webViewLink) {
+    $this->webViewLink = $webViewLink;
+  }
+  public function getWebViewLink() {
+    return $this->webViewLink;
+  }
+  public function setWritersCanShare($writersCanShare) {
+    $this->writersCanShare = $writersCanShare;
+  }
+  public function getWritersCanShare() {
+    return $this->writersCanShare;
+  }
+}
+
+class Google_DriveFileImageMediaMetadata extends Google_Model {
+  public $aperture;
+  public $cameraMake;
+  public $cameraModel;
+  public $colorSpace;
+  public $date;
+  public $exposureBias;
+  public $exposureMode;
+  public $exposureTime;
+  public $flashUsed;
+  public $focalLength;
+  public $height;
+  public $isoSpeed;
+  public $lens;
+  protected $__locationType = 'Google_DriveFileImageMediaMetadataLocation';
+  protected $__locationDataType = '';
+  public $location;
+  public $maxApertureValue;
+  public $meteringMode;
+  public $rotation;
+  public $sensor;
+  public $subjectDistance;
+  public $whiteBalance;
+  public $width;
+  public function setAperture($aperture) {
+    $this->aperture = $aperture;
+  }
+  public function getAperture() {
+    return $this->aperture;
+  }
+  public function setCameraMake($cameraMake) {
+    $this->cameraMake = $cameraMake;
+  }
+  public function getCameraMake() {
+    return $this->cameraMake;
+  }
+  public function setCameraModel($cameraModel) {
+    $this->cameraModel = $cameraModel;
+  }
+  public function getCameraModel() {
+    return $this->cameraModel;
+  }
+  public function setColorSpace($colorSpace) {
+    $this->colorSpace = $colorSpace;
+  }
+  public function getColorSpace() {
+    return $this->colorSpace;
+  }
+  public function setDate($date) {
+    $this->date = $date;
+  }
+  public function getDate() {
+    return $this->date;
+  }
+  public function setExposureBias($exposureBias) {
+    $this->exposureBias = $exposureBias;
+  }
+  public function getExposureBias() {
+    return $this->exposureBias;
+  }
+  public function setExposureMode($exposureMode) {
+    $this->exposureMode = $exposureMode;
+  }
+  public function getExposureMode() {
+    return $this->exposureMode;
+  }
+  public function setExposureTime($exposureTime) {
+    $this->exposureTime = $exposureTime;
+  }
+  public function getExposureTime() {
+    return $this->exposureTime;
+  }
+  public function setFlashUsed($flashUsed) {
+    $this->flashUsed = $flashUsed;
+  }
+  public function getFlashUsed() {
+    return $this->flashUsed;
+  }
+  public function setFocalLength($focalLength) {
+    $this->focalLength = $focalLength;
+  }
+  public function getFocalLength() {
+    return $this->focalLength;
+  }
+  public function setHeight($height) {
+    $this->height = $height;
+  }
+  public function getHeight() {
+    return $this->height;
+  }
+  public function setIsoSpeed($isoSpeed) {
+    $this->isoSpeed = $isoSpeed;
+  }
+  public function getIsoSpeed() {
+    return $this->isoSpeed;
+  }
+  public function setLens($lens) {
+    $this->lens = $lens;
+  }
+  public function getLens() {
+    return $this->lens;
+  }
+  public function setLocation(Google_DriveFileImageMediaMetadataLocation $location) {
+    $this->location = $location;
+  }
+  public function getLocation() {
+    return $this->location;
+  }
+  public function setMaxApertureValue($maxApertureValue) {
+    $this->maxApertureValue = $maxApertureValue;
+  }
+  public function getMaxApertureValue() {
+    return $this->maxApertureValue;
+  }
+  public function setMeteringMode($meteringMode) {
+    $this->meteringMode = $meteringMode;
+  }
+  public function getMeteringMode() {
+    return $this->meteringMode;
+  }
+  public function setRotation($rotation) {
+    $this->rotation = $rotation;
+  }
+  public function getRotation() {
+    return $this->rotation;
+  }
+  public function setSensor($sensor) {
+    $this->sensor = $sensor;
+  }
+  public function getSensor() {
+    return $this->sensor;
+  }
+  public function setSubjectDistance($subjectDistance) {
+    $this->subjectDistance = $subjectDistance;
+  }
+  public function getSubjectDistance() {
+    return $this->subjectDistance;
+  }
+  public function setWhiteBalance($whiteBalance) {
+    $this->whiteBalance = $whiteBalance;
+  }
+  public function getWhiteBalance() {
+    return $this->whiteBalance;
+  }
+  public function setWidth($width) {
+    $this->width = $width;
+  }
+  public function getWidth() {
+    return $this->width;
+  }
+}
+
+class Google_DriveFileImageMediaMetadataLocation extends Google_Model {
+  public $altitude;
+  public $latitude;
+  public $longitude;
+  public function setAltitude($altitude) {
+    $this->altitude = $altitude;
+  }
+  public function getAltitude() {
+    return $this->altitude;
+  }
+  public function setLatitude($latitude) {
+    $this->latitude = $latitude;
+  }
+  public function getLatitude() {
+    return $this->latitude;
+  }
+  public function setLongitude($longitude) {
+    $this->longitude = $longitude;
+  }
+  public function getLongitude() {
+    return $this->longitude;
+  }
+}
+
+class Google_DriveFileIndexableText extends Google_Model {
+  public $text;
+  public function setText($text) {
+    $this->text = $text;
+  }
+  public function getText() {
+    return $this->text;
+  }
+}
+
+class Google_DriveFileLabels extends Google_Model {
+  public $hidden;
+  public $restricted;
+  public $starred;
+  public $trashed;
+  public $viewed;
+  public function setHidden($hidden) {
+    $this->hidden = $hidden;
+  }
+  public function getHidden() {
+    return $this->hidden;
+  }
+  public function setRestricted($restricted) {
+    $this->restricted = $restricted;
+  }
+  public function getRestricted() {
+    return $this->restricted;
+  }
+  public function setStarred($starred) {
+    $this->starred = $starred;
+  }
+  public function getStarred() {
+    return $this->starred;
+  }
+  public function setTrashed($trashed) {
+    $this->trashed = $trashed;
+  }
+  public function getTrashed() {
+    return $this->trashed;
+  }
+  public function setViewed($viewed) {
+    $this->viewed = $viewed;
+  }
+  public function getViewed() {
+    return $this->viewed;
+  }
+}
+
+class Google_DriveFileThumbnail extends Google_Model {
+  public $image;
+  public $mimeType;
+  public function setImage($image) {
+    $this->image = $image;
+  }
+  public function getImage() {
+    return $this->image;
+  }
+  public function setMimeType($mimeType) {
+    $this->mimeType = $mimeType;
+  }
+  public function getMimeType() {
+    return $this->mimeType;
+  }
+}
+
+class Google_FileList extends Google_Model {
+  public $etag;
+  protected $__itemsType = 'Google_DriveFile';
+  protected $__itemsDataType = 'array';
+  public $items;
+  public $kind;
+  public $nextLink;
+  public $nextPageToken;
+  public $selfLink;
+  public function setEtag($etag) {
+    $this->etag = $etag;
+  }
+  public function getEtag() {
+    return $this->etag;
+  }
+  public function setItems(/* array(Google_DriveFile) */ $items) {
+    $this->assertIsArray($items, 'Google_DriveFile', __METHOD__);
+    $this->items = $items;
+  }
+  public function getItems() {
+    return $this->items;
+  }
+  public function setKind($kind) {
+    $this->kind = $kind;
+  }
+  public function getKind() {
+    return $this->kind;
+  }
+  public function setNextLink($nextLink) {
+    $this->nextLink = $nextLink;
+  }
+  public function getNextLink() {
+    return $this->nextLink;
+  }
+  public function setNextPageToken($nextPageToken) {
+    $this->nextPageToken = $nextPageToken;
+  }
+  public function getNextPageToken() {
+    return $this->nextPageToken;
+  }
+  public function setSelfLink($selfLink) {
+    $this->selfLink = $selfLink;
+  }
+  public function getSelfLink() {
+    return $this->selfLink;
+  }
+}
+
+class Google_ParentList extends Google_Model {
+  public $etag;
+  protected $__itemsType = 'Google_ParentReference';
+  protected $__itemsDataType = 'array';
+  public $items;
+  public $kind;
+  public $selfLink;
+  public function setEtag($etag) {
+    $this->etag = $etag;
+  }
+  public function getEtag() {
+    return $this->etag;
+  }
+  public function setItems(/* array(Google_ParentReference) */ $items) {
+    $this->assertIsArray($items, 'Google_ParentReference', __METHOD__);
+    $this->items = $items;
+  }
+  public function getItems() {
+    return $this->items;
+  }
+  public function setKind($kind) {
+    $this->kind = $kind;
+  }
+  public function getKind() {
+    return $this->kind;
+  }
+  public function setSelfLink($selfLink) {
+    $this->selfLink = $selfLink;
+  }
+  public function getSelfLink() {
+    return $this->selfLink;
+  }
+}
+
+class Google_ParentReference extends Google_Model {
+  public $id;
+  public $isRoot;
+  public $kind;
+  public $parentLink;
+  public $selfLink;
+  public function setId($id) {
+    $this->id = $id;
+  }
+  public function getId() {
+    return $this->id;
+  }
+  public function setIsRoot($isRoot) {
+    $this->isRoot = $isRoot;
+  }
+  public function getIsRoot() {
+    return $this->isRoot;
+  }
+  public function setKind($kind) {
+    $this->kind = $kind;
+  }
+  public function getKind() {
+    return $this->kind;
+  }
+  public function setParentLink($parentLink) {
+    $this->parentLink = $parentLink;
+  }
+  public function getParentLink() {
+    return $this->parentLink;
+  }
+  public function setSelfLink($selfLink) {
+    $this->selfLink = $selfLink;
+  }
+  public function getSelfLink() {
+    return $this->selfLink;
+  }
+}
+
+class Google_Permission extends Google_Model {
+  public $additionalRoles;
+  public $authKey;
+  public $etag;
+  public $id;
+  public $kind;
+  public $name;
+  public $photoLink;
+  public $role;
+  public $selfLink;
+  public $type;
+  public $value;
+  public $withLink;
+  public function setAdditionalRoles(/* array(Google_string) */ $additionalRoles) {
+    $this->assertIsArray($additionalRoles, 'Google_string', __METHOD__);
+    $this->additionalRoles = $additionalRoles;
+  }
+  public function getAdditionalRoles() {
+    return $this->additionalRoles;
+  }
+  public function setAuthKey($authKey) {
+    $this->authKey = $authKey;
+  }
+  public function getAuthKey() {
+    return $this->authKey;
+  }
+  public function setEtag($etag) {
+    $this->etag = $etag;
+  }
+  public function getEtag() {
+    return $this->etag;
+  }
+  public function setId($id) {
+    $this->id = $id;
+  }
+  public function getId() {
+    return $this->id;
+  }
+  public function setKind($kind) {
+    $this->kind = $kind;
+  }
+  public function getKind() {
+    return $this->kind;
+  }
+  public function setName($name) {
+    $this->name = $name;
+  }
+  public function getName() {
+    return $this->name;
+  }
+  public function setPhotoLink($photoLink) {
+    $this->photoLink = $photoLink;
+  }
+  public function getPhotoLink() {
+    return $this->photoLink;
+  }
+  public function setRole($role) {
+    $this->role = $role;
+  }
+  public function getRole() {
+    return $this->role;
+  }
+  public function setSelfLink($selfLink) {
+    $this->selfLink = $selfLink;
+  }
+  public function getSelfLink() {
+    return $this->selfLink;
+  }
+  public function setType($type) {
+    $this->type = $type;
+  }
+  public function getType() {
+    return $this->type;
+  }
+  public function setValue($value) {
+    $this->value = $value;
+  }
+  public function getValue() {
+    return $this->value;
+  }
+  public function setWithLink($withLink) {
+    $this->withLink = $withLink;
+  }
+  public function getWithLink() {
+    return $this->withLink;
+  }
+}
+
+class Google_PermissionList extends Google_Model {
+  public $etag;
+  protected $__itemsType = 'Google_Permission';
+  protected $__itemsDataType = 'array';
+  public $items;
+  public $kind;
+  public $selfLink;
+  public function setEtag($etag) {
+    $this->etag = $etag;
+  }
+  public function getEtag() {
+    return $this->etag;
+  }
+  public function setItems(/* array(Google_Permission) */ $items) {
+    $this->assertIsArray($items, 'Google_Permission', __METHOD__);
+    $this->items = $items;
+  }
+  public function getItems() {
+    return $this->items;
+  }
+  public function setKind($kind) {
+    $this->kind = $kind;
+  }
+  public function getKind() {
+    return $this->kind;
+  }
+  public function setSelfLink($selfLink) {
+    $this->selfLink = $selfLink;
+  }
+  public function getSelfLink() {
+    return $this->selfLink;
+  }
+}
+
+class Google_Property extends Google_Model {
+  public $etag;
+  public $key;
+  public $kind;
+  public $selfLink;
+  public $value;
+  public $visibility;
+  public function setEtag($etag) {
+    $this->etag = $etag;
+  }
+  public function getEtag() {
+    return $this->etag;
+  }
+  public function setKey($key) {
+    $this->key = $key;
+  }
+  public function getKey() {
+    return $this->key;
+  }
+  public function setKind($kind) {
+    $this->kind = $kind;
+  }
+  public function getKind() {
+    return $this->kind;
+  }
+  public function setSelfLink($selfLink) {
+    $this->selfLink = $selfLink;
+  }
+  public function getSelfLink() {
+    return $this->selfLink;
+  }
+  public function setValue($value) {
+    $this->value = $value;
+  }
+  public function getValue() {
+    return $this->value;
+  }
+  public function setVisibility($visibility) {
+    $this->visibility = $visibility;
+  }
+  public function getVisibility() {
+    return $this->visibility;
+  }
+}
+
+class Google_PropertyList extends Google_Model {
+  public $etag;
+  protected $__itemsType = 'Google_Property';
+  protected $__itemsDataType = 'array';
+  public $items;
+  public $kind;
+  public $selfLink;
+  public function setEtag($etag) {
+    $this->etag = $etag;
+  }
+  public function getEtag() {
+    return $this->etag;
+  }
+  public function setItems(/* array(Google_Property) */ $items) {
+    $this->assertIsArray($items, 'Google_Property', __METHOD__);
+    $this->items = $items;
+  }
+  public function getItems() {
+    return $this->items;
+  }
+  public function setKind($kind) {
+    $this->kind = $kind;
+  }
+  public function getKind() {
+    return $this->kind;
+  }
+  public function setSelfLink($selfLink) {
+    $this->selfLink = $selfLink;
+  }
+  public function getSelfLink() {
+    return $this->selfLink;
+  }
+}
+
+class Google_Revision extends Google_Model {
+  public $downloadUrl;
+  public $etag;
+  public $exportLinks;
+  public $fileSize;
+  public $id;
+  public $kind;
+  protected $__lastModifyingUserType = 'Google_User';
+  protected $__lastModifyingUserDataType = '';
+  public $lastModifyingUser;
+  public $lastModifyingUserName;
+  public $md5Checksum;
+  public $mimeType;
+  public $modifiedDate;
+  public $originalFilename;
+  public $pinned;
+  public $publishAuto;
+  public $published;
+  public $publishedLink;
+  public $publishedOutsideDomain;
+  public $selfLink;
+  public function setDownloadUrl($downloadUrl) {
+    $this->downloadUrl = $downloadUrl;
+  }
+  public function getDownloadUrl() {
+    return $this->downloadUrl;
+  }
+  public function setEtag($etag) {
+    $this->etag = $etag;
+  }
+  public function getEtag() {
+    return $this->etag;
+  }
+  public function setExportLinks($exportLinks) {
+    $this->exportLinks = $exportLinks;
+  }
+  public function getExportLinks() {
+    return $this->exportLinks;
+  }
+  public function setFileSize($fileSize) {
+    $this->fileSize = $fileSize;
+  }
+  public function getFileSize() {
+    return $this->fileSize;
+  }
+  public function setId($id) {
+    $this->id = $id;
+  }
+  public function getId() {
+    return $this->id;
+  }
+  public function setKind($kind) {
+    $this->kind = $kind;
+  }
+  public function getKind() {
+    return $this->kind;
+  }
+  public function setLastModifyingUser(Google_User $lastModifyingUser) {
+    $this->lastModifyingUser = $lastModifyingUser;
+  }
+  public function getLastModifyingUser() {
+    return $this->lastModifyingUser;
+  }
+  public function setLastModifyingUserName($lastModifyingUserName) {
+    $this->lastModifyingUserName = $lastModifyingUserName;
+  }
+  public function getLastModifyingUserName() {
+    return $this->lastModifyingUserName;
+  }
+  public function setMd5Checksum($md5Checksum) {
+    $this->md5Checksum = $md5Checksum;
+  }
+  public function getMd5Checksum() {
+    return $this->md5Checksum;
+  }
+  public function setMimeType($mimeType) {
+    $this->mimeType = $mimeType;
+  }
+  public function getMimeType() {
+    return $this->mimeType;
+  }
+  public function setModifiedDate($modifiedDate) {
+    $this->modifiedDate = $modifiedDate;
+  }
+  public function getModifiedDate() {
+    return $this->modifiedDate;
+  }
+  public function setOriginalFilename($originalFilename) {
+    $this->originalFilename = $originalFilename;
+  }
+  public function getOriginalFilename() {
+    return $this->originalFilename;
+  }
+  public function setPinned($pinned) {
+    $this->pinned = $pinned;
+  }
+  public function getPinned() {
+    return $this->pinned;
+  }
+  public function setPublishAuto($publishAuto) {
+    $this->publishAuto = $publishAuto;
+  }
+  public function getPublishAuto() {
+    return $this->publishAuto;
+  }
+  public function setPublished($published) {
+    $this->published = $published;
+  }
+  public function getPublished() {
+    return $this->published;
+  }
+  public function setPublishedLink($publishedLink) {
+    $this->publishedLink = $publishedLink;
+  }
+  public function getPublishedLink() {
+    return $this->publishedLink;
+  }
+  public function setPublishedOutsideDomain($publishedOutsideDomain) {
+    $this->publishedOutsideDomain = $publishedOutsideDomain;
+  }
+  public function getPublishedOutsideDomain() {
+    return $this->publishedOutsideDomain;
+  }
+  public function setSelfLink($selfLink) {
+    $this->selfLink = $selfLink;
+  }
+  public function getSelfLink() {
+    return $this->selfLink;
+  }
+}
+
+class Google_RevisionList extends Google_Model {
+  public $etag;
+  protected $__itemsType = 'Google_Revision';
+  protected $__itemsDataType = 'array';
+  public $items;
+  public $kind;
+  public $selfLink;
+  public function setEtag($etag) {
+    $this->etag = $etag;
+  }
+  public function getEtag() {
+    return $this->etag;
+  }
+  public function setItems(/* array(Google_Revision) */ $items) {
+    $this->assertIsArray($items, 'Google_Revision', __METHOD__);
+    $this->items = $items;
+  }
+  public function getItems() {
+    return $this->items;
+  }
+  public function setKind($kind) {
+    $this->kind = $kind;
+  }
+  public function getKind() {
+    return $this->kind;
+  }
+  public function setSelfLink($selfLink) {
+    $this->selfLink = $selfLink;
+  }
+  public function getSelfLink() {
+    return $this->selfLink;
+  }
+}
+
+class Google_User extends Google_Model {
+  public $displayName;
+  public $isAuthenticatedUser;
+  public $kind;
+  public $permissionId;
+  protected $__pictureType = 'Google_UserPicture';
+  protected $__pictureDataType = '';
+  public $picture;
+  public function setDisplayName($displayName) {
+    $this->displayName = $displayName;
+  }
+  public function getDisplayName() {
+    return $this->displayName;
+  }
+  public function setIsAuthenticatedUser($isAuthenticatedUser) {
+    $this->isAuthenticatedUser = $isAuthenticatedUser;
+  }
+  public function getIsAuthenticatedUser() {
+    return $this->isAuthenticatedUser;
+  }
+  public function setKind($kind) {
+    $this->kind = $kind;
+  }
+  public function getKind() {
+    return $this->kind;
+  }
+  public function setPermissionId($permissionId) {
+    $this->permissionId = $permissionId;
+  }
+  public function getPermissionId() {
+    return $this->permissionId;
+  }
+  public function setPicture(Google_UserPicture $picture) {
+    $this->picture = $picture;
+  }
+  public function getPicture() {
+    return $this->picture;
+  }
+}
+
+class Google_UserPicture extends Google_Model {
+  public $url;
+  public function setUrl($url) {
+    $this->url = $url;
+  }
+  public function getUrl() {
+    return $this->url;
+  }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/external/URITemplateParser.php b/apps/files_external/3rdparty/google-api-php-client/src/external/URITemplateParser.php
new file mode 100644
index 0000000000000000000000000000000000000000..594adbb15e24abe333f8d681ed2b6ea360e40280
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/external/URITemplateParser.php
@@ -0,0 +1,209 @@
+<?php
+/*
+Copyright (c) 2010 Kevin M Burns Jr, http://kevburnsjr.com/
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+/**
+ * A URI Template Parser which is used by the apiREST class to resolve the REST requests
+ * Blogpost: http://lab.kevburnsjr.com/php-uri-template-parser
+ * Source: http://github.com/KevBurnsJr/php-uri-template-parser
+ */
+class URI_Template_Parser {
+
+  public static $operators = array('+', ';', '?', '/', '.');
+  public static $reserved_operators = array('|', '!', '@');
+  public static $explode_modifiers = array('+', '*');
+  public static $partial_modifiers = array(':', '^');
+
+  public static $gen_delims = array(':', '/', '?', '#', '[', ']', '@');
+  public static $gen_delims_pct = array('%3A', '%2F', '%3F', '%23', '%5B', '%5D', '%40');
+  public static $sub_delims = array('!', '$', '&', '\'', '(', ')', '*', '+', ',', ';', '=');
+  public static $sub_delims_pct = array('%21', '%24', '%26', '%27', '%28', '%29', '%2A', '%2B', '%2C', '%3B', '%3D');
+  public static $reserved;
+  public static $reserved_pct;
+
+  public function __construct($template) {
+    self::$reserved = array_merge(self::$gen_delims, self::$sub_delims);
+    self::$reserved_pct = array_merge(self::$gen_delims_pct, self::$sub_delims_pct);
+    $this->template = $template;
+  }
+
+  public function expand($data) {
+    // Modification to make this a bit more performant (since gettype is very slow)
+    if (! is_array($data)) {
+      $data = (array)$data;
+    }
+    /*
+    // Original code, which uses a slow gettype() statement, kept in place for if the assumption that is_array always works here is incorrect
+    switch (gettype($data)) {
+      case "boolean":
+      case "integer":
+      case "double":
+      case "string":
+      case "object":
+        $data = (array)$data;
+        break;
+    }
+*/
+
+    // Resolve template vars
+    preg_match_all('/\{([^\}]*)\}/', $this->template, $em);
+
+    foreach ($em[1] as $i => $bare_expression) {
+      preg_match('/^([\+\;\?\/\.]{1})?(.*)$/', $bare_expression, $lm);
+      $exp = new StdClass();
+      $exp->expression = $em[0][$i];
+      $exp->operator = $lm[1];
+      $exp->variable_list = $lm[2];
+      $exp->varspecs = explode(',', $exp->variable_list);
+      $exp->vars = array();
+      foreach ($exp->varspecs as $varspec) {
+        preg_match('/^([a-zA-Z0-9_]+)([\*\+]{1})?([\:\^][0-9-]+)?(\=[^,]+)?$/', $varspec, $vm);
+        $var = new StdClass();
+        $var->name = $vm[1];
+        $var->modifier = isset($vm[2]) && $vm[2] ? $vm[2] : null;
+        $var->modifier = isset($vm[3]) && $vm[3] ? $vm[3] : $var->modifier;
+        $var->default = isset($vm[4]) ? substr($vm[4], 1) : null;
+        $exp->vars[] = $var;
+      }
+
+      // Add processing flags
+      $exp->reserved = false;
+      $exp->prefix = '';
+      $exp->delimiter = ',';
+      switch ($exp->operator) {
+        case '+':
+          $exp->reserved = 'true';
+          break;
+        case ';':
+          $exp->prefix = ';';
+          $exp->delimiter = ';';
+          break;
+        case '?':
+          $exp->prefix = '?';
+          $exp->delimiter = '&';
+          break;
+        case '/':
+          $exp->prefix = '/';
+          $exp->delimiter = '/';
+          break;
+        case '.':
+          $exp->prefix = '.';
+          $exp->delimiter = '.';
+          break;
+      }
+      $expressions[] = $exp;
+    }
+
+    // Expansion
+    $this->expansion = $this->template;
+
+    foreach ($expressions as $exp) {
+      $part = $exp->prefix;
+      $exp->one_var_defined = false;
+      foreach ($exp->vars as $var) {
+        $val = '';
+        if ($exp->one_var_defined && isset($data[$var->name])) {
+          $part .= $exp->delimiter;
+        }
+        // Variable present
+        if (isset($data[$var->name])) {
+          $exp->one_var_defined = true;
+          $var->data = $data[$var->name];
+
+          $val = self::val_from_var($var, $exp);
+
+        // Variable missing
+        } else {
+          if ($var->default) {
+            $exp->one_var_defined = true;
+            $val = $var->default;
+          }
+        }
+        $part .= $val;
+      }
+      if (! $exp->one_var_defined) $part = '';
+      $this->expansion = str_replace($exp->expression, $part, $this->expansion);
+    }
+
+    return $this->expansion;
+  }
+
+  private function val_from_var($var, $exp) {
+    $val = '';
+    if (is_array($var->data)) {
+      $i = 0;
+      if ($exp->operator == '?' && ! $var->modifier) {
+        $val .= $var->name . '=';
+      }
+      foreach ($var->data as $k => $v) {
+        $del = $var->modifier ? $exp->delimiter : ',';
+        $ek = rawurlencode($k);
+        $ev = rawurlencode($v);
+
+        // Array
+        if ($k !== $i) {
+          if ($var->modifier == '+') {
+            $val .= $var->name . '.';
+          }
+          if ($exp->operator == '?' && $var->modifier || $exp->operator == ';' && $var->modifier == '*' || $exp->operator == ';' && $var->modifier == '+') {
+            $val .= $ek . '=';
+          } else {
+            $val .= $ek . $del;
+          }
+
+        // List
+        } else {
+          if ($var->modifier == '+') {
+            if ($exp->operator == ';' && $var->modifier == '*' || $exp->operator == ';' && $var->modifier == '+' || $exp->operator == '?' && $var->modifier == '+') {
+              $val .= $var->name . '=';
+            } else {
+              $val .= $var->name . '.';
+            }
+          }
+        }
+        $val .= $ev . $del;
+        $i ++;
+      }
+      $val = trim($val, $del);
+
+    // Strings, numbers, etc.
+    } else {
+      if ($exp->operator == '?') {
+        $val = $var->name . (isset($var->data) ? '=' : '');
+      } else if ($exp->operator == ';') {
+        $val = $var->name . ($var->data ? '=' : '');
+      }
+      $val .= rawurlencode($var->data);
+      if ($exp->operator == '+') {
+        $val = str_replace(self::$reserved_pct, self::$reserved, $val);
+      }
+    }
+    return $val;
+  }
+
+  public function match($uri) {}
+
+  public function __toString() {
+    return $this->template;
+  }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/io/Google_CacheParser.php b/apps/files_external/3rdparty/google-api-php-client/src/io/Google_CacheParser.php
new file mode 100644
index 0000000000000000000000000000000000000000..7f5accfefe9720a79ff7b7a7fd6063de8a0ae7d3
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/io/Google_CacheParser.php
@@ -0,0 +1,173 @@
+<?php
+/*
+ * Copyright 2012 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * Implement the caching directives specified in rfc2616. This
+ * implementation is guided by the guidance offered in rfc2616-sec13.
+ * @author Chirag Shah <chirags@google.com>
+ */
+class Google_CacheParser {
+  public static $CACHEABLE_HTTP_METHODS = array('GET', 'HEAD');
+  public static $CACHEABLE_STATUS_CODES = array('200', '203', '300', '301');
+
+  private function __construct() {}
+
+  /**
+   * Check if an HTTP request can be cached by a private local cache.
+   *
+   * @static
+   * @param Google_HttpRequest $resp
+   * @return bool True if the request is cacheable.
+   * False if the request is uncacheable.
+   */
+  public static function isRequestCacheable (Google_HttpRequest $resp) {
+    $method = $resp->getRequestMethod();
+    if (! in_array($method, self::$CACHEABLE_HTTP_METHODS)) {
+      return false;
+    }
+
+    // Don't cache authorized requests/responses.
+    // [rfc2616-14.8] When a shared cache receives a request containing an
+    // Authorization field, it MUST NOT return the corresponding response
+    // as a reply to any other request...
+    if ($resp->getRequestHeader("authorization")) {
+      return false;
+    }
+
+    return true;
+  }
+
+  /**
+   * Check if an HTTP response can be cached by a private local cache.
+   *
+   * @static
+   * @param Google_HttpRequest $resp
+   * @return bool True if the response is cacheable.
+   * False if the response is un-cacheable.
+   */
+  public static function isResponseCacheable (Google_HttpRequest $resp) {
+    // First, check if the HTTP request was cacheable before inspecting the
+    // HTTP response.
+    if (false == self::isRequestCacheable($resp)) {
+      return false;
+    }
+
+    $code = $resp->getResponseHttpCode();
+    if (! in_array($code, self::$CACHEABLE_STATUS_CODES)) {
+      return false;
+    }
+
+    // The resource is uncacheable if the resource is already expired and
+    // the resource doesn't have an ETag for revalidation.
+    $etag = $resp->getResponseHeader("etag");
+    if (self::isExpired($resp) && $etag == false) {
+      return false;
+    }
+
+    // [rfc2616-14.9.2]  If [no-store is] sent in a response, a cache MUST NOT
+    // store any part of either this response or the request that elicited it.
+    $cacheControl = $resp->getParsedCacheControl();
+    if (isset($cacheControl['no-store'])) {
+      return false;
+    }
+
+    // Pragma: no-cache is an http request directive, but is occasionally
+    // used as a response header incorrectly.
+    $pragma = $resp->getResponseHeader('pragma');
+    if ($pragma == 'no-cache' || strpos($pragma, 'no-cache') !== false) {
+      return false;
+    }
+
+    // [rfc2616-14.44] Vary: * is extremely difficult to cache. "It implies that
+    // a cache cannot determine from the request headers of a subsequent request
+    // whether this response is the appropriate representation."
+    // Given this, we deem responses with the Vary header as uncacheable.
+    $vary = $resp->getResponseHeader('vary');
+    if ($vary) {
+      return false;
+    }
+
+    return true;
+  }
+
+  /**
+   * @static
+   * @param Google_HttpRequest $resp
+   * @return bool True if the HTTP response is considered to be expired.
+   * False if it is considered to be fresh.
+   */
+  public static function isExpired(Google_HttpRequest $resp) {
+    // HTTP/1.1 clients and caches MUST treat other invalid date formats,
+    // especially including the value “0”, as in the past.
+    $parsedExpires = false;
+    $responseHeaders = $resp->getResponseHeaders();
+    if (isset($responseHeaders['expires'])) {
+      $rawExpires = $responseHeaders['expires'];
+      // Check for a malformed expires header first.
+      if (empty($rawExpires) || (is_numeric($rawExpires) && $rawExpires <= 0)) {
+        return true;
+      }
+
+      // See if we can parse the expires header.
+      $parsedExpires = strtotime($rawExpires);
+      if (false == $parsedExpires || $parsedExpires <= 0) {
+        return true;
+      }
+    }
+
+    // Calculate the freshness of an http response.
+    $freshnessLifetime = false;
+    $cacheControl = $resp->getParsedCacheControl();
+    if (isset($cacheControl['max-age'])) {
+      $freshnessLifetime = $cacheControl['max-age'];
+    }
+
+    $rawDate = $resp->getResponseHeader('date');
+    $parsedDate = strtotime($rawDate);
+
+    if (empty($rawDate) || false == $parsedDate) {
+      $parsedDate = time();
+    }
+    if (false == $freshnessLifetime && isset($responseHeaders['expires'])) {
+      $freshnessLifetime = $parsedExpires - $parsedDate;
+    }
+
+    if (false == $freshnessLifetime) {
+      return true;
+    }
+
+    // Calculate the age of an http response.
+    $age = max(0, time() - $parsedDate);
+    if (isset($responseHeaders['age'])) {
+      $age = max($age, strtotime($responseHeaders['age']));
+    }
+
+    return $freshnessLifetime <= $age;
+  }
+
+  /**
+   * Determine if a cache entry should be revalidated with by the origin.
+   *
+   * @param Google_HttpRequest $response
+   * @return bool True if the entry is expired, else return false.
+   */
+  public static function mustRevalidate(Google_HttpRequest $response) {
+    // [13.3] When a cache has a stale entry that it would like to use as a
+    // response to a client's request, it first has to check with the origin
+    // server to see if its cached entry is still usable.
+    return self::isExpired($response);
+  }
+}
\ No newline at end of file
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/io/Google_CurlIO.php b/apps/files_external/3rdparty/google-api-php-client/src/io/Google_CurlIO.php
new file mode 100644
index 0000000000000000000000000000000000000000..65352f29882d5286522a42d371ea9922fc0446a9
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/io/Google_CurlIO.php
@@ -0,0 +1,278 @@
+<?php
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Curl based implementation of apiIO.
+ *
+ * @author Chris Chabot <chabotc@google.com>
+ * @author Chirag Shah <chirags@google.com>
+ */
+
+require_once 'Google_CacheParser.php';
+
+class Google_CurlIO implements Google_IO {
+  const CONNECTION_ESTABLISHED = "HTTP/1.0 200 Connection established\r\n\r\n";
+  const FORM_URLENCODED = 'application/x-www-form-urlencoded';
+
+  private static $ENTITY_HTTP_METHODS = array("POST" => null, "PUT" => null);
+  private static $HOP_BY_HOP = array(
+      'connection', 'keep-alive', 'proxy-authenticate', 'proxy-authorization',
+      'te', 'trailers', 'transfer-encoding', 'upgrade');
+
+  private $curlParams = array (
+      CURLOPT_RETURNTRANSFER => true,
+      CURLOPT_FOLLOWLOCATION => 0,
+      CURLOPT_FAILONERROR => false,
+      CURLOPT_SSL_VERIFYPEER => true,
+      CURLOPT_HEADER => true,
+      CURLOPT_VERBOSE => false,
+  );
+
+  /**
+   * Perform an authenticated / signed apiHttpRequest.
+   * This function takes the apiHttpRequest, calls apiAuth->sign on it
+   * (which can modify the request in what ever way fits the auth mechanism)
+   * and then calls apiCurlIO::makeRequest on the signed request
+   *
+   * @param Google_HttpRequest $request
+   * @return Google_HttpRequest The resulting HTTP response including the
+   * responseHttpCode, responseHeaders and responseBody.
+   */
+  public function authenticatedRequest(Google_HttpRequest $request) {
+    $request = Google_Client::$auth->sign($request);
+    return $this->makeRequest($request);
+  }
+
+  /**
+   * Execute a apiHttpRequest
+   *
+   * @param Google_HttpRequest $request the http request to be executed
+   * @return Google_HttpRequest http request with the response http code, response
+   * headers and response body filled in
+   * @throws Google_IOException on curl or IO error
+   */
+  public function makeRequest(Google_HttpRequest $request) {
+    // First, check to see if we have a valid cached version.
+    $cached = $this->getCachedRequest($request);
+    if ($cached !== false) {
+      if (Google_CacheParser::mustRevalidate($cached)) {
+        $addHeaders = array();
+        if ($cached->getResponseHeader('etag')) {
+          // [13.3.4] If an entity tag has been provided by the origin server,
+          // we must use that entity tag in any cache-conditional request.
+          $addHeaders['If-None-Match'] = $cached->getResponseHeader('etag');
+        } elseif ($cached->getResponseHeader('date')) {
+          $addHeaders['If-Modified-Since'] = $cached->getResponseHeader('date');
+        }
+
+        $request->setRequestHeaders($addHeaders);
+      } else {
+        // No need to revalidate the request, return it directly
+        return $cached;
+      }
+    }
+
+    if (array_key_exists($request->getRequestMethod(),
+          self::$ENTITY_HTTP_METHODS)) {
+      $request = $this->processEntityRequest($request);
+    }
+
+    $ch = curl_init();
+    curl_setopt_array($ch, $this->curlParams);
+    curl_setopt($ch, CURLOPT_URL, $request->getUrl());
+    if ($request->getPostBody()) {
+      curl_setopt($ch, CURLOPT_POSTFIELDS, $request->getPostBody());
+    }
+
+    $requestHeaders = $request->getRequestHeaders();
+    if ($requestHeaders && is_array($requestHeaders)) {
+      $parsed = array();
+      foreach ($requestHeaders as $k => $v) {
+        $parsed[] = "$k: $v";
+      }
+      curl_setopt($ch, CURLOPT_HTTPHEADER, $parsed);
+    }
+
+    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $request->getRequestMethod());
+    curl_setopt($ch, CURLOPT_USERAGENT, $request->getUserAgent());
+    $respData = curl_exec($ch);
+
+    // Retry if certificates are missing.
+    if (curl_errno($ch) == CURLE_SSL_CACERT) {
+      error_log('SSL certificate problem, verify that the CA cert is OK.'
+        . ' Retrying with the CA cert bundle from google-api-php-client.');
+      curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/cacerts.pem');
+      $respData = curl_exec($ch);
+    }
+
+    $respHeaderSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
+    $respHttpCode = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
+    $curlErrorNum = curl_errno($ch);
+    $curlError = curl_error($ch);
+    curl_close($ch);
+    if ($curlErrorNum != CURLE_OK) {
+      throw new Google_IOException("HTTP Error: ($respHttpCode) $curlError");
+    }
+
+    // Parse out the raw response into usable bits
+    list($responseHeaders, $responseBody) =
+          self::parseHttpResponse($respData, $respHeaderSize);
+
+    if ($respHttpCode == 304 && $cached) {
+      // If the server responded NOT_MODIFIED, return the cached request.
+      if (isset($responseHeaders['connection'])) {
+        $hopByHop = array_merge(
+          self::$HOP_BY_HOP,
+          explode(',', $responseHeaders['connection'])
+        );
+
+        $endToEnd = array();
+        foreach($hopByHop as $key) {
+          if (isset($responseHeaders[$key])) {
+            $endToEnd[$key] = $responseHeaders[$key];
+          }
+        }
+        $cached->setResponseHeaders($endToEnd);
+      }
+      return $cached;
+    }
+
+    // Fill in the apiHttpRequest with the response values
+    $request->setResponseHttpCode($respHttpCode);
+    $request->setResponseHeaders($responseHeaders);
+    $request->setResponseBody($responseBody);
+    // Store the request in cache (the function checks to see if the request
+    // can actually be cached)
+    $this->setCachedRequest($request);
+    // And finally return it
+    return $request;
+  }
+
+  /**
+   * @visible for testing.
+   * Cache the response to an HTTP request if it is cacheable.
+   * @param Google_HttpRequest $request
+   * @return bool Returns true if the insertion was successful.
+   * Otherwise, return false.
+   */
+  public function setCachedRequest(Google_HttpRequest $request) {
+    // Determine if the request is cacheable.
+    if (Google_CacheParser::isResponseCacheable($request)) {
+      Google_Client::$cache->set($request->getCacheKey(), $request);
+      return true;
+    }
+
+    return false;
+  }
+
+  /**
+   * @visible for testing.
+   * @param Google_HttpRequest $request
+   * @return Google_HttpRequest|bool Returns the cached object or
+   * false if the operation was unsuccessful.
+   */
+  public function getCachedRequest(Google_HttpRequest $request) {
+    if (false == Google_CacheParser::isRequestCacheable($request)) {
+      false;
+    }
+
+    return Google_Client::$cache->get($request->getCacheKey());
+  }
+
+  /**
+   * @param $respData
+   * @param $headerSize
+   * @return array
+   */
+  public static function parseHttpResponse($respData, $headerSize) {
+    if (stripos($respData, self::CONNECTION_ESTABLISHED) !== false) {
+      $respData = str_ireplace(self::CONNECTION_ESTABLISHED, '', $respData);
+    }
+
+    if ($headerSize) {
+      $responseBody = substr($respData, $headerSize);
+      $responseHeaders = substr($respData, 0, $headerSize);
+    } else {
+      list($responseHeaders, $responseBody) = explode("\r\n\r\n", $respData, 2);
+    }
+
+    $responseHeaders = self::parseResponseHeaders($responseHeaders);
+    return array($responseHeaders, $responseBody);
+  }
+
+  public static function parseResponseHeaders($rawHeaders) {
+    $responseHeaders = array();
+
+    $responseHeaderLines = explode("\r\n", $rawHeaders);
+    foreach ($responseHeaderLines as $headerLine) {
+      if ($headerLine && strpos($headerLine, ':') !== false) {
+        list($header, $value) = explode(': ', $headerLine, 2);
+        $header = strtolower($header);
+        if (isset($responseHeaders[$header])) {
+          $responseHeaders[$header] .= "\n" . $value;
+        } else {
+          $responseHeaders[$header] = $value;
+        }
+      }
+    }
+    return $responseHeaders;
+  }
+
+  /**
+   * @visible for testing
+   * Process an http request that contains an enclosed entity.
+   * @param Google_HttpRequest $request
+   * @return Google_HttpRequest Processed request with the enclosed entity.
+   */
+  public function processEntityRequest(Google_HttpRequest $request) {
+    $postBody = $request->getPostBody();
+    $contentType = $request->getRequestHeader("content-type");
+
+    // Set the default content-type as application/x-www-form-urlencoded.
+    if (false == $contentType) {
+      $contentType = self::FORM_URLENCODED;
+      $request->setRequestHeaders(array('content-type' => $contentType));
+    }
+
+    // Force the payload to match the content-type asserted in the header.
+    if ($contentType == self::FORM_URLENCODED && is_array($postBody)) {
+      $postBody = http_build_query($postBody, '', '&');
+      $request->setPostBody($postBody);
+    }
+
+    // Make sure the content-length header is set.
+    if (!$postBody || is_string($postBody)) {
+      $postsLength = strlen($postBody);
+      $request->setRequestHeaders(array('content-length' => $postsLength));
+    }
+
+    return $request;
+  }
+
+  /**
+   * Set options that update cURL's default behavior.
+   * The list of accepted options are:
+   * {@link http://php.net/manual/en/function.curl-setopt.php]
+   *
+   * @param array $optCurlParams Multiple options used by a cURL session.
+   */
+  public function setOptions($optCurlParams) {
+    foreach ($optCurlParams as $key => $val) {
+      $this->curlParams[$key] = $val;
+    }
+  }
+}
\ No newline at end of file
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/io/Google_HttpRequest.php b/apps/files_external/3rdparty/google-api-php-client/src/io/Google_HttpRequest.php
new file mode 100644
index 0000000000000000000000000000000000000000..b98eae5400891cca40f921616cdf46e7deba66b1
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/io/Google_HttpRequest.php
@@ -0,0 +1,304 @@
+<?php
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * HTTP Request to be executed by apiIO classes. Upon execution, the
+ * responseHttpCode, responseHeaders and responseBody will be filled in.
+ *
+ * @author Chris Chabot <chabotc@google.com>
+ * @author Chirag Shah <chirags@google.com>
+ *
+ */
+class Google_HttpRequest {
+  const USER_AGENT_SUFFIX = "google-api-php-client/0.6.0";
+  private $batchHeaders = array(
+    'Content-Type' => 'application/http',
+    'Content-Transfer-Encoding' => 'binary',
+    'MIME-Version' => '1.0',
+    'Content-Length' => ''
+  );
+
+  protected $url;
+  protected $requestMethod;
+  protected $requestHeaders;
+  protected $postBody;
+  protected $userAgent;
+
+  protected $responseHttpCode;
+  protected $responseHeaders;
+  protected $responseBody;
+  
+  public $accessKey;
+
+  public function __construct($url, $method = 'GET', $headers = array(), $postBody = null) {
+    $this->setUrl($url);
+    $this->setRequestMethod($method);
+    $this->setRequestHeaders($headers);
+    $this->setPostBody($postBody);
+
+    global $apiConfig;
+    if (empty($apiConfig['application_name'])) {
+      $this->userAgent = self::USER_AGENT_SUFFIX;
+    } else {
+      $this->userAgent = $apiConfig['application_name'] . " " . self::USER_AGENT_SUFFIX;
+    }
+  }
+
+  /**
+   * Misc function that returns the base url component of the $url
+   * used by the OAuth signing class to calculate the base string
+   * @return string The base url component of the $url.
+   * @see http://oauth.net/core/1.0a/#anchor13
+   */
+  public function getBaseUrl() {
+    if ($pos = strpos($this->url, '?')) {
+      return substr($this->url, 0, $pos);
+    }
+    return $this->url;
+  }
+
+  /**
+   * Misc function that returns an array of the query parameters of the current
+   * url used by the OAuth signing class to calculate the signature
+   * @return array Query parameters in the query string.
+   */
+  public function getQueryParams() {
+    if ($pos = strpos($this->url, '?')) {
+      $queryStr = substr($this->url, $pos + 1);
+      $params = array();
+      parse_str($queryStr, $params);
+      return $params;
+    }
+    return array();
+  }
+
+  /**
+   * @return string HTTP Response Code.
+   */
+  public function getResponseHttpCode() {
+    return (int) $this->responseHttpCode;
+  }
+
+  /**
+   * @param int $responseHttpCode HTTP Response Code.
+   */
+  public function setResponseHttpCode($responseHttpCode) {
+    $this->responseHttpCode = $responseHttpCode;
+  }
+
+  /**
+   * @return $responseHeaders (array) HTTP Response Headers.
+   */
+  public function getResponseHeaders() {
+    return $this->responseHeaders;
+  }
+
+  /**
+   * @return string HTTP Response Body
+   */
+  public function getResponseBody() {
+    return $this->responseBody;
+  }
+
+  /**
+   * @param array $headers The HTTP response headers
+   * to be normalized.
+   */
+  public function setResponseHeaders($headers) {
+    $headers = Google_Utils::normalize($headers);
+    if ($this->responseHeaders) {
+      $headers = array_merge($this->responseHeaders, $headers);
+    }
+
+    $this->responseHeaders = $headers;
+  }
+
+  /**
+   * @param string $key
+   * @return array|boolean Returns the requested HTTP header or
+   * false if unavailable.
+   */
+  public function getResponseHeader($key) {
+    return isset($this->responseHeaders[$key])
+        ? $this->responseHeaders[$key]
+        : false;
+  }
+
+  /**
+   * @param string $responseBody The HTTP response body.
+   */
+  public function setResponseBody($responseBody) {
+    $this->responseBody = $responseBody;
+  }
+
+  /**
+   * @return string $url The request URL.
+   */
+
+  public function getUrl() {
+    return $this->url;
+  }
+
+  /**
+   * @return string $method HTTP Request Method.
+   */
+  public function getRequestMethod() {
+    return $this->requestMethod;
+  }
+
+  /**
+   * @return array $headers HTTP Request Headers.
+   */
+  public function getRequestHeaders() {
+    return $this->requestHeaders;
+  }
+
+  /**
+   * @param string $key
+   * @return array|boolean Returns the requested HTTP header or
+   * false if unavailable.
+   */
+  public function getRequestHeader($key) {
+    return isset($this->requestHeaders[$key])
+        ? $this->requestHeaders[$key]
+        : false;
+  }
+
+  /**
+   * @return string $postBody HTTP Request Body.
+   */
+  public function getPostBody() {
+    return $this->postBody;
+  }
+
+  /**
+   * @param string $url the url to set
+   */
+  public function setUrl($url) {
+    if (substr($url, 0, 4) == 'http') {
+      $this->url = $url;
+    } else {
+      // Force the path become relative.
+      if (substr($url, 0, 1) !== '/') {
+        $url = '/' . $url;
+      }
+      global $apiConfig;
+      $this->url = $apiConfig['basePath'] . $url;
+    }
+  }
+
+  /**
+   * @param string $method Set he HTTP Method and normalize
+   * it to upper-case, as required by HTTP.
+   *
+   */
+  public function setRequestMethod($method) {
+    $this->requestMethod = strtoupper($method);
+  }
+
+  /**
+   * @param array $headers The HTTP request headers
+   * to be set and normalized.
+   */
+  public function setRequestHeaders($headers) {
+    $headers = Google_Utils::normalize($headers);
+    if ($this->requestHeaders) {
+      $headers = array_merge($this->requestHeaders, $headers);
+    }
+    $this->requestHeaders = $headers;
+  }
+
+  /**
+   * @param string $postBody the postBody to set
+   */
+  public function setPostBody($postBody) {
+    $this->postBody = $postBody;
+  }
+
+  /**
+   * Set the User-Agent Header.
+   * @param string $userAgent The User-Agent.
+   */
+  public function setUserAgent($userAgent) {
+    $this->userAgent = $userAgent;
+  }
+
+  /**
+   * @return string The User-Agent.
+   */
+  public function getUserAgent() {
+    return $this->userAgent;
+  }
+
+  /**
+   * Returns a cache key depending on if this was an OAuth signed request
+   * in which case it will use the non-signed url and access key to make this
+   * cache key unique per authenticated user, else use the plain request url
+   * @return string The md5 hash of the request cache key.
+   */
+  public function getCacheKey() {
+    $key = $this->getUrl();
+
+    if (isset($this->accessKey)) {
+      $key .= $this->accessKey;
+    }
+
+    if (isset($this->requestHeaders['authorization'])) {
+      $key .= $this->requestHeaders['authorization'];
+    }
+
+    return md5($key);
+  }
+
+  public function getParsedCacheControl() {
+    $parsed = array();
+    $rawCacheControl = $this->getResponseHeader('cache-control');
+    if ($rawCacheControl) {
+      $rawCacheControl = str_replace(', ', '&', $rawCacheControl);
+      parse_str($rawCacheControl, $parsed);
+    }
+
+    return $parsed;
+  }
+
+  /**
+   * @param string $id
+   * @return string A string representation of the HTTP Request.
+   */
+  public function toBatchString($id) {
+    $str = '';
+    foreach($this->batchHeaders as $key => $val) {
+      $str .= $key . ': ' . $val . "\n";
+    }
+
+    $str .= "Content-ID: $id\n";
+    $str .= "\n";
+
+    $path = parse_url($this->getUrl(), PHP_URL_PATH);
+    $str .= $this->getRequestMethod() . ' ' . $path . " HTTP/1.1\n";
+    foreach($this->getRequestHeaders() as $key => $val) {
+      $str .= $key . ': ' . $val . "\n";
+    }
+
+    if ($this->getPostBody()) {
+      $str .= "\n";
+      $str .= $this->getPostBody();
+    }
+
+    return $str;
+  }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/io/Google_IO.php b/apps/files_external/3rdparty/google-api-php-client/src/io/Google_IO.php
new file mode 100644
index 0000000000000000000000000000000000000000..5445e6990387ebffd1a8c7f4b8970ed12d87ea66
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/io/Google_IO.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once 'io/Google_HttpRequest.php';
+require_once 'io/Google_CurlIO.php';
+require_once 'io/Google_REST.php';
+
+/**
+ * Abstract IO class
+ *
+ * @author Chris Chabot <chabotc@google.com>
+ */
+interface Google_IO {
+  /**
+   * An utility function that first calls $this->auth->sign($request) and then executes makeRequest()
+   * on that signed request. Used for when a request should be authenticated
+   * @param Google_HttpRequest $request
+   * @return Google_HttpRequest $request
+   */
+  public function authenticatedRequest(Google_HttpRequest $request);
+
+  /**
+   * Executes a apIHttpRequest and returns the resulting populated httpRequest
+   * @param Google_HttpRequest $request
+   * @return Google_HttpRequest $request
+   */
+  public function makeRequest(Google_HttpRequest $request);
+
+  /**
+   * Set options that update the transport implementation's behavior.
+   * @param $options
+   */
+  public function setOptions($options);
+
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/io/Google_REST.php b/apps/files_external/3rdparty/google-api-php-client/src/io/Google_REST.php
new file mode 100644
index 0000000000000000000000000000000000000000..d0f3b3d564c885ac8eddfd81b4f4f8264532d991
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/io/Google_REST.php
@@ -0,0 +1,128 @@
+<?php
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * This class implements the RESTful transport of apiServiceRequest()'s
+ *
+ * @author Chris Chabot <chabotc@google.com>
+ * @author Chirag Shah <chirags@google.com>
+ */
+class Google_REST {
+  /**
+   * Executes a apiServiceRequest using a RESTful call by transforming it into
+   * an apiHttpRequest, and executed via apiIO::authenticatedRequest().
+   *
+   * @param Google_HttpRequest $req
+   * @return array decoded result
+   * @throws Google_ServiceException on server side error (ie: not authenticated,
+   *  invalid or malformed post body, invalid url)
+   */
+  static public function execute(Google_HttpRequest $req) {
+    $httpRequest = Google_Client::$io->makeRequest($req);
+    $decodedResponse = self::decodeHttpResponse($httpRequest);
+    $ret = isset($decodedResponse['data'])
+        ? $decodedResponse['data'] : $decodedResponse;
+    return $ret;
+  }
+
+  
+  /**
+   * Decode an HTTP Response.
+   * @static
+   * @throws Google_ServiceException
+   * @param Google_HttpRequest $response The http response to be decoded.
+   * @return mixed|null
+   */
+  public static function decodeHttpResponse($response) {
+    $code = $response->getResponseHttpCode();
+    $body = $response->getResponseBody();
+    $decoded = null;
+    
+    if ((intVal($code)) >= 300) {
+      $decoded = json_decode($body, true);
+      $err = 'Error calling ' . $response->getRequestMethod() . ' ' . $response->getUrl();
+      if ($decoded != null && isset($decoded['error']['message'])  && isset($decoded['error']['code'])) {
+        // if we're getting a json encoded error definition, use that instead of the raw response
+        // body for improved readability
+        $err .= ": ({$decoded['error']['code']}) {$decoded['error']['message']}";
+      } else {
+        $err .= ": ($code) $body";
+      }
+
+      throw new Google_ServiceException($err, $code, null, $decoded['error']['errors']);
+    }
+    
+    // Only attempt to decode the response, if the response code wasn't (204) 'no content'
+    if ($code != '204') {
+      $decoded = json_decode($body, true);
+      if ($decoded === null || $decoded === "") {
+        throw new Google_ServiceException("Invalid json in service response: $body");
+      }
+    }
+    return $decoded;
+  }
+
+  /**
+   * Parse/expand request parameters and create a fully qualified
+   * request uri.
+   * @static
+   * @param string $servicePath
+   * @param string $restPath
+   * @param array $params
+   * @return string $requestUrl
+   */
+  static function createRequestUri($servicePath, $restPath, $params) {
+    $requestUrl = $servicePath . $restPath;
+    $uriTemplateVars = array();
+    $queryVars = array();
+    foreach ($params as $paramName => $paramSpec) {
+      // Discovery v1.0 puts the canonical location under the 'location' field.
+      if (! isset($paramSpec['location'])) {
+        $paramSpec['location'] = $paramSpec['restParameterType'];
+      }
+
+      if ($paramSpec['type'] == 'boolean') {
+        $paramSpec['value'] = ($paramSpec['value']) ? 'true' : 'false';
+      }
+      if ($paramSpec['location'] == 'path') {
+        $uriTemplateVars[$paramName] = $paramSpec['value'];
+      } else {
+        if (isset($paramSpec['repeated']) && is_array($paramSpec['value'])) {
+          foreach ($paramSpec['value'] as $value) {
+            $queryVars[] = $paramName . '=' . rawurlencode($value);
+          }
+        } else {
+          $queryVars[] = $paramName . '=' . rawurlencode($paramSpec['value']);
+        }
+      }
+    }
+
+    if (count($uriTemplateVars)) {
+      $uriTemplateParser = new URI_Template_Parser($requestUrl);
+      $requestUrl = $uriTemplateParser->expand($uriTemplateVars);
+    }
+    //FIXME work around for the the uri template lib which url encodes
+    // the @'s & confuses our servers.
+    $requestUrl = str_replace('%40', '@', $requestUrl);
+
+    if (count($queryVars)) {
+      $requestUrl .= '?' . implode($queryVars, '&');
+    }
+
+    return $requestUrl;
+  }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/io/cacerts.pem b/apps/files_external/3rdparty/google-api-php-client/src/io/cacerts.pem
new file mode 100644
index 0000000000000000000000000000000000000000..da36ed1ba6de0a71d38a13188f82d89f440017bd
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/io/cacerts.pem
@@ -0,0 +1,714 @@
+# Certifcate Authority certificates for validating SSL connections.
+#
+# This file contains PEM format certificates generated from
+# http://mxr.mozilla.org/seamonkey/source/security/nss/lib/ckfw/builtins/certdata.txt
+#
+# ***** BEGIN LICENSE BLOCK *****
+# Version: MPL 1.1/GPL 2.0/LGPL 2.1
+#
+# The contents of this file are subject to the Mozilla Public License Version
+# 1.1 (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+# http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS IS" basis,
+# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+# for the specific language governing rights and limitations under the
+# License.
+#
+# The Original Code is the Netscape security libraries.
+#
+# The Initial Developer of the Original Code is
+# Netscape Communications Corporation.
+# Portions created by the Initial Developer are Copyright (C) 1994-2000
+# the Initial Developer. All Rights Reserved.
+#
+# Contributor(s):
+#
+# Alternatively, the contents of this file may be used under the terms of
+# either the GNU General Public License Version 2 or later (the "GPL"), or
+# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+# in which case the provisions of the GPL or the LGPL are applicable instead
+# of those above. If you wish to allow use of your version of this file only
+# under the terms of either the GPL or the LGPL, and not to allow others to
+# use your version of this file under the terms of the MPL, indicate your
+# decision by deleting the provisions above and replace them with the notice
+# and other provisions required by the GPL or the LGPL. If you do not delete
+# the provisions above, a recipient may use your version of this file under
+# the terms of any one of the MPL, the GPL or the LGPL.
+#
+# ***** END LICENSE BLOCK *****
+
+Verisign/RSA Secure Server CA
+=============================
+
+-----BEGIN CERTIFICATE-----
+MIICNDCCAaECEAKtZn5ORf5eV288mBle3cAwDQYJKoZIhvcNAQECBQAwXzELMAkG
+A1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYD
+VQQLEyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk0
+MTEwOTAwMDAwMFoXDTEwMDEwNzIzNTk1OVowXzELMAkGA1UEBhMCVVMxIDAeBgNV
+BAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2Vy
+dmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGbMA0GCSqGSIb3DQEBAQUAA4GJ
+ADCBhQJ+AJLOesGugz5aqomDV6wlAXYMra6OLDfO6zV4ZFQD5YRAUcm/jwjiioII
+0haGN1XpsSECrXZogZoFokvJSyVmIlZsiAeP94FZbYQHZXATcXY+m3dM41CJVphI
+uR2nKRoTLkoRWZweFdVJVCxzOmmCsZc5nG1wZ0jl3S3WyB57AgMBAAEwDQYJKoZI
+hvcNAQECBQADfgBl3X7hsuyw4jrg7HFGmhkRuNPHoLQDQCYCPgmc4RKz0Vr2N6W3
+YQO2WxZpO8ZECAyIUwxrl0nHPjXcbLm7qt9cuzovk2C2qUtN8iD3zV9/ZHuO3ABc
+1/p3yjkWWW8O6tO1g39NTUJWdrTJXwT4OPjr0l91X817/OWOgHz8UA==
+-----END CERTIFICATE-----
+
+Thawte Personal Basic CA
+========================
+
+-----BEGIN CERTIFICATE-----
+MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCWkEx
+FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
+VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
+ZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFBlcnNvbmFsIEJhc2lj
+IENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNpY0B0aGF3dGUuY29tMB4X
+DTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgcsxCzAJBgNVBAYTAlpBMRUw
+EwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UE
+ChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
+dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBD
+QTEoMCYGCSqGSIb3DQEJARYZcGVyc29uYWwtYmFzaWNAdGhhd3RlLmNvbTCBnzAN
+BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+CFeZIlDWmWr5vQvoPR+53
+dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJl+A1OFdK
+wPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7
+G1sY0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQF
+AAOBgQAt4plrsD16iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7
+c8a914phXAPjLSeoF+CEhULcXpvGt7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95B21P
+9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN92NWod8isQ==
+-----END CERTIFICATE-----
+
+Thawte Personal Premium CA
+==========================
+
+-----BEGIN CERTIFICATE-----
+MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMCWkEx
+FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
+VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
+ZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMaVGhhd3RlIFBlcnNvbmFsIFByZW1p
+dW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXByZW1pdW1AdGhhd3RlLmNv
+bTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHPMQswCQYDVQQGEwJa
+QTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAY
+BgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9u
+IFNlcnZpY2VzIERpdmlzaW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJl
+bWl1bSBDQTEqMCgGCSqGSIb3DQEJARYbcGVyc29uYWwtcHJlbWl1bUB0aGF3dGUu
+Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJZtn4B0TPuYwu8KHvE0Vs
+Bd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ8/JE2dWI
+Et12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYD
+ZicRFTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
+SIb3DQEBBAUAA4GBAGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIH
+b4Vnjt4rueIXsDqg8A6iAJrf8xQVbrvIhVqYgPn/vnQdPfP+MCXRNzRn+qVxeTBh
+KXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+WjS9Q2wfD6h+rM+D1KzGJ
+-----END CERTIFICATE-----
+
+Thawte Personal Freemail CA
+===========================
+
+-----BEGIN CERTIFICATE-----
+MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkEx
+FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
+VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
+ZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBlcnNvbmFsIEZyZWVt
+YWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0aGF3dGUu
+Y29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNVBAYT
+AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEa
+MBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRp
+b24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBG
+cmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhh
+d3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1GnX1LCUZFtx6UfY
+DFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6WZBrCFG5E
+rHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVq
+uzgkCGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zAN
+BgkqhkiG9w0BAQQFAAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjP
+MPuoSpaKH2JCI4wXD/S6ZJwXrEcp352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa
+/RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK/qarigd1iwzdUYRr5PjRznei
+gQ==
+-----END CERTIFICATE-----
+
+Thawte Server CA
+================
+
+-----BEGIN CERTIFICATE-----
+MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx
+FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
+VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
+biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm
+MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx
+MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
+DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3
+dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl
+cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3
+DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD
+gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91
+yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX
+L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj
+EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG
+7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e
+QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ
+qdq5snUb9kLy78fyGPmJvKP/iiMucEc=
+-----END CERTIFICATE-----
+
+Thawte Premium Server CA
+========================
+
+-----BEGIN CERTIFICATE-----
+MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx
+FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
+VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
+biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy
+dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t
+MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB
+MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG
+A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp
+b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl
+cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv
+bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE
+VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ
+ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR
+uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
+9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI
+hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM
+pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg==
+-----END CERTIFICATE-----
+
+Equifax Secure CA
+=================
+
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
+UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
+dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
+MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
+dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
+AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
+BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
+cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
+AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
+MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
+aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
+ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
+IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
+MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
+A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
+7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
+1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
+-----END CERTIFICATE-----
+
+Verisign Class 1 Public Primary Certification Authority
+=======================================================
+
+-----BEGIN CERTIFICATE-----
+MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJ
+BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh
+c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05
+NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYD
+VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJp
+bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOB
+jQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0N
+H8xlbgyw0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR
+4k5FVmkfeAKA2txHkSm7NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATAN
+BgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZo
+EWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnxgiJduLHdgSOjeyUVRjB5
+FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0ANACY89Fx
+lA==
+-----END CERTIFICATE-----
+
+Verisign Class 2 Public Primary Certification Authority
+=======================================================
+
+-----BEGIN CERTIFICATE-----
+MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkG
+A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
+cyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
+MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
+BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmlt
+YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
+ADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyh
+YGt+eSz6Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7
+FYCTXOvnzAhsPz6zSvz/S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0G
+CSqGSIb3DQEBAgUAA4GBAIobK/o5wXTXXtgZZKJYSi034DNHD6zt96rbHuSLBlxg
+J8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUYYAS/QoD90KioHgE796Nc
+r6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2lw0Xd8rY
+-----END CERTIFICATE-----
+
+Verisign Class 3 Public Primary Certification Authority
+=======================================================
+
+-----BEGIN CERTIFICATE-----
+MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
+A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
+cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
+MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
+BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
+YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
+ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
+BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
+I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
+CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
+lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
+AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
+-----END CERTIFICATE-----
+
+Verisign Class 1 Public Primary Certification Authority - G2
+============================================================
+
+-----BEGIN CERTIFICATE-----
+MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
+BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
+c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
+MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
+emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
+DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
+FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg
+UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
+YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
+MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
+AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK
+VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm
+Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID
+AQABMA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0J
+h9ZrbWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul
+uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68
+DzFc6PLZ
+-----END CERTIFICATE-----
+
+Verisign Class 2 Public Primary Certification Authority - G2
+============================================================
+
+-----BEGIN CERTIFICATE-----
+MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns
+YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
+MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
+aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe
+Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX
+MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj
+IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx
+KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
+eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B
+AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM
+HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw
+DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC
+AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji
+nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX
+rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn
+jBJ7xUS0rg==
+-----END CERTIFICATE-----
+
+Verisign Class 3 Public Primary Certification Authority - G2
+============================================================
+
+-----BEGIN CERTIFICATE-----
+MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
+BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
+c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
+MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
+emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
+DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
+FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg
+UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
+YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
+MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
+AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4
+pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0
+13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID
+AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk
+U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i
+F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY
+oJ2daZH9
+-----END CERTIFICATE-----
+
+Verisign Class 4 Public Primary Certification Authority - G2
+============================================================
+
+-----BEGIN CERTIFICATE-----
+MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
+BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
+c3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
+MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
+emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
+DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
+FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMg
+UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
+YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
+MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
+AQUAA4GNADCBiQKBgQC68OTP+cSuhVS5B1f5j8V/aBH4xBewRNzjMHPVKmIquNDM
+HO0oW369atyzkSTKQWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDHqGKB3FtK
+qsGgtG7rL+VXxbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwID
+AQABMA0GCSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwj
+cSGIL4LcY/oCRaxFWdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0y
+cyfYaT5DdPauxYma51N86Xv2S/PBZYPejYqcPIiNOVn8qj8ijaHBZlCBckztImRP
+T8qAkbYp
+-----END CERTIFICATE-----
+
+Verisign Class 1 Public Primary Certification Authority - G3
+============================================================
+
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
+cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
+LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
+aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
+VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
+aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
+bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
+IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4
+nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO
+8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV
+ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb
+PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2
+6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr
+n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a
+qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4
+wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
+ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs
+pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4
+E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
+-----END CERTIFICATE-----
+
+Verisign Class 2 Public Primary Certification Authority - G3
+============================================================
+
+-----BEGIN CERTIFICATE-----
+MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ
+BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy
+aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s
+IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp
+Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
+eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV
+BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp
+Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu
+Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g
+Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
+IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU
+J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO
+JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY
+wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o
+koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN
+qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E
+Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe
+xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u
+7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
+sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI
+sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP
+cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
+-----END CERTIFICATE-----
+
+Verisign Class 3 Public Primary Certification Authority - G3
+============================================================
+
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
+cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
+LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
+aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
+VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
+aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
+bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
+IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b
+N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t
+KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu
+kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm
+CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ
+Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu
+imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te
+2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe
+DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
+/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p
+F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt
+TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
+-----END CERTIFICATE-----
+
+Verisign Class 4 Public Primary Certification Authority - G3
+============================================================
+
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
+cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
+LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
+aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
+VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
+aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
+bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
+IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1
+GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ
++mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd
+U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm
+NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY
+ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/
+ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1
+CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq
+g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
+fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c
+2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/
+bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
+-----END CERTIFICATE-----
+
+Equifax Secure Global eBusiness CA
+==================================
+
+-----BEGIN CERTIFICATE-----
+MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc
+MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT
+ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw
+MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj
+dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l
+c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC
+UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc
+58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/
+o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH
+MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr
+aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA
+A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA
+Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv
+8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
+-----END CERTIFICATE-----
+
+Equifax Secure eBusiness CA 1
+=============================
+
+-----BEGIN CERTIFICATE-----
+MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc
+MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT
+ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw
+MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j
+LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ
+KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo
+RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu
+WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw
+Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD
+AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK
+eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM
+zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+
+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN
+/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ==
+-----END CERTIFICATE-----
+
+Equifax Secure eBusiness CA 2
+=============================
+
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
+UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj
+dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0
+NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD
+VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B
+AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G
+vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/
+BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C
+AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX
+MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl
+IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw
+NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq
+y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF
+MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
+A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy
+0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1
+E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN
+-----END CERTIFICATE-----
+
+Thawte Time Stamping CA
+=======================
+
+-----BEGIN CERTIFICATE-----
+MIICoTCCAgqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBizELMAkGA1UEBhMCWkEx
+FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzAN
+BgNVBAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAd
+BgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcgQ0EwHhcNOTcwMTAxMDAwMDAwWhcN
+MjAxMjMxMjM1OTU5WjCBizELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4g
+Q2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEdMBsG
+A1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1l
+c3RhbXBpbmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANYrWHhhRYZT
+6jR7UZztsOYuGA7+4F+oJ9O0yeB8WU4WDnNUYMF/9p8u6TqFJBU820cEY8OexJQa
+Wt9MevPZQx08EHp5JduQ/vBR5zDWQQD9nyjfeb6Uu522FOMjhdepQeBMpHmwKxqL
+8vg7ij5FrHGSALSQQZj7X+36ty6K+Ig3AgMBAAGjEzARMA8GA1UdEwEB/wQFMAMB
+Af8wDQYJKoZIhvcNAQEEBQADgYEAZ9viwuaHPUCDhjc1fR/OmsMMZiCouqoEiYbC
+9RAIDb/LogWK0E02PvTX72nGXuSwlG9KuefeW4i2e9vjJ+V2w/A1wcu1J5szedyQ
+pgCed/r8zSeUQhac0xxo7L9c3eWpexAKMnRUEzGLhQOEkbdYATAUOK8oyvyxUBkZ
+CayJSdM=
+-----END CERTIFICATE-----
+
+thawte Primary Root CA
+======================
+
+-----BEGIN CERTIFICATE-----
+MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB
+qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
+Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
+MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV
+BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw
+NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j
+LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG
+A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
+IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs
+W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta
+3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk
+6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6
+Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J
+NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA
+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP
+r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU
+DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz
+YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
+xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2
+/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/
+LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7
+jVaMaA==
+-----END CERTIFICATE-----
+
+VeriSign Class 3 Public Primary Certification Authority - G5
+============================================================
+
+-----BEGIN CERTIFICATE-----
+MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
+yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
+ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
+U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
+ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
+MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
+ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
+biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
+U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
+aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
+nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
+t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
+SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
+BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
+rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
+NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
+BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
+BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
+aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
+MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
+p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
+5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
+WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
+4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
+hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
+-----END CERTIFICATE-----
+
+Entrust.net Secure Server Certification Authority
+=================================================
+
+-----BEGIN CERTIFICATE-----
+MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
+VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
+ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
+KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
+ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1
+MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE
+ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j
+b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
+bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg
+U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA
+A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/
+I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3
+wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC
+AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb
+oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5
+BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
+dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk
+MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
+b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
+dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0
+MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi
+E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa
+MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI
+hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN
+95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd
+2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
+-----END CERTIFICATE-----
+
+Go Daddy Certification Authority Root Certificate Bundle
+========================================================
+
+-----BEGIN CERTIFICATE-----
+MIIE3jCCA8agAwIBAgICAwEwDQYJKoZIhvcNAQEFBQAwYzELMAkGA1UEBhMCVVMx
+ITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
+RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMTYw
+MTU0MzdaFw0yNjExMTYwMTU0MzdaMIHKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMH
+QXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTEaMBgGA1UEChMRR29EYWRkeS5j
+b20sIEluYy4xMzAxBgNVBAsTKmh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5j
+b20vcmVwb3NpdG9yeTEwMC4GA1UEAxMnR28gRGFkZHkgU2VjdXJlIENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5MREwDwYDVQQFEwgwNzk2OTI4NzCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBAMQt1RWMnCZM7DI161+4WQFapmGBWTtwY6vj3D3H
+KrjJM9N55DrtPDAjhI6zMBS2sofDPZVUBJ7fmd0LJR4h3mUpfjWoqVTr9vcyOdQm
+VZWt7/v+WIbXnvQAjYwqDL1CBM6nPwT27oDyqu9SoWlm2r4arV3aLGbqGmu75RpR
+SgAvSMeYddi5Kcju+GZtCpyz8/x4fKL4o/K1w/O5epHBp+YlLpyo7RJlbmr2EkRT
+cDCVw5wrWCs9CHRK8r5RsL+H0EwnWGu1NcWdrxcx+AuP7q2BNgWJCJjPOq8lh8BJ
+6qf9Z/dFjpfMFDniNoW1fho3/Rb2cRGadDAW/hOUoz+EDU8CAwEAAaOCATIwggEu
+MB0GA1UdDgQWBBT9rGEyk2xF1uLuhV+auud2mWjM5zAfBgNVHSMEGDAWgBTSxLDS
+kdRMEXGzYcs9of7dqGrU4zASBgNVHRMBAf8ECDAGAQH/AgEAMDMGCCsGAQUFBwEB
+BCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZ29kYWRkeS5jb20wRgYDVR0f
+BD8wPTA7oDmgN4Y1aHR0cDovL2NlcnRpZmljYXRlcy5nb2RhZGR5LmNvbS9yZXBv
+c2l0b3J5L2dkcm9vdC5jcmwwSwYDVR0gBEQwQjBABgRVHSAAMDgwNgYIKwYBBQUH
+AgEWKmh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5jb20vcmVwb3NpdG9yeTAO
+BgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBANKGwOy9+aG2Z+5mC6IG
+OgRQjhVyrEp0lVPLN8tESe8HkGsz2ZbwlFalEzAFPIUyIXvJxwqoJKSQ3kbTJSMU
+A2fCENZvD117esyfxVgqwcSeIaha86ykRvOe5GPLL5CkKSkB2XIsKd83ASe8T+5o
+0yGPwLPk9Qnt0hCqU7S+8MxZC9Y7lhyVJEnfzuz9p0iRFEUOOjZv2kWzRaJBydTX
+RE4+uXR21aITVSzGh6O1mawGhId/dQb8vxRMDsxuxN89txJx9OjxUUAiKEngHUuH
+qDTMBqLdElrRhjZkAzVvb3du6/KFUJheqwNTrZEjYx8WnM25sgVjOuH0aBsXBTWV
+U+4=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIE+zCCBGSgAwIBAgICAQ0wDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1Zh
+bGlDZXJ0IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIElu
+Yy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24g
+QXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAe
+BgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTA0MDYyOTE3MDYyMFoX
+DTI0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBE
+YWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3MgMiBDZXJ0
+aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgC
+ggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
+2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+q
+N1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiO
+r18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lN
+f4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+YihfukEH
+U1jPEX44dMX4/7VpkI+EdOqXG68CAQOjggHhMIIB3TAdBgNVHQ4EFgQU0sSw0pHU
+TBFxs2HLPaH+3ahq1OMwgdIGA1UdIwSByjCBx6GBwaSBvjCBuzEkMCIGA1UEBxMb
+VmFsaUNlcnQgVmFsaWRhdGlvbiBOZXR3b3JrMRcwFQYDVQQKEw5WYWxpQ2VydCwg
+SW5jLjE1MDMGA1UECxMsVmFsaUNlcnQgQ2xhc3MgMiBQb2xpY3kgVmFsaWRhdGlv
+biBBdXRob3JpdHkxITAfBgNVBAMTGGh0dHA6Ly93d3cudmFsaWNlcnQuY29tLzEg
+MB4GCSqGSIb3DQEJARYRaW5mb0B2YWxpY2VydC5jb22CAQEwDwYDVR0TAQH/BAUw
+AwEB/zAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmdv
+ZGFkZHkuY29tMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jZXJ0aWZpY2F0ZXMu
+Z29kYWRkeS5jb20vcmVwb3NpdG9yeS9yb290LmNybDBLBgNVHSAERDBCMEAGBFUd
+IAAwODA2BggrBgEFBQcCARYqaHR0cDovL2NlcnRpZmljYXRlcy5nb2RhZGR5LmNv
+bS9yZXBvc2l0b3J5MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOBgQC1
+QPmnHfbq/qQaQlpE9xXUhUaJwL6e4+PrxeNYiY+Sn1eocSxI0YGyeR+sBjUZsE4O
+WBsUs5iB0QQeyAfJg594RAoYC5jcdnplDQ1tgMQLARzLrUc+cb53S8wGd9D0Vmsf
+SxOaFIqII6hR8INMqzW/Rn453HWkrugp++85j09VZw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
+IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
+BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
+aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
+9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy
+NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
+azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
+YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
+Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
+cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY
+dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9
+WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS
+v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v
+UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu
+IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC
+W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
+-----END CERTIFICATE-----
+
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/service/Google_BatchRequest.php b/apps/files_external/3rdparty/google-api-php-client/src/service/Google_BatchRequest.php
new file mode 100644
index 0000000000000000000000000000000000000000..3916b223a7edc8554b564205d9ad986d51a915a7
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/service/Google_BatchRequest.php
@@ -0,0 +1,110 @@
+<?php
+/*
+ * Copyright 2012 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @author Chirag Shah <chirags@google.com>
+ */
+class Google_BatchRequest {
+  /** @var string Multipart Boundary. */
+  private $boundary;
+
+  /** @var array service requests to be executed. */
+  private $requests = array();
+
+  public function __construct($boundary = false) {
+    $boundary = (false == $boundary) ? mt_rand() : $boundary;
+    $this->boundary = str_replace('"', '', $boundary);
+  }
+
+  public function add(Google_HttpRequest $request, $key = false) {
+    if (false == $key) {
+      $key = mt_rand();
+    }
+
+    $this->requests[$key] = $request;
+  }
+
+  public function execute() {
+    $body = '';
+
+    /** @var Google_HttpRequest $req */
+    foreach($this->requests as $key => $req) {
+      $body .= "--{$this->boundary}\n";
+      $body .= $req->toBatchString($key) . "\n";
+    }
+
+    $body = rtrim($body);
+    $body .= "\n--{$this->boundary}--";
+
+    global $apiConfig;
+    $url = $apiConfig['basePath'] . '/batch';
+    $httpRequest = new Google_HttpRequest($url, 'POST');
+    $httpRequest->setRequestHeaders(array(
+        'Content-Type' => 'multipart/mixed; boundary=' . $this->boundary));
+
+    $httpRequest->setPostBody($body);
+    $response = Google_Client::$io->makeRequest($httpRequest);
+
+    $response = $this->parseResponse($response);
+    return $response;
+  }
+
+  public function parseResponse(Google_HttpRequest $response) {
+    $contentType = $response->getResponseHeader('content-type');
+    $contentType = explode(';', $contentType);
+    $boundary = false;
+    foreach($contentType as $part) {
+      $part = (explode('=', $part, 2));
+      if (isset($part[0]) && 'boundary' == trim($part[0])) {
+        $boundary = $part[1];
+      }
+    }
+
+    $body = $response->getResponseBody();
+    if ($body) {
+      $body = str_replace("--$boundary--", "--$boundary", $body);
+      $parts = explode("--$boundary", $body);
+      $responses = array();
+
+      foreach($parts as $part) {
+        $part = trim($part);
+        if (!empty($part)) {
+          list($metaHeaders, $part) = explode("\r\n\r\n", $part, 2);
+          $metaHeaders = Google_CurlIO::parseResponseHeaders($metaHeaders);
+
+          $status = substr($part, 0, strpos($part, "\n"));
+          $status = explode(" ", $status);
+          $status = $status[1];
+
+          list($partHeaders, $partBody) = Google_CurlIO::parseHttpResponse($part, false);
+          $response = new Google_HttpRequest("");
+          $response->setResponseHttpCode($status);
+          $response->setResponseHeaders($partHeaders);
+          $response->setResponseBody($partBody);
+          $response = Google_REST::decodeHttpResponse($response);
+
+          // Need content id.
+          $responses[$metaHeaders['content-id']] = $response;
+        }
+      }
+
+      return $responses;
+    }
+
+    return null;
+  }
+}
\ No newline at end of file
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/service/Google_MediaFileUpload.php b/apps/files_external/3rdparty/google-api-php-client/src/service/Google_MediaFileUpload.php
new file mode 100644
index 0000000000000000000000000000000000000000..c64e18851df2a13b7a40400b7997a5a2635d999a
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/service/Google_MediaFileUpload.php
@@ -0,0 +1,262 @@
+<?php
+/**
+ * Copyright 2012 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @author Chirag Shah <chirags@google.com>
+ *
+ */
+class Google_MediaFileUpload {
+  const UPLOAD_MEDIA_TYPE = 'media';
+  const UPLOAD_MULTIPART_TYPE = 'multipart';
+  const UPLOAD_RESUMABLE_TYPE = 'resumable';
+
+  /** @var string $mimeType */
+  public $mimeType;
+
+  /** @var string $data */
+  public $data;
+
+  /** @var bool $resumable */
+  public $resumable;
+
+  /** @var int $chunkSize */
+  public $chunkSize;
+
+  /** @var int $size */
+  public $size;
+
+  /** @var string $resumeUri */
+  public $resumeUri;
+
+  /** @var int $progress */
+  public $progress;
+
+  /**
+   * @param $mimeType string
+   * @param $data string The bytes you want to upload.
+   * @param $resumable bool
+   * @param bool $chunkSize File will be uploaded in chunks of this many bytes.
+   * only used if resumable=True
+   */
+  public function __construct($mimeType, $data, $resumable=false, $chunkSize=false) {
+    $this->mimeType = $mimeType;
+    $this->data = $data;
+    $this->size = strlen($this->data);
+    $this->resumable = $resumable;
+    if(!$chunkSize) {
+      $chunkSize = 256 * 1024;
+    }
+    $this->chunkSize = $chunkSize;
+    $this->progress = 0;
+  }
+
+  public function setFileSize($size) {
+    $this->size = $size;
+  }
+
+  /**
+   * @static
+   * @param $meta
+   * @param $params
+   * @return array|bool
+   */
+  public static function process($meta, &$params) {
+    $payload = array();
+    $meta = is_string($meta) ? json_decode($meta, true) : $meta;
+    $uploadType = self::getUploadType($meta, $payload, $params);
+    if (!$uploadType) {
+      // Process as a normal API request.
+      return false;
+    }
+
+    // Process as a media upload request.
+    $params['uploadType'] = array(
+        'type' => 'string',
+        'location' => 'query',
+        'value' => $uploadType,
+    );
+
+    $mimeType = isset($params['mimeType'])
+        ? $params['mimeType']['value']
+        : false;
+    unset($params['mimeType']);
+
+    if (!$mimeType) {
+      $mimeType = $payload['content-type'];
+    }
+
+    if (isset($params['file'])) {
+      // This is a standard file upload with curl.
+      $file = $params['file']['value'];
+      unset($params['file']);
+      return self::processFileUpload($file, $mimeType);
+    }
+
+    $data = isset($params['data'])
+        ? $params['data']['value']
+        : false;
+    unset($params['data']);
+
+    if (self::UPLOAD_RESUMABLE_TYPE == $uploadType) {
+      $payload['content-type'] = $mimeType;
+      $payload['postBody'] = is_string($meta) ? $meta : json_encode($meta);
+
+    } elseif (self::UPLOAD_MEDIA_TYPE == $uploadType) {
+      // This is a simple media upload.
+      $payload['content-type'] = $mimeType;
+      $payload['postBody'] = $data;
+    }
+
+    elseif (self::UPLOAD_MULTIPART_TYPE == $uploadType) {
+      // This is a multipart/related upload.
+      $boundary = isset($params['boundary']['value']) ? $params['boundary']['value'] : mt_rand();
+      $boundary = str_replace('"', '', $boundary);
+      $payload['content-type'] = 'multipart/related; boundary=' . $boundary;
+      $related = "--$boundary\r\n";
+      $related .= "Content-Type: application/json; charset=UTF-8\r\n";
+      $related .= "\r\n" . json_encode($meta) . "\r\n";
+      $related .= "--$boundary\r\n";
+      $related .= "Content-Type: $mimeType\r\n";
+      $related .= "Content-Transfer-Encoding: base64\r\n";
+      $related .= "\r\n" . base64_encode($data) . "\r\n";
+      $related .= "--$boundary--";
+      $payload['postBody'] = $related;
+    }
+
+    return $payload;
+  }
+
+  /**
+   * Prepares a standard file upload via cURL.
+   * @param $file
+   * @param $mime
+   * @return array Includes the processed file name.
+   * @visible For testing.
+   */
+  public static function processFileUpload($file, $mime) {
+    if (!$file) return array();
+    if (substr($file, 0, 1) != '@') {
+      $file = '@' . $file;
+    }
+
+    // This is a standard file upload with curl.
+    $params = array('postBody' => array('file' => $file));
+    if ($mime) {
+      $params['content-type'] = $mime;
+    }
+
+    return $params;
+  }
+
+  /**
+   * Valid upload types:
+   * - resumable (UPLOAD_RESUMABLE_TYPE)
+   * - media (UPLOAD_MEDIA_TYPE)
+   * - multipart (UPLOAD_MULTIPART_TYPE)
+   * - none (false)
+   * @param $meta
+   * @param $payload
+   * @param $params
+   * @return bool|string
+   */
+  public static function getUploadType($meta, &$payload, &$params) {
+    if (isset($params['mediaUpload'])
+        && get_class($params['mediaUpload']['value']) == 'Google_MediaFileUpload') {
+      $upload = $params['mediaUpload']['value'];
+      unset($params['mediaUpload']);
+      $payload['content-type'] = $upload->mimeType;
+      if (isset($upload->resumable) && $upload->resumable) {
+        return self::UPLOAD_RESUMABLE_TYPE;
+      }
+    }
+
+    // Allow the developer to override the upload type.
+    if (isset($params['uploadType'])) {
+      return $params['uploadType']['value'];
+    }
+
+    $data = isset($params['data']['value'])
+        ? $params['data']['value'] : false;
+
+    if (false == $data && false == isset($params['file'])) {
+      // No upload data available.
+      return false;
+    }
+
+    if (isset($params['file'])) {
+      return self::UPLOAD_MEDIA_TYPE;
+    }
+
+    if (false == $meta) {
+      return self::UPLOAD_MEDIA_TYPE;
+    }
+
+    return self::UPLOAD_MULTIPART_TYPE;
+  }
+
+
+  public function nextChunk(Google_HttpRequest $req, $chunk=false) {
+    if (false == $this->resumeUri) {
+      $this->resumeUri = $this->getResumeUri($req);
+    }
+
+    if (false == $chunk) {
+      $chunk = substr($this->data, $this->progress, $this->chunkSize);
+    }
+
+    $lastBytePos = $this->progress + strlen($chunk) - 1;
+    $headers = array(
+      'content-range' => "bytes $this->progress-$lastBytePos/$this->size",
+      'content-type' => $req->getRequestHeader('content-type'),
+      'content-length' => $this->chunkSize,
+      'expect' => '',
+    );
+
+    $httpRequest = new Google_HttpRequest($this->resumeUri, 'PUT', $headers, $chunk);
+    $response = Google_Client::$io->authenticatedRequest($httpRequest);
+    $code = $response->getResponseHttpCode();
+    if (308 == $code) {
+      $range = explode('-', $response->getResponseHeader('range'));
+      $this->progress = $range[1] + 1;
+      return false;
+    } else {
+      return Google_REST::decodeHttpResponse($response);
+    }
+  }
+
+  private function getResumeUri(Google_HttpRequest $httpRequest) {
+    $result = null;
+    $body = $httpRequest->getPostBody();
+    if ($body) {
+      $httpRequest->setRequestHeaders(array(
+        'content-type' => 'application/json; charset=UTF-8',
+        'content-length' => Google_Utils::getStrLen($body),
+        'x-upload-content-type' => $this->mimeType,
+        'x-upload-content-length' => $this->size,
+        'expect' => '',
+      ));
+    }
+
+    $response = Google_Client::$io->makeRequest($httpRequest);
+    $location = $response->getResponseHeader('location');
+    $code = $response->getResponseHttpCode();
+    if (200 == $code && true == $location) {
+      return $location;
+    }
+    throw new Google_Exception("Failed to start the resumable upload");
+  }
+}
\ No newline at end of file
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/service/Google_Model.php b/apps/files_external/3rdparty/google-api-php-client/src/service/Google_Model.php
new file mode 100644
index 0000000000000000000000000000000000000000..cb44cb257481b231c2f38203f460bd54576a5f91
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/service/Google_Model.php
@@ -0,0 +1,115 @@
+<?php
+/*
+ * Copyright 2011 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * This class defines attributes, valid values, and usage which is generated from
+ * a given json schema. http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5
+ *
+ * @author Chirag Shah <chirags@google.com>
+ *
+ */
+class Google_Model {
+  public function __construct( /* polymorphic */ ) {
+    if (func_num_args() ==  1 && is_array(func_get_arg(0))) {
+      // Initialize the model with the array's contents.
+      $array = func_get_arg(0);
+      $this->mapTypes($array);
+    }
+  }
+
+  /**
+   * Initialize this object's properties from an array.
+   *
+   * @param array $array Used to seed this object's properties.
+   * @return void
+   */
+  protected function mapTypes($array) {
+    foreach ($array as $key => $val) {
+      $this->$key = $val;
+
+      $keyTypeName = "__$key" . 'Type';
+      $keyDataType = "__$key" . 'DataType';
+      if ($this->useObjects() && property_exists($this, $keyTypeName)) {
+        if ($this->isAssociativeArray($val)) {
+          if (isset($this->$keyDataType) && 'map' == $this->$keyDataType) {
+            foreach($val as $arrayKey => $arrayItem) {
+              $val[$arrayKey] = $this->createObjectFromName($keyTypeName, $arrayItem);
+            }
+            $this->$key = $val;
+          } else {
+            $this->$key = $this->createObjectFromName($keyTypeName, $val);
+          }
+        } else if (is_array($val)) {
+          $arrayObject = array();
+          foreach ($val as $arrayIndex => $arrayItem) {
+            $arrayObject[$arrayIndex] = $this->createObjectFromName($keyTypeName, $arrayItem);
+          }
+          $this->$key = $arrayObject;
+        }
+      }
+    }
+  }
+
+  /**
+   * Returns true only if the array is associative.
+   * @param array $array
+   * @return bool True if the array is associative.
+   */
+  protected function isAssociativeArray($array) {
+    if (!is_array($array)) {
+      return false;
+    }
+    $keys = array_keys($array);
+    foreach($keys as $key) {
+      if (is_string($key)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * Given a variable name, discover its type.
+   *
+   * @param $name
+   * @param $item
+   * @return object The object from the item.
+   */
+  private function createObjectFromName($name, $item) {
+    $type = $this->$name;
+    return new $type($item);
+  }
+
+  protected function useObjects() {
+    global $apiConfig;
+    return (isset($apiConfig['use_objects']) && $apiConfig['use_objects']);
+  }
+
+  /**
+   * Verify if $obj is an array.
+   * @throws Google_Exception Thrown if $obj isn't an array.
+   * @param array $obj Items that should be validated.
+   * @param string $type Array items should be of this type.
+   * @param string $method Method expecting an array as an argument.
+   */
+  public function assertIsArray($obj, $type, $method) {
+    if ($obj && !is_array($obj)) {
+      throw new Google_Exception("Incorrect parameter type passed to $method(), expected an"
+          . " array containing items of type $type.");
+    }
+  }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/service/Google_Service.php b/apps/files_external/3rdparty/google-api-php-client/src/service/Google_Service.php
new file mode 100644
index 0000000000000000000000000000000000000000..1f4731fb2f4b2d5a16925e61f89ef95b8746ddf6
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/service/Google_Service.php
@@ -0,0 +1,22 @@
+<?php
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+class Google_Service {
+  public $version;
+  public $servicePath;
+  public $resource;
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/service/Google_ServiceResource.php b/apps/files_external/3rdparty/google-api-php-client/src/service/Google_ServiceResource.php
new file mode 100644
index 0000000000000000000000000000000000000000..bb3af4db8090efa8e460d06094ed440a5222ee97
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/service/Google_ServiceResource.php
@@ -0,0 +1,205 @@
+<?php
+/**
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Implements the actual methods/resources of the discovered Google API using magic function
+ * calling overloading (__call()), which on call will see if the method name (plus.activities.list)
+ * is available in this service, and if so construct an apiHttpRequest representing it.
+ *
+ * @author Chris Chabot <chabotc@google.com>
+ * @author Chirag Shah <chirags@google.com>
+ *
+ */
+class Google_ServiceResource {
+  // Valid query parameters that work, but don't appear in discovery.
+  private $stackParameters = array(
+      'alt' => array('type' => 'string', 'location' => 'query'),
+      'boundary' => array('type' => 'string', 'location' => 'query'),
+      'fields' => array('type' => 'string', 'location' => 'query'),
+      'trace' => array('type' => 'string', 'location' => 'query'),
+      'userIp' => array('type' => 'string', 'location' => 'query'),
+      'userip' => array('type' => 'string', 'location' => 'query'),
+      'quotaUser' => array('type' => 'string', 'location' => 'query'),
+      'file' => array('type' => 'complex', 'location' => 'body'),
+      'data' => array('type' => 'string', 'location' => 'body'),
+      'mimeType' => array('type' => 'string', 'location' => 'header'),
+      'uploadType' => array('type' => 'string', 'location' => 'query'),
+      'mediaUpload' => array('type' => 'complex', 'location' => 'query'),
+  );
+
+  /** @var Google_Service $service */
+  private $service;
+
+  /** @var string $serviceName */
+  private $serviceName;
+
+  /** @var string $resourceName */
+  private $resourceName;
+
+  /** @var array $methods */
+  private $methods;
+
+  public function __construct($service, $serviceName, $resourceName, $resource) {
+    $this->service = $service;
+    $this->serviceName = $serviceName;
+    $this->resourceName = $resourceName;
+    $this->methods = isset($resource['methods']) ? $resource['methods'] : array($resourceName => $resource);
+  }
+
+  /**
+   * @param $name
+   * @param $arguments
+   * @return Google_HttpRequest|array
+   * @throws Google_Exception
+   */
+  public function __call($name, $arguments) {
+    if (! isset($this->methods[$name])) {
+      throw new Google_Exception("Unknown function: {$this->serviceName}->{$this->resourceName}->{$name}()");
+    }
+    $method = $this->methods[$name];
+    $parameters = $arguments[0];
+
+    // postBody is a special case since it's not defined in the discovery document as parameter, but we abuse the param entry for storing it
+    $postBody = null;
+    if (isset($parameters['postBody'])) {
+      if (is_object($parameters['postBody'])) {
+        $this->stripNull($parameters['postBody']);
+      }
+
+      // Some APIs require the postBody to be set under the data key.
+      if (is_array($parameters['postBody']) && 'latitude' == $this->serviceName) {
+        if (!isset($parameters['postBody']['data'])) {
+          $rawBody = $parameters['postBody'];
+          unset($parameters['postBody']);
+          $parameters['postBody']['data'] = $rawBody;
+        }
+      }
+
+      $postBody = is_array($parameters['postBody']) || is_object($parameters['postBody'])
+          ? json_encode($parameters['postBody'])
+          : $parameters['postBody'];
+      unset($parameters['postBody']);
+
+      if (isset($parameters['optParams'])) {
+        $optParams = $parameters['optParams'];
+        unset($parameters['optParams']);
+        $parameters = array_merge($parameters, $optParams);
+      }
+    }
+
+    if (!isset($method['parameters'])) {
+      $method['parameters'] = array();
+    }
+    
+    $method['parameters'] = array_merge($method['parameters'], $this->stackParameters);
+    foreach ($parameters as $key => $val) {
+      if ($key != 'postBody' && ! isset($method['parameters'][$key])) {
+        throw new Google_Exception("($name) unknown parameter: '$key'");
+      }
+    }
+    if (isset($method['parameters'])) {
+      foreach ($method['parameters'] as $paramName => $paramSpec) {
+        if (isset($paramSpec['required']) && $paramSpec['required'] && ! isset($parameters[$paramName])) {
+          throw new Google_Exception("($name) missing required param: '$paramName'");
+        }
+        if (isset($parameters[$paramName])) {
+          $value = $parameters[$paramName];
+          $parameters[$paramName] = $paramSpec;
+          $parameters[$paramName]['value'] = $value;
+          unset($parameters[$paramName]['required']);
+        } else {
+          unset($parameters[$paramName]);
+        }
+      }
+    }
+
+    // Discovery v1.0 puts the canonical method id under the 'id' field.
+    if (! isset($method['id'])) {
+      $method['id'] = $method['rpcMethod'];
+    }
+
+    // Discovery v1.0 puts the canonical path under the 'path' field.
+    if (! isset($method['path'])) {
+      $method['path'] = $method['restPath'];
+    }
+
+    $servicePath = $this->service->servicePath;
+
+    // Process Media Request
+    $contentType = false;
+    if (isset($method['mediaUpload'])) {
+      $media = Google_MediaFileUpload::process($postBody, $parameters);
+      if ($media) {
+        $contentType = isset($media['content-type']) ? $media['content-type']: null;
+        $postBody = isset($media['postBody']) ? $media['postBody'] : null;
+        $servicePath = $method['mediaUpload']['protocols']['simple']['path'];
+        $method['path'] = '';
+      }
+    }
+
+    $url = Google_REST::createRequestUri($servicePath, $method['path'], $parameters);
+    $httpRequest = new Google_HttpRequest($url, $method['httpMethod'], null, $postBody);
+    if ($postBody) {
+      $contentTypeHeader = array();
+      if (isset($contentType) && $contentType) {
+        $contentTypeHeader['content-type'] = $contentType;
+      } else {
+        $contentTypeHeader['content-type'] = 'application/json; charset=UTF-8';
+        $contentTypeHeader['content-length'] = Google_Utils::getStrLen($postBody);
+      }
+      $httpRequest->setRequestHeaders($contentTypeHeader);
+    }
+
+    $httpRequest = Google_Client::$auth->sign($httpRequest);
+    if (Google_Client::$useBatch) {
+      return $httpRequest;
+    }
+
+    // Terminate immediately if this is a resumable request.
+    if (isset($parameters['uploadType']['value'])
+        && Google_MediaFileUpload::UPLOAD_RESUMABLE_TYPE == $parameters['uploadType']['value']) {
+      $contentTypeHeader = array();
+      if (isset($contentType) && $contentType) {
+        $contentTypeHeader['content-type'] = $contentType;
+      }
+      $httpRequest->setRequestHeaders($contentTypeHeader);
+      if ($postBody) {
+        $httpRequest->setPostBody($postBody);
+      }
+      return $httpRequest;
+    }
+
+    return Google_REST::execute($httpRequest);
+  }
+
+  public  function useObjects() {
+    global $apiConfig;
+    return (isset($apiConfig['use_objects']) && $apiConfig['use_objects']);
+  }
+
+  protected function stripNull(&$o) {
+    $o = (array) $o;
+    foreach ($o as $k => $v) {
+      if ($v === null || strstr($k, "\0*\0__")) {
+        unset($o[$k]);
+      }
+      elseif (is_object($v) || is_array($v)) {
+        $this->stripNull($o[$k]);
+      }
+    }
+  }
+}
diff --git a/apps/files_external/3rdparty/google-api-php-client/src/service/Google_Utils.php b/apps/files_external/3rdparty/google-api-php-client/src/service/Google_Utils.php
new file mode 100644
index 0000000000000000000000000000000000000000..be94902c2edf963ca6d36ae2ab66d02941a897a4
--- /dev/null
+++ b/apps/files_external/3rdparty/google-api-php-client/src/service/Google_Utils.php
@@ -0,0 +1,117 @@
+<?php
+/*
+ * Copyright 2011 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Collection of static utility methods used for convenience across
+ * the client library.
+ *
+ * @author Chirag Shah <chirags@google.com>
+ */
+class Google_Utils {
+  public static function urlSafeB64Encode($data) {
+    $b64 = base64_encode($data);
+    $b64 = str_replace(array('+', '/', '\r', '\n', '='),
+                       array('-', '_'),
+                       $b64);
+    return $b64;
+  }
+
+  public static function urlSafeB64Decode($b64) {
+    $b64 = str_replace(array('-', '_'),
+                       array('+', '/'),
+                       $b64);
+    return base64_decode($b64);
+  }
+
+  /**
+   * Misc function used to count the number of bytes in a post body, in the world of multi-byte chars
+   * and the unpredictability of strlen/mb_strlen/sizeof, this is the only way to do that in a sane
+   * manner at the moment.
+   *
+   * This algorithm was originally developed for the
+   * Solar Framework by Paul M. Jones
+   *
+   * @link   http://solarphp.com/
+   * @link   http://svn.solarphp.com/core/trunk/Solar/Json.php
+   * @link   http://framework.zend.com/svn/framework/standard/trunk/library/Zend/Json/Decoder.php
+   * @param  string $str
+   * @return int The number of bytes in a string.
+   */
+  static public function getStrLen($str) {
+    $strlenVar = strlen($str);
+    $d = $ret = 0;
+    for ($count = 0; $count < $strlenVar; ++ $count) {
+      $ordinalValue = ord($str{$ret});
+      switch (true) {
+        case (($ordinalValue >= 0x20) && ($ordinalValue <= 0x7F)):
+          // characters U-00000000 - U-0000007F (same as ASCII)
+          $ret ++;
+          break;
+
+        case (($ordinalValue & 0xE0) == 0xC0):
+          // characters U-00000080 - U-000007FF, mask 110XXXXX
+          // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+          $ret += 2;
+          break;
+
+        case (($ordinalValue & 0xF0) == 0xE0):
+          // characters U-00000800 - U-0000FFFF, mask 1110XXXX
+          // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+          $ret += 3;
+          break;
+
+        case (($ordinalValue & 0xF8) == 0xF0):
+          // characters U-00010000 - U-001FFFFF, mask 11110XXX
+          // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+          $ret += 4;
+          break;
+
+        case (($ordinalValue & 0xFC) == 0xF8):
+          // characters U-00200000 - U-03FFFFFF, mask 111110XX
+          // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+          $ret += 5;
+          break;
+
+        case (($ordinalValue & 0xFE) == 0xFC):
+          // characters U-04000000 - U-7FFFFFFF, mask 1111110X
+          // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+          $ret += 6;
+          break;
+        default:
+          $ret ++;
+      }
+    }
+    return $ret;
+  }
+
+  /**
+   * Normalize all keys in an array to lower-case.
+   * @param array $arr
+   * @return array Normalized array.
+   */
+  public static function normalize($arr) {
+    if (!is_array($arr)) {
+      return array();
+    }
+
+    $normalized = array();
+    foreach ($arr as $key => $val) {
+      $normalized[strtolower($key)] = $val;
+    }
+    return $normalized;
+  }
+}
\ No newline at end of file
diff --git a/apps/files_external/ajax/google.php b/apps/files_external/ajax/google.php
index 70adcb2c2ad4f7a8d10bab181544bef73deb604c..e63b7cb07b96039020ac7bf1663e5edf4cf3f184 100644
--- a/apps/files_external/ajax/google.php
+++ b/apps/files_external/ajax/google.php
@@ -1,64 +1,42 @@
 <?php
-
-require_once 'Google/common.inc.php';
+set_include_path(get_include_path().PATH_SEPARATOR.
+	\OC_App::getAppPath('files_external').'/3rdparty/google-api-php-client/src');
+require_once 'Google_Client.php';
 
 OCP\JSON::checkAppEnabled('files_external');
 OCP\JSON::checkLoggedIn();
 OCP\JSON::callCheck();
 
-$consumer = new OAuthConsumer('anonymous', 'anonymous');
-$sigMethod = new OAuthSignatureMethod_HMAC_SHA1();
-if (isset($_POST['step'])) {
-	switch ($_POST['step']) {
-		case 1:
-			if (isset($_POST['callback'])) {
-				$callback = $_POST['callback'];
-			} else {
-				$callback = null;
-			}
-			$scope = 'https://docs.google.com/feeds/'
-					.' https://docs.googleusercontent.com/'
-					.' https://spreadsheets.google.com/feeds/';
-			$url = 'https://www.google.com/accounts/OAuthGetRequestToken?scope='.urlencode($scope);
-			$params = array('scope' => $scope, 'oauth_callback' => $callback);
-			$request = OAuthRequest::from_consumer_and_token($consumer, null, 'GET', $url, $params);
-			$request->sign_request($sigMethod, $consumer, null);
-			$response = send_signed_request('GET', $url, array($request->to_header()), null, false);
-			$token = array();
-			parse_str($response, $token);
-			if (isset($token['oauth_token']) && isset($token['oauth_token_secret'])) {
-				$authUrl = 'https://www.google.com/accounts/OAuthAuthorizeToken?oauth_token='.$token['oauth_token'];
-				OCP\JSON::success(array('data' => array('url' => $authUrl,
-														'request_token' => $token['oauth_token'],
-														'request_token_secret' => $token['oauth_token_secret'])));
-			} else {
+if (isset($_POST['client_id']) && isset($_POST['client_secret']) && isset($_POST['redirect'])) {
+	$client = new Google_Client();
+	$client->setClientId($_POST['client_id']);
+	$client->setClientSecret($_POST['client_secret']);
+	$client->setRedirectUri($_POST['redirect']);
+	$client->setScopes(array('https://www.googleapis.com/auth/drive'));
+	if (isset($_POST['step'])) {
+		$step = $_POST['step'];
+		if ($step == 1) {
+			try {
+				$authUrl = $client->createAuthUrl();
+				OCP\JSON::success(array('data' => array(
+					'url' => $authUrl
+				)));
+			} catch (Exception $exception) {
 				OCP\JSON::error(array('data' => array(
-					'message' => 'Fetching request tokens failed. Error: '.$response
-					)));
+					'message' => 'Step 1 failed. Exception: '.$exception->getMessage()
+				)));
 			}
-			break;
-		case 2:
-			if (isset($_POST['oauth_verifier'])
-				&& isset($_POST['request_token'])
-				&& isset($_POST['request_token_secret'])
-			) {
-				$token = new OAuthToken($_POST['request_token'], $_POST['request_token_secret']);
-				$url = 'https://www.google.com/accounts/OAuthGetAccessToken';
-				$request = OAuthRequest::from_consumer_and_token($consumer, $token, 'GET', $url,
-																 array('oauth_verifier' => $_POST['oauth_verifier']));
-				$request->sign_request($sigMethod, $consumer, $token);
-				$response = send_signed_request('GET', $url, array($request->to_header()), null, false);
-				$token = array();
-				parse_str($response, $token);
-				if (isset($token['oauth_token']) && isset($token['oauth_token_secret'])) {
-					OCP\JSON::success(array('access_token' => $token['oauth_token'],
-											'access_token_secret' => $token['oauth_token_secret']));
-				} else {
-					OCP\JSON::error(array('data' => array(
-						'message' => 'Fetching access tokens failed. Error: '.$response
-						)));
-				}
+		} else if ($step == 2 && isset($_POST['code'])) {
+			try {
+				$token = $client->authenticate($_POST['code']);
+				OCP\JSON::success(array('data' => array(
+					'token' => $token
+				)));
+			} catch (Exception $exception) {
+				OCP\JSON::error(array('data' => array(
+					'message' => 'Step 2 failed. Exception: '.$exception->getMessage()
+				)));
 			}
-			break;
+		}
 	}
-}
+}
\ No newline at end of file
diff --git a/apps/files_external/js/google.js b/apps/files_external/js/google.js
index 7be1b338e904fb1cba80cea821d28882a465d18b..7e111a95d982a1d320187d1c1a3672d6ab7d0355 100644
--- a/apps/files_external/js/google.js
+++ b/apps/files_external/js/google.js
@@ -1,69 +1,89 @@
 $(document).ready(function() {
 
-	$('#externalStorage tbody tr.\\\\OC\\\\Files\\\\Storage\\\\Google').each(function(index, tr) {
-		setupGoogleRow(tr);
-	});
-
-	$('#externalStorage').on('change', '#selectBackend', function() {
-		if ($(this).val() == '\\OC\\Files\\Storage\\Google') {
-			setupGoogleRow($('#externalStorage tbody>tr:last').prev('tr'));
-		}
-	});
-
-	function setupGoogleRow(tr) {
-		var configured = $(tr).find('[data-parameter="configured"]');
+	$('#externalStorage tbody tr.\\\\OC\\\\Files\\\\Storage\\\\Google').each(function() {
+		var configured = $(this).find('[data-parameter="configured"]');
 		if ($(configured).val() == 'true') {
-			$(tr).find('.configuration').append('<span id="access" style="padding-left:0.5em;">'+t('files_external', 'Access granted')+'</span>');
+			$(this).find('.configuration input').attr('disabled', 'disabled');
+			$(this).find('.configuration').append($('<span/>').attr('id', 'access')
+				.text(t('files_external', 'Access granted')));
 		} else {
-			var token = $(tr).find('[data-parameter="token"]');
-			var token_secret = $(tr).find('[data-parameter="token_secret"]');
-			var params = {};
-			window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m, key, value) {
-				params[key] = value;
-			});
-			if (params['oauth_token'] !== undefined && params['oauth_verifier'] !== undefined && decodeURIComponent(params['oauth_token']) == $(token).val()) {
-				var statusSpan = $(tr).find('.status span');
-				statusSpan.removeClass();
-				statusSpan.addClass('waiting');
-				$.post(OC.filePath('files_external', 'ajax', 'google.php'), { step: 2, oauth_verifier: params['oauth_verifier'], request_token: $(token).val(), request_token_secret: $(token_secret).val() }, function(result) {
-					if (result && result.status == 'success') {
-						$(token).val(result.access_token);
-						$(token_secret).val(result.access_token_secret);
-						$(configured).val('true');
-						OC.MountConfig.saveStorage(tr);
-						$(tr).find('.configuration').append('<span id="access" style="padding-left:0.5em;">'+t('files_external', 'Access granted')+'</span>');
-					} else {
-						OC.dialogs.alert(result.data.message, t('files_external', 'Error configuring Google Drive storage'));
-						onGoogleInputsChange(tr);
-					}
+			var client_id = $(this).find('.configuration [data-parameter="client_id"]').val();
+			var client_secret = $(this).find('.configuration [data-parameter="client_secret"]')
+				.val();
+			if (client_id != '' && client_secret != '') {
+				var params = {};
+				window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m, key, value) {
+					params[key] = value;
 				});
+				if (params['code'] !== undefined) {
+					var tr = $(this);
+					var token = $(this).find('.configuration [data-parameter="token"]');
+					var statusSpan = $(tr).find('.status span');
+					statusSpan.removeClass();
+					statusSpan.addClass('waiting');
+					$.post(OC.filePath('files_external', 'ajax', 'google.php'),
+						{
+							step: 2,
+							client_id: client_id,
+							client_secret: client_secret,
+							redirect: location.protocol + '//' + location.host + location.pathname,
+							code: params['code'],
+						}, function(result) {
+							if (result && result.status == 'success') {
+								$(token).val(result.data.token);
+								$(configured).val('true');
+								OC.MountConfig.saveStorage(tr);
+								$(tr).find('.configuration input').attr('disabled', 'disabled');
+								$(tr).find('.configuration').append($('<span/>')
+									.attr('id', 'access')
+									.text(t('files_external', 'Access granted')));
+							} else {
+								OC.dialogs.alert(result.data.message,
+									t('files_external', 'Error configuring Google Drive storage')
+								);
+							}
+						}
+					);
+				}
 			} else {
-				onGoogleInputsChange(tr);
+				onGoogleInputsChange($(this));
 			}
 		}
-	}
-
-	$('#externalStorage').on('paste', 'tbody tr.\\\\OC\\\\Files\\\\Storage\\\\Google td', function() {
-		var tr = $(this).parent();
-		setTimeout(function() {
-			onGoogleInputsChange(tr);
-		}, 20);
 	});
 
-	$('#externalStorage').on('keyup', 'tbody tr.\\\\OC\\\\Files\\\\Storage\\\\Google td', function() {
-		onGoogleInputsChange($(this).parent());
-	});
+	$('#externalStorage').on('paste', 'tbody tr.\\\\OC\\\\Files\\\\Storage\\\\Google td',
+		function() {
+			var tr = $(this).parent();
+			setTimeout(function() {
+				onGoogleInputsChange(tr);
+			}, 20);
+		}
+	);
 
-	$('#externalStorage').on('change', 'tbody tr.\\\\OC\\\\Files\\\\Storage\\\\Google .chzn-select', function() {
-		onGoogleInputsChange($(this).parent().parent());
-	});
+	$('#externalStorage').on('keyup', 'tbody tr.\\\\OC\\\\Files\\\\Storage\\\\Google td',
+		function() {
+			onGoogleInputsChange($(this).parent());
+		}
+	);
+
+	$('#externalStorage').on('change', 'tbody tr.\\\\OC\\\\Files\\\\Storage\\\\Google .chzn-select'
+		, function() {
+			onGoogleInputsChange($(this).parent().parent());
+		}
+	);
 
 	function onGoogleInputsChange(tr) {
 		if ($(tr).find('[data-parameter="configured"]').val() != 'true') {
 			var config = $(tr).find('.configuration');
-			if ($(tr).find('.mountPoint input').val() != '' && ($(tr).find('.chzn-select').length == 0 || $(tr).find('.chzn-select').val() != null)) {
+			if ($(tr).find('.mountPoint input').val() != ''
+				&& $(config).find('[data-parameter="client_id"]').val() != ''
+				&& $(config).find('[data-parameter="client_secret"]').val() != ''
+				&& ($(tr).find('.chzn-select').length == 0
+				|| $(tr).find('.chzn-select').val() != null))
+			{
 				if ($(tr).find('.google').length == 0) {
-					$(config).append('<a class="button google">'+t('files_external', 'Grant access')+'</a>');
+					$(config).append($('<a/>').addClass('button google')
+						.text(t('files_external', 'Grant access')));
 				} else {
 					$(tr).find('.google').show();
 				}
@@ -77,22 +97,33 @@ $(document).ready(function() {
 		event.preventDefault();
 		var tr = $(this).parent().parent();
 		var configured = $(this).parent().find('[data-parameter="configured"]');
-		var token = $(this).parent().find('[data-parameter="token"]');
-		var token_secret = $(this).parent().find('[data-parameter="token_secret"]');
+		var client_id = $(this).parent().find('[data-parameter="client_id"]').val();
+		var client_secret = $(this).parent().find('[data-parameter="client_secret"]').val();
 		var statusSpan = $(tr).find('.status span');
-		$.post(OC.filePath('files_external', 'ajax', 'google.php'), { step: 1, callback: location.protocol + '//' + location.host + location.pathname }, function(result) {
-			if (result && result.status == 'success') {
-				$(configured).val('false');
-				$(token).val(result.data.request_token);
-				$(token_secret).val(result.data.request_token_secret);
-				OC.MountConfig.saveStorage(tr);
-				statusSpan.removeClass();
-				statusSpan.addClass('waiting');
-				window.location = result.data.url;
-			} else {
-				OC.dialogs.alert(result.data.message, t('files_external', 'Error configuring Google Drive storage'));
-			}
-		});
+		if (client_id != '' && client_secret != '') {
+			var token = $(this).parent().find('[data-parameter="token"]');
+			$.post(OC.filePath('files_external', 'ajax', 'google.php'),
+				{
+					step: 1,
+					client_id: client_id,
+					client_secret: client_secret,
+					redirect: location.protocol + '//' + location.host + location.pathname,
+				}, function(result) {
+					if (result && result.status == 'success') {
+						$(configured).val('false');
+						$(token).val('false');
+						OC.MountConfig.saveStorage(tr);
+						statusSpan.removeClass();
+						statusSpan.addClass('waiting');
+						window.location = result.data.url;
+					} else {
+						OC.dialogs.alert(result.data.message,
+							t('files_external', 'Error configuring Google Drive storage')
+						);
+					}
+				}
+			);
+		}
 	});
 
-});
+});
\ No newline at end of file
diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php
index e329cc1d322d78059e34fb95e121ddd048a4c006..e3a2cf0b30b347a7e136d055e79bdb5896318b65 100755
--- a/apps/files_external/lib/config.php
+++ b/apps/files_external/lib/config.php
@@ -79,8 +79,9 @@ class OC_Mount_Config {
 			'backend' => 'Google Drive',
 			'configuration' => array(
 				'configured' => '#configured',
-				'token' => '#token',
-				'token_secret' => '#token secret'),
+				'client_id' => 'Client ID',
+				'client_secret' => 'Client secret',
+				'token' => '#token'),
 				'custom' => 'google');
 
 		$backends['\OC\Files\Storage\SWIFT']=array(
diff --git a/apps/files_external/lib/google.php b/apps/files_external/lib/google.php
index ec7de3f35709dec0e879dbfd42d3e14f957a70d4..ef8dd6d8cad588653991b194bbf5753c134c9529 100644
--- a/apps/files_external/lib/google.php
+++ b/apps/files_external/lib/google.php
@@ -1,437 +1,409 @@
 <?php
-
 /**
-* ownCloud
-*
-* @author Michael Gapczynski
-* @copyright 2012 Michael Gapczynski mtgap@owncloud.com
-*
-* 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/>.
-*/
+ * ownCloud
+ *
+ * @author Michael Gapczynski
+ * @copyright 2012 Michael Gapczynski mtgap@owncloud.com
+ *
+ * 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/>.
+ */
 
 namespace OC\Files\Storage;
 
-require_once 'Google/common.inc.php';
+set_include_path(get_include_path().PATH_SEPARATOR.
+	\OC_App::getAppPath('files_external').'/3rdparty/google-api-php-client/src');
+require_once 'Google_Client.php';
+require_once 'contrib/Google_DriveService.php';
 
 class Google extends \OC\Files\Storage\Common {
 
-	private $consumer;
-	private $oauth_token;
-	private $sig_method;
-	private $entries;
 	private $id;
+	private $service;
+	private $driveFiles;
 
 	private static $tempFiles = array();
 
+	// Google Doc mimetypes
+	const FOLDER = 'application/vnd.google-apps.folder';
+	const DOCUMENT = 'application/vnd.google-apps.document';
+	const SPREADSHEET = 'application/vnd.google-apps.spreadsheet';
+	const DRAWING = 'application/vnd.google-apps.drawing';
+	const PRESENTATION = 'application/vnd.google-apps.presentation';
+
 	public function __construct($params) {
-		if (isset($params['configured']) && $params['configured'] == 'true'
+		if (isset($params['configured']) && $params['configured'] === 'true'
+			&& isset($params['client_id']) && isset($params['client_secret'])
 			&& isset($params['token'])
-			&& isset($params['token_secret'])
 		) {
-			$consumer_key = isset($params['consumer_key']) ? $params['consumer_key'] : 'anonymous';
-			$consumer_secret = isset($params['consumer_secret']) ? $params['consumer_secret'] : 'anonymous';
-			$this->id = 'google::' . $params['token'];
-			$this->consumer = new \OAuthConsumer($consumer_key, $consumer_secret);
-			$this->oauth_token = new \OAuthToken($params['token'], $params['token_secret']);
-			$this->sig_method = new \OAuthSignatureMethod_HMAC_SHA1();
-			$this->entries = array();
+			$client = new \Google_Client();
+			$client->setClientId($params['client_id']);
+			$client->setClientSecret($params['client_secret']);
+			$client->setScopes(array('https://www.googleapis.com/auth/drive'));
+			$client->setUseObjects(true);
+			$client->setAccessToken($params['token']);
+			$this->service = new \Google_DriveService($client);
+			$token = json_decode($params['token'], true);
+			$this->id = 'google::'.substr($params['client_id'], 0, 30).$token['created'];
 		} else {
 			throw new \Exception('Creating \OC\Files\Storage\Google storage failed');
 		}
 	}
 
-	private function sendRequest($uri,
-								 $httpMethod,
-								 $postData = null,
-								 $extraHeaders = null,
-								 $isDownload = false,
-								 $returnHeaders = false,
-								 $isContentXML = true,
-								 $returnHTTPCode = false) {
-		$uri = trim($uri);
-		// create an associative array from each key/value url query param pair.
-		$params = array();
-		$pieces = explode('?', $uri);
-		if (isset($pieces[1])) {
-			$params = explode_assoc('=', '&', $pieces[1]);
-		}
-		// urlencode each url parameter key/value pair
-		$tempStr = $pieces[0];
-		foreach ($params as $key => $value) {
-			$tempStr .= '&' . urlencode($key) . '=' . urlencode($value);
-		}
-		$uri = preg_replace('/&/', '?', $tempStr, 1);
-		$request = \OAuthRequest::from_consumer_and_token($this->consumer,
-														 $this->oauth_token,
-														 $httpMethod,
-														 $uri,
-														 $params);
-		$request->sign_request($this->sig_method, $this->consumer, $this->oauth_token);
-		$auth_header = $request->to_header();
-		$headers = array($auth_header, 'GData-Version: 3.0');
-		if ($isContentXML) {
-			$headers = array_merge($headers, array('Content-Type: application/atom+xml'));
-		}
-		if (is_array($extraHeaders)) {
-			$headers = array_merge($headers, $extraHeaders);
-		}
-		$curl = curl_init($uri);
-		curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
-		curl_setopt($curl, CURLOPT_FAILONERROR, false);
-		curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
-		switch ($httpMethod) {
-			case 'GET':
-				curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
-				break;
-			case 'POST':
-				curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
-				curl_setopt($curl, CURLOPT_POST, 1);
-				curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
-				break;
-			case 'PUT':
-				$headers[] = 'If-Match: *';
-				curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
-				curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $httpMethod);
-				curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
-				break;
-			case 'DELETE':
-				$headers[] = 'If-Match: *';
-				curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
-				curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $httpMethod);
-				break;
-			default:
-				curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
-		}
-		if ($isDownload) {
-			$tmpFile = \OC_Helper::tmpFile();
-			$handle = fopen($tmpFile, 'w');
-			curl_setopt($curl, CURLOPT_FILE, $handle);
-		}
-		if ($returnHeaders) {
-			curl_setopt($curl, CURLOPT_HEADER, true);
-		}
-		$result = curl_exec($curl);
-		$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
-		curl_close($curl);
-		if ($result) {
-			// TODO https://developers.google.com/google-apps/documents-list/#handling_api_errors
-			// TODO Log error messages
-			if ($httpCode <= 308) {
-				if ($isDownload) {
-					return $tmpFile;
-				} else if ($returnHTTPCode) {
-					return array('result' => $result, 'code' => $httpCode);
+	public function getId() {
+		return $this->id;
+	}
+
+	/**
+	 * Get the Google_DriveFile object for the specified path
+	 * @param string $path
+	 * @return Google_DriveFile
+	 */
+	private function getDriveFile($path) {
+		// Remove leading and trailing slashes
+		$path = trim($path, '/');
+		if (isset($this->driveFiles[$path])) {
+			return $this->driveFiles[$path];
+		} else if ($path === '') {
+			$root = $this->service->files->get('root');
+			$this->driveFiles[$path] = $root;
+			return $root;
+		} else {
+			// Google Drive SDK does not have methods for retrieving files by path
+			// Instead we must find the id of the parent folder of the file
+			$parentId = $this->getDriveFile('')->getId();
+			$folderNames = explode('/', $path);
+			$path = '';
+			// Loop through each folder of this path to get to the file
+			foreach ($folderNames as $name) {
+				// Reconstruct path from beginning
+				if ($path === '') {
+					$path .= $name;
 				} else {
-					return $result;
+					$path .= '/'.$name;
+				}
+				if (isset($this->driveFiles[$path])) {
+					$parentId = $this->driveFiles[$path]->getId();
+				} else {
+					$q = "title='".$name."' and '".$parentId."' in parents and trashed = false";
+					$result = $this->service->files->listFiles(array('q' => $q))->getItems();
+					if (!empty($result)) {
+						// Google Drive allows files with the same name, ownCloud doesn't
+						if (count($result) > 1) {
+							$this->onDuplicateFileDetected($path);
+							return false;
+						} else {
+							$file = current($result);
+							$this->driveFiles[$path] = $file;
+							$parentId = $file->getId();
+						}
+					} else {
+						// Google Docs have no extension in their title, so try without extension
+						$pos = strrpos($path, '.');
+						if ($pos !== false) {
+							$pathWithoutExt = substr($path, 0, $pos);
+							$file = $this->getDriveFile($pathWithoutExt);
+							if ($file) {
+								// Switch cached Google_DriveFile to the correct index
+								unset($this->driveFiles[$pathWithoutExt]);
+								$this->driveFiles[$path] = $file;
+								$parentId = $file->getId();
+							} else {
+								return false;
+							}
+						} else {
+							return false;
+						}
+					}
 				}
 			}
+			return $this->driveFiles[$path];
 		}
-		return false;
-	}
-
-	private function getFeed($feedUri, $httpMethod, $postData = null) {
-		$result = $this->sendRequest($feedUri, $httpMethod, $postData);
-		if ($result) {
-			$dom = new \DOMDocument();
-			$dom->loadXML($result);
-			return $dom;
-		}
-		return false;
 	}
 
 	/**
-	 * Base url for google docs feeds
+	 * Set the Google_DriveFile object in the cache
+	 * @param string $path
+	 * @param Google_DriveFile|false $file
 	 */
-	const BASE_URI='https://docs.google.com/feeds';
-
-	private function getResource($path) {
-		$file = basename($path);
-		if (array_key_exists($file, $this->entries)) {
-			return $this->entries[$file];
-		} else {
-			// Strip the file extension; file could be a native Google Docs resource
-			if ($pos = strpos($file, '.')) {
-				$title = substr($file, 0, $pos);
-				$dom = $this->getFeed(self::BASE_URI.'/default/private/full?showfolders=true&title='.$title, 'GET');
-				// Check if request was successful and entry exists
-				if ($dom && $entry = $dom->getElementsByTagName('entry')->item(0)) {
-					$this->entries[$file] = $entry;
-					return $entry;
+	private function setDriveFile($path, $file) {
+		$path = trim($path, '/');
+		$this->driveFiles[$path] = $file;
+		if ($file === false) {
+			// Set all child paths as false
+			$len = strlen($path);
+			foreach ($this->driveFiles as $key => $file) {
+				if (substr($key, 0, $len) === $path) {
+					$this->driveFiles[$key] = false;
 				}
 			}
-			$dom = $this->getFeed(self::BASE_URI.'/default/private/full?showfolders=true&title='.$file, 'GET');
-			// Check if request was successful and entry exists
-			if ($dom && $entry = $dom->getElementsByTagName('entry')->item(0)) {
-				$this->entries[$file] = $entry;
-				return $entry;
-			}
-			return false;
 		}
 	}
 
-	private function getExtension($entry) {
-		$mimetype = $this->getMimeType('', $entry);
-		switch ($mimetype) {
-			case 'httpd/unix-directory':
-				return '';
-			case 'application/vnd.oasis.opendocument.text':
-				return 'odt';
-			case 'application/vnd.oasis.opendocument.spreadsheet':
-				return 'ods';
-			case 'application/vnd.oasis.opendocument.presentation':
-				return 'pptx';
-			case 'text/html':
-				return 'html';
-			default:
-				return 'html';
-		}
+	/**
+	 * Write a log message to inform about duplicate file names
+	 * @param string $path
+	 */
+	private function onDuplicateFileDetected($path) {
+		$about = $this->service->about->get();
+		$user = $about->getName();
+		\OCP\Util::writeLog('files_external',
+			'Ignoring duplicate file name: '.$path.' on Google Drive for Google user: '.$user,
+			\OCP\Util::INFO
+		);
 	}
 
-	public function getId(){
-		return $this->id;
+	/**
+	 * Generate file extension for a Google Doc, choosing Open Document formats for download
+	 * @param string $mimetype
+	 * @return string
+	 */
+	private function getGoogleDocExtension($mimetype) {
+		if ($mimetype === self::DOCUMENT) {
+			return 'odt';
+		} else if ($mimetype === self::SPREADSHEET) {
+			return 'ods';
+		} else if ($mimetype === self::DRAWING) {
+			return 'jpg';
+		} else if ($mimetype === self::PRESENTATION) {
+			// Download as .odp is not available
+			return 'pdf';
+		} else {
+			return '';
+		}
 	}
 
 	public function mkdir($path) {
-		$collection = dirname($path);
-		// Check if path parent is root directory
-		if ($collection == '/' || $collection == '\.' || $collection == '.') {
-			$uri = self::BASE_URI.'/default/private/full';
-		} else {
-			// Get parent content link
-			$dom = $this->getResource(basename($collection));
-			if ($dom) {
-				$uri = $dom->getElementsByTagName('content')->item(0)->getAttribute('src');
-			}
-		}
-		if (isset($uri)) {
-			$title = basename($path);
-			// Construct post data
-			$postData = '<?xml version="1.0" encoding="UTF-8"?>';
-			$postData .= '<entry xmlns="http://www.w3.org/2005/Atom">';
-			$postData .= '<category scheme="http://schemas.google.com/g/2005#kind"';
-			$postData .=          ' term="http://schemas.google.com/docs/2007#folder"/>';
-			$postData .= '<title>'.$title.'</title>';
-			$postData .= '</entry>';
-			$dom = $this->sendRequest($uri, 'POST', $postData);
-			if ($dom) {
-				return true;
+		if (!$this->is_dir($path)) {
+			$parentFolder = $this->getDriveFile(dirname($path));
+			if ($parentFolder) {
+				$folder = new \Google_DriveFile();
+				$folder->setTitle(basename($path));
+				$folder->setMimeType(self::FOLDER);
+				$parent = new \Google_ParentReference();
+				$parent->setId($parentFolder->getId());
+				$folder->setParents(array($parent));
+				$result = $this->service->files->insert($folder);
+				if ($result) {
+					$this->setDriveFile($path, $result);
+				}
+				return (bool)$result;
 			}
 		}
 		return false;
 	}
 
 	public function rmdir($path) {
-		return $this->unlink($path);
+		if (trim($path, '/') === '') {
+			$dir = $this->opendir($path);
+			while ($file = readdir($dir)) {
+				if (!\OC\Files\Filesystem::isIgnoredDir($file)) {
+					if (!$this->unlink($path.'/'.$file)) {
+						return false;
+					}
+				}
+			}
+			closedir($dir);
+			$this->driveFiles = array();
+			return true;
+		} else {
+			return $this->unlink($path);
+		}
 	}
 
 	public function opendir($path) {
-		if ($path == '' || $path == '/') {
-			$next = self::BASE_URI.'/default/private/full/folder%3Aroot/contents';
-		} else {
-			$entry = $this->getResource($path);
-			if ($entry) {
-				$next = $entry->getElementsByTagName('content')->item(0)->getAttribute('src');
-			} else {
-				return false;
-			}
-		}
-		$files = array();
-		while ($next) {
-			$dom = $this->getFeed($next, 'GET');
-			$links = $dom->getElementsByTagName('link');
-			foreach ($links as $link) {
-				if ($link->getAttribute('rel') == 'next') {
-					$next = $link->getAttribute('src');
-					break;
-				} else {
-					$next = false;
+		// Remove leading and trailing slashes
+		$path = trim($path, '/');
+		$folder = $this->getDriveFile($path);
+		if ($folder) {
+			$files = array();
+			$duplicates = array();
+			$pageToken = true;
+			while ($pageToken) {
+				$params = array();
+				if ($pageToken !== true) {
+					$params['pageToken'] = $pageToken;
 				}
-			}
-			$entries = $dom->getElementsByTagName('entry');
-			foreach ($entries as $entry) {
-				$name = $entry->getElementsByTagName('title')->item(0)->nodeValue;
-				// Google Docs resources don't always include extensions in title
-				if ( ! strpos($name, '.')) {
-					$extension = $this->getExtension($entry);
-					if ($extension != '') {
-						$name .= '.'.$extension;
+				$params['q'] = "'".$folder->getId()."' in parents and trashed = false";
+				$children = $this->service->files->listFiles($params);
+				foreach ($children->getItems() as $child) {
+					$name = $child->getTitle();
+					// Check if this is a Google Doc i.e. no extension in name
+					if ($child->getFileExtension() === ''
+						&& $child->getMimeType() !== self::FOLDER
+					) {
+						$name .= '.'.$this->getGoogleDocExtension($child->getMimeType());
+					}
+					if ($path === '') {
+						$filepath = $name;
+					} else {
+						$filepath = $path.'/'.$name;
+					}
+					// Google Drive allows files with the same name, ownCloud doesn't
+					// Prevent opendir() from returning any duplicate files
+					$key = array_search($name, $files);
+					if ($key !== false || isset($duplicates[$filepath])) {
+						if (!isset($duplicates[$filepath])) {
+							$duplicates[$filepath] = true;
+							$this->setDriveFile($filepath, false);
+							unset($files[$key]);
+							$this->onDuplicateFileDetected($filepath);
+						}
+					} else {
+						// Cache the Google_DriveFile for future use
+						$this->setDriveFile($filepath, $child);
+						$files[] = $name;
 					}
 				}
-				$files[] = basename($name);
-				// Cache entry for future use
-				$this->entries[$name] = $entry;
+				$pageToken = $children->getNextPageToken();
 			}
+			\OC\Files\Stream\Dir::register('google'.$path, $files);
+			return opendir('fakedir://google'.$path);
+		} else {
+			return false;
 		}
-		\OC\Files\Stream\Dir::register('google'.$path, $files);
-		return opendir('fakedir://google'.$path);
 	}
 
 	public function stat($path) {
-		if ($path == '' || $path == '/') {
-			$stat['size'] = $this->free_space($path);
-			$stat['atime'] = time();
-			$stat['mtime'] = time();
-			$stat['ctime'] = time();
-		} else {
-			$entry = $this->getResource($path);
-			if ($entry) {
-				// NOTE: Native resources don't have a file size
-				$stat['size'] = $entry->getElementsByTagNameNS('http://schemas.google.com/g/2005',
-															   'quotaBytesUsed')->item(0)->nodeValue;
-				//if (isset($atime = $entry->getElementsByTagNameNS('http://schemas.google.com/g/2005',
-				//													'lastViewed')->item(0)->nodeValue))
-				//$stat['atime'] = strtotime($entry->getElementsByTagNameNS('http://schemas.google.com/g/2005',
-				//															'lastViewed')->item(0)->nodeValue);
-				$stat['mtime'] = strtotime($entry->getElementsByTagName('updated')->item(0)->nodeValue);
+		$file = $this->getDriveFile($path);
+		if ($file) {
+			$stat = array();
+			if ($this->filetype($path) === 'dir') {
+				$stat['size'] = 0;
+			} else {
+				// Check if this is a Google Doc
+				if ($this->getMimeType($path) !== $file->getMimeType()) {
+					// Return unknown file size
+					$stat['size'] = \OC\Files\FREE_SPACE_UNKNOWN;
+				} else {
+					$stat['size'] = $file->getFileSize();
+				}
 			}
-		}
-		if (isset($stat)) {
+			$stat['atime'] = strtotime($file->getLastViewedByMeDate());
+			$stat['mtime'] = strtotime($file->getModifiedDate());
+			$stat['ctime'] = strtotime($file->getCreatedDate());
 			return $stat;
+		} else {
+			return false;
 		}
-		return false;
 	}
 
 	public function filetype($path) {
-		if ($path == '' || $path == '/') {
+		if ($path === '') {
 			return 'dir';
 		} else {
-			$entry = $this->getResource($path);
-			if ($entry) {
-				$categories = $entry->getElementsByTagName('category');
-				foreach ($categories as $category) {
-					if ($category->getAttribute('scheme') == 'http://schemas.google.com/g/2005#kind') {
-						$type = $category->getAttribute('label');
-						if (strlen(strstr($type, 'folder')) > 0) {
-							return 'dir';
-						} else {
-							return 'file';
-						}
-					}
+			$file = $this->getDriveFile($path);
+			if ($file) {
+				if ($file->getMimeType() === self::FOLDER) {
+					return 'dir';
+				} else {
+					return 'file';
 				}
+			} else {
+				return false;
 			}
 		}
-		return false;
 	}
 
 	public function isReadable($path) {
-		return true;
+		return $this->file_exists($path);
 	}
 
 	public function isUpdatable($path) {
-		if ($path == '' || $path == '/') {
-			return true;
+		$file = $this->getDriveFile($path);
+		if ($file) {
+			return $file->getEditable();
 		} else {
-			$entry = $this->getResource($path);
-			if ($entry) {
-				// Check if edit or edit-media links exist
-				$links = $entry->getElementsByTagName('link');
-				foreach ($links as $link) {
-					if ($link->getAttribute('rel') == 'edit') {
-						return true;
-					} else if ($link->getAttribute('rel') == 'edit-media') {
-						return true;
-					}
-				}
-			}
+			return false;
 		}
-		return false;
 	}
 
 	public function file_exists($path) {
-		if ($path == '' || $path == '/') {
-			return true;
-		} else if ($this->getResource($path)) {
-			return true;
-		}
-		return false;
+		return (bool)$this->getDriveFile($path);
 	}
 
 	public function unlink($path) {
-		// Get resource self link to trash resource
-		$entry = $this->getResource($path);
-		if ($entry) {
-			$links = $entry->getElementsByTagName('link');
-			foreach ($links as $link) {
-				if ($link->getAttribute('rel') == 'self') {
-					$uri = $link->getAttribute('href');
-					break;
-				}
+		$file = $this->getDriveFile($path);
+		if ($file) {
+			$result = $this->service->files->trash($file->getId());
+			if ($result) {
+				$this->setDriveFile($path, false);
 			}
+			return (bool)$result;
+		} else {
+			return false;
 		}
-		if (isset($uri)) {
-			$this->sendRequest($uri, 'DELETE');
-			return true;
-		}
-		return false;
 	}
 
 	public function rename($path1, $path2) {
-		$entry = $this->getResource($path1);
-		if ($entry) {
-			$collection = dirname($path2);
-			if (dirname($path1) == $collection) {
-				// Get resource edit link to rename resource
-				$etag = $entry->getAttribute('gd:etag');
-				$links = $entry->getElementsByTagName('link');
-				foreach ($links as $link) {
-					if ($link->getAttribute('rel') == 'edit') {
-						$uri = $link->getAttribute('href');
-						break;
-					}
-				}
-				$title = basename($path2);
-				// Construct post data
-				$postData = '<?xml version="1.0" encoding="UTF-8"?>';
-				$postData .= '<entry xmlns="http://www.w3.org/2005/Atom"';
-				$postData .=       ' xmlns:docs="http://schemas.google.com/docs/2007"';
-				$postData .=       ' xmlns:gd="http://schemas.google.com/g/2005"';
-				$postData .=       ' gd:etag='.$etag.'>';
-				$postData .= '<title>'.$title.'</title>';
-				$postData .= '</entry>';
-				$this->sendRequest($uri, 'PUT', $postData);
-				return true;
+		$file = $this->getDriveFile($path1);
+		if ($file) {
+			if (dirname($path1) === dirname($path2)) {
+				$file->setTitle(basename(($path2)));
 			} else {
-				// Move to different collection
-				$collectionEntry = $this->getResource($collection);
-				if ($collectionEntry) {
-					$feedUri = $collectionEntry->getElementsByTagName('content')->item(0)->getAttribute('src');
-					// Construct post data
-					$postData = '<?xml version="1.0" encoding="UTF-8"?>';
-					$postData .= '<entry xmlns="http://www.w3.org/2005/Atom">';
-					$postData .= '<id>'.$entry->getElementsByTagName('id')->item(0).'</id>';
-					$postData .= '</entry>';
-					$this->sendRequest($feedUri, 'POST', $postData);
-					return true;
+				// Change file parent
+				$parentFolder2 = $this->getDriveFile(dirname($path2));
+				if ($parentFolder2) {
+					$parent = new \Google_ParentReference();
+					$parent->setId($parentFolder2->getId());
+					$file->setParents(array($parent));
+				} else {
+					return false;
 				}
 			}
+			$result = $this->service->files->patch($file->getId(), $file);
+			if ($result) {
+				$this->setDriveFile($path1, false);
+				$this->setDriveFile($path2, $result);
+			}
+			return (bool)$result;
+		} else {
+			return false;
 		}
-		return false;
 	}
 
 	public function fopen($path, $mode) {
+		$pos = strrpos($path, '.');
+		if ($pos !== false) {
+			$ext = substr($path, $pos);
+		} else {
+			$ext = '';
+		}
 		switch ($mode) {
 			case 'r':
 			case 'rb':
-				$entry = $this->getResource($path);
-				if ($entry) {
-					$extension = $this->getExtension($entry);
-					$downloadUri = $entry->getElementsByTagName('content')->item(0)->getAttribute('src');
-					// TODO Non-native documents don't need these additional parameters
-					$downloadUri .= '&exportFormat='.$extension.'&format='.$extension;
-					$tmpFile = $this->sendRequest($downloadUri, 'GET', null, null, true);
-					return fopen($tmpFile, 'r');
+				$file = $this->getDriveFile($path);
+				if ($file) {
+					$exportLinks = $file->getExportLinks();
+					$mimetype = $this->getMimeType($path);
+					$downloadUrl = null;
+					if ($exportLinks && isset($exportLinks[$mimetype])) {
+						$downloadUrl = $exportLinks[$mimetype];
+					} else {
+						$downloadUrl = $file->getDownloadUrl();
+					}
+					if (isset($downloadUrl)) {
+						$request = new \Google_HttpRequest($downloadUrl, 'GET', null, null);
+						$httpRequest = \Google_Client::$io->authenticatedRequest($request);
+						if ($httpRequest->getResponseHttpCode() == 200) {
+							$tmpFile = \OC_Helper::tmpFile($ext);
+							$data = $httpRequest->getResponseBody();
+							file_put_contents($tmpFile, $data);
+							return fopen($tmpFile, $mode);
+						}
+					}
 				}
+				return false;
 			case 'w':
 			case 'wb':
 			case 'a':
@@ -444,156 +416,106 @@ class Google extends \OC\Files\Storage\Common {
 			case 'x+':
 			case 'c':
 			case 'c+':
-				if (strrpos($path, '.') !== false) {
-					$ext = substr($path, strrpos($path, '.'));
-				} else {
-					$ext = '';
-				}
 				$tmpFile = \OC_Helper::tmpFile($ext);
 				\OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
 				if ($this->file_exists($path)) {
-					$source = $this->fopen($path, 'r');
+					$source = $this->fopen($path, 'rb');
 					file_put_contents($tmpFile, $source);
 				}
 				self::$tempFiles[$tmpFile] = $path;
 				return fopen('close://'.$tmpFile, $mode);
 		}
-		return false;
 	}
 
 	public function writeBack($tmpFile) {
 		if (isset(self::$tempFiles[$tmpFile])) {
-			$this->uploadFile($tmpFile, self::$tempFiles[$tmpFile]);
-			unlink($tmpFile);
-		}
-	}
-
-	private function uploadFile($path, $target) {
-		$entry = $this->getResource($target);
-		if ( ! $entry) {
-			if (dirname($target) == '.' || dirname($target) == '/') {
-				$uploadUri = self::BASE_URI.'/upload/create-session/default/private/full/folder%3Aroot/contents';
-			} else {
-				$entry = $this->getResource(dirname($target));
-			}
-		}
-		if ( ! isset($uploadUri) && $entry) {
-			$links = $entry->getElementsByTagName('link');
-			foreach ($links as $link) {
-				if ($link->getAttribute('rel') == 'http://schemas.google.com/g/2005#resumable-create-media') {
-					$uploadUri = $link->getAttribute('href');
-					break;
-				}
-			}
-		}
-		if (isset($uploadUri) && $handle = fopen($path, 'r')) {
-			$uploadUri .= '?convert=false';
-			$mimetype = \OC_Helper::getMimeType($path);
-			$size = filesize($path);
-			$headers = array('X-Upload-Content-Type: ' => $mimetype, 'X-Upload-Content-Length: ' => $size);
-			$postData = '<?xml version="1.0" encoding="UTF-8"?>';
-			$postData .= '<entry xmlns="http://www.w3.org/2005/Atom" xmlns:docs="http://schemas.google.com/docs/2007">';
-			$postData .= '<title>'.basename($target).'</title>';
-			$postData .= '</entry>';
-			$result = $this->sendRequest($uploadUri, 'POST', $postData, $headers, false, true);
-			if ($result) {
-				// Get location to upload file
-				if (preg_match('@^Location: (.*)$@m', $result, $matches)) {
-					$uploadUri = trim($matches[1]);
-				}
-			} else {
-				return false;
-			}
-			// 512 kB chunks
-			$chunkSize = 524288;
-			$i = 0;
-			while (!feof($handle)) {
-				if ($i + $chunkSize > $size) {
-					if ($i == 0) {
-						$chunkSize = $size;
-					} else {
-						$chunkSize = $size % $i;
-					}
-				}
-				$end = $i + $chunkSize - 1;
-				$headers = array('Content-Length: '.$chunkSize,
-								 'Content-Type: '.$mimetype,
-								 'Content-Range: bytes '.$i.'-'.$end.'/'.$size);
-				$postData = fread($handle, $chunkSize);
-				$result = $this->sendRequest($uploadUri, 'PUT', $postData, $headers, false, true, false, true);
-				if ($result['code'] == '308') {
-					if (preg_match('@^Location: (.*)$@m', $result['result'], $matches)) {
-						// Get next location to upload file chunk
-						$uploadUri = trim($matches[1]);
-					}
-					$i += $chunkSize;
+			$path = self::$tempFiles[$tmpFile];
+			$parentFolder = $this->getDriveFile(dirname($path));
+			if ($parentFolder) {
+				// TODO Research resumable upload
+				$mimetype = \OC_Helper::getMimeType($tmpFile);
+				$data = file_get_contents($tmpFile);
+				$params = array(
+					'data' => $data,
+					'mimeType' => $mimetype,
+				);
+				$result = false;
+				if ($this->file_exists($path)) {
+					$file = $this->getDriveFile($path);
+					$result = $this->service->files->update($file->getId(), $file, $params);
 				} else {
-					return false;
+					$file = new \Google_DriveFile();
+					$file->setTitle(basename($path));
+					$file->setMimeType($mimetype);
+					$parent = new \Google_ParentReference();
+					$parent->setId($parentFolder->getId());
+					$file->setParents(array($parent));
+					$result = $this->service->files->insert($file, $params);
+				}
+				if ($result) {
+					$this->setDriveFile($path, $result);
 				}
 			}
-			// TODO Wait for resource entry
+			unlink($tmpFile);
 		}
 	}
 
-	public function getMimeType($path, $entry = null) {
-		// Entry can be passed, because extension is required for opendir
-		// and the entry can't be cached without the extension
-		if ($entry == null) {
-			if ($path == '' || $path == '/') {
+	public function getMimeType($path) {
+		$file = $this->getDriveFile($path);
+		if ($file) {
+			$mimetype = $file->getMimeType();
+			// Convert Google Doc mimetypes, choosing Open Document formats for download
+			if ($mimetype === self::FOLDER) {
 				return 'httpd/unix-directory';
+			} else if ($mimetype === self::DOCUMENT) {
+				return 'application/vnd.oasis.opendocument.text';
+			} else if ($mimetype === self::SPREADSHEET) {
+				return 'application/x-vnd.oasis.opendocument.spreadsheet';
+			} else if ($mimetype === self::DRAWING) {
+				return 'image/jpeg';
+			} else if ($mimetype === self::PRESENTATION) {
+				// Download as .odp is not available
+				return 'application/pdf';
 			} else {
-				$entry = $this->getResource($path);
-			}
-		}
-		if ($entry) {
-			$mimetype = $entry->getElementsByTagName('content')->item(0)->getAttribute('type');
-			// Native Google Docs resources often default to text/html,
-			// but it may be more useful to default to a corresponding ODF mimetype
-			// Collections get reported as application/atom+xml,
-			// make sure it actually is a folder and fix the mimetype
-			if ($mimetype == 'text/html' || $mimetype == 'application/atom+xml;type=feed') {
-				$categories = $entry->getElementsByTagName('category');
-				foreach ($categories as $category) {
-					if ($category->getAttribute('scheme') == 'http://schemas.google.com/g/2005#kind') {
-						$type = $category->getAttribute('label');
-						if (strlen(strstr($type, 'folder')) > 0) {
-							return 'httpd/unix-directory';
-						} else if (strlen(strstr($type, 'document')) > 0) {
-							return 'application/vnd.oasis.opendocument.text';
-						} else if (strlen(strstr($type, 'spreadsheet')) > 0) {
-							return 'application/vnd.oasis.opendocument.spreadsheet';
-						} else if (strlen(strstr($type, 'presentation')) > 0) {
-							return 'application/vnd.oasis.opendocument.presentation';
-						} else if (strlen(strstr($type, 'drawing')) > 0) {
-							return 'application/vnd.oasis.opendocument.graphics';
-						} else {
-							// If nothing matches return text/html,
-							// all native Google Docs resources can be exported as text/html
-							return 'text/html';
-						}
-					}
-				}
+				return $mimetype;
 			}
-			return $mimetype;
+		} else {
+			return false;
 		}
-		return false;
 	}
 
 	public function free_space($path) {
-		$dom = $this->getFeed(self::BASE_URI.'/metadata/default', 'GET');
-		if ($dom) {
-			// NOTE: Native Google Docs resources don't count towards quota
-			$total = $dom->getElementsByTagNameNS('http://schemas.google.com/g/2005',
-												  'quotaBytesTotal')->item(0)->nodeValue;
-			$used = $dom->getElementsByTagNameNS('http://schemas.google.com/g/2005',
-												  'quotaBytesUsed')->item(0)->nodeValue;
-			return $total - $used;
-		}
-		return false;
+		$about = $this->service->about->get();
+		return $about->getQuotaBytesTotal() - $about->getQuotaBytesUsed();
 	}
 
 	public function touch($path, $mtime = null) {
-
+		$file = $this->getDriveFile($path);
+		$result = false;
+		if ($file) {
+			if (isset($mtime)) {
+				$file->setModifiedDate($mtime);
+				$result = $this->service->files->patch($file->getId(), $file, array(
+					'setModifiedDate' => true,
+				));
+			} else {
+				$result = $this->service->files->touch($file->getId());
+			}
+		} else {
+			$parentFolder = $this->getDriveFile(dirname($path));
+			if ($parentFolder) {
+				$file = new \Google_DriveFile();
+				$file->setTitle(basename($path));
+				$parent = new \Google_ParentReference();
+				$parent->setId($parentFolder->getId());
+				$file->setParents(array($parent));
+				$result = $this->service->files->insert($file);
+			}
+		}
+		if ($result) {
+			$this->setDriveFile($path, $result);
+		}
+		return (bool)$result;
 	}
 
 	public function test() {
@@ -603,4 +525,66 @@ class Google extends \OC\Files\Storage\Common {
 		return false;
 	}
 
-}
+	public function hasUpdated($path, $time) {
+		if ($this->is_file($path)) {
+			return parent::hasUpdated($path, $time);
+		} else {
+			// Google Drive doesn't change modified times of folders when files inside are updated
+			// Instead we use the Changes API to see if folders have been updated, and it's a pain
+			$folder = $this->getDriveFile($path);
+			if ($folder) {
+				$result = false;
+				$folderId = $folder->getId();
+				$startChangeId = \OC_Appconfig::getValue('files_external', $this->getId().'cId');
+				$params = array(
+					'includeDeleted' => true,
+					'includeSubscribed' => true,
+				);
+				if (isset($startChangeId)) {
+					$startChangeId = (int)$startChangeId;
+					$largestChangeId = $startChangeId;
+					$params['startChangeId'] = $startChangeId + 1;
+				} else {
+					$largestChangeId = 0;
+				}
+				$pageToken = true;
+				while ($pageToken) {
+					if ($pageToken !== true) {
+						$params['pageToken'] = $pageToken;
+					}
+					$changes = $this->service->changes->listChanges($params);
+					if ($largestChangeId === 0 || $largestChangeId === $startChangeId) {
+						$largestChangeId = $changes->getLargestChangeId();
+					}
+					if (isset($startChangeId)) {
+						// Check if a file in this folder has been updated
+						// There is no way to filter by folder at the API level...
+						foreach ($changes->getItems() as $change) {
+							$file = $change->getFile();
+							if ($file) {
+								foreach ($file->getParents() as $parent) {
+									if ($parent->getId() === $folderId) {
+										$result = true;
+									// Check if there are changes in different folders
+									} else if ($change->getId() <= $largestChangeId) {
+										// Decrement id so this change is fetched when called again
+										$largestChangeId = $change->getId();
+										$largestChangeId--;
+									}
+								}
+							}
+						}
+						$pageToken = $changes->getNextPageToken();
+					} else {
+						// Assuming the initial scan just occurred and changes are negligible
+						break;
+					}
+				}
+				\OC_Appconfig::setValue('files_external', $this->getId().'cId', $largestChangeId);
+				return $result;
+			}
+		}
+		return false;
+	}
+
+}
\ No newline at end of file
diff --git a/apps/files_external/tests/config.php b/apps/files_external/tests/config.php
index ca7bf50038f9a11f4697e0fe50736f4f0aac2025..d4a69d29c0f54341aac18daef36d81c1ba4f1e60 100644
--- a/apps/files_external/tests/config.php
+++ b/apps/files_external/tests/config.php
@@ -24,12 +24,11 @@ return array(
 		'root'=>'/owncloud/files/webdav.php',
 	),
 	'google'=>array(
-		'run'=>false,
-		'consumer_key'=>'anonymous',
-		'consumer_secret'=>'anonymous',
-		'token'=>'test',
-		'token_secret'=>'test',
-		'root'=>'/google',
+		'run'=> false,
+		'configured' => 'true',
+		'client_id' => '',
+		'client_secret' => '',
+		'token' => '',
 	),
 	'swift'=>array(
 		'run'=>false,
diff --git a/apps/files_external/tests/google.php b/apps/files_external/tests/google.php
index f344163a8b9a5ff2ef70c79519129947394bb1c6..12faabb902dbe7c5d39bc8efdd581cabbc6fb159 100644
--- a/apps/files_external/tests/google.php
+++ b/apps/files_external/tests/google.php
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * ownCloud
  *
@@ -22,22 +21,25 @@
 
 namespace Test\Files\Storage;
 
+require_once 'files_external/lib/google.php';
+
 class Google extends Storage {
+
 	private $config;
 
-	public function setUp() {
-		$id = uniqid();
+	protected function setUp() {
 		$this->config = include('files_external/tests/config.php');
-		if ( ! is_array($this->config) or ! isset($this->config['google']) or ! $this->config['google']['run']) {
-			$this->markTestSkipped('Google backend not configured');
+		if (!is_array($this->config) || !isset($this->config['google'])
+			|| !$this->config['google']['run']
+		) {
+			$this->markTestSkipped('Google Drive backend not configured');
 		}
-		$this->config['google']['root'] .= '/' . $id; //make sure we have an new empty folder to work in
 		$this->instance = new \OC\Files\Storage\Google($this->config['google']);
 	}
 
-	public function tearDown() {
+	protected function tearDown() {
 		if ($this->instance) {
 			$this->instance->rmdir('/');
 		}
 	}
-}
+}
\ No newline at end of file
diff --git a/apps/files_sharing/templates/public.php b/apps/files_sharing/templates/public.php
index e8bf80b8720b08fa224d136d8bb4fc1bc9fb069b..746a715f3cc3d95d6e523c348399e49ae9ab3684 100644
--- a/apps/files_sharing/templates/public.php
+++ b/apps/files_sharing/templates/public.php
@@ -2,16 +2,14 @@
 	<div id="notification" style="display: none;"></div>
 </div>
 
-<?php $defaults = new OCP\Defaults(); // initialize themable default strings and urls ?>
-
 <input type="hidden" name="dir" value="<?php p($_['dir']) ?>" id="dir">
 <input type="hidden" name="downloadURL" value="<?php p($_['downloadURL']) ?>" id="downloadURL">
 <input type="hidden" name="filename" value="<?php p($_['filename']) ?>" id="filename">
 <input type="hidden" name="mimetype" value="<?php p($_['mimetype']) ?>" id="mimetype">
 <header><div id="header">
 		<a href="<?php print_unescaped(link_to('', 'index.php')); ?>" title="" id="owncloud"><img class="svg"
-		                                                                                          src="<?php print_unescaped(image_path('', 'logo-wide.svg')); ?>" alt="ownCloud" /></a>
-		<div id="logo-claim" style="display:none;"><?php p($defaults->getLogoClaim()); ?></div>
+		                                                                                          src="<?php print_unescaped(image_path('', 'logo-wide.svg')); ?>" alt="<?php p($theme->getName()); ?>" /></a>
+		<div id="logo-claim" style="display:none;"><?php p($theme->getLogoClaim()); ?></div>
 		<div class="header-right">
 			<?php if (isset($_['folder'])): ?>
 				<span id="details"><?php p($l->t('%s shared the folder %s with you',
@@ -95,6 +93,6 @@
 	</div>
 	<footer>
 		<p class="info">
-			<?php print_unescaped($defaults->getLongFooter()); ?>
+			<?php print_unescaped($theme->getLongFooter()); ?>
 		</p>
 	</footer>
diff --git a/apps/user_ldap/templates/settings.php b/apps/user_ldap/templates/settings.php
index 972970aa3ef11445789bbb51390cffe5c35ec8f6..95aa592594bc4948c3c7dd31205596d916b50562 100644
--- a/apps/user_ldap/templates/settings.php
+++ b/apps/user_ldap/templates/settings.php
@@ -6,7 +6,7 @@
 		<li><a href="#ldapSettings-3">Expert</a></li>
 	</ul>
 		<?php if(OCP\App::isEnabled('user_webdavauth')) {
-			print_unescaped('<p class="ldapwarning">'.$l->t('<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behaviour. Please ask your system administrator to disable one of them.').'</p>');
+			print_unescaped('<p class="ldapwarning">'.$l->t('<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them.').'</p>');
 		}
 		if(!function_exists('ldap_connect')) {
 			print_unescaped('<p class="ldapwarning">'.$l->t('<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it.').'</p>');
@@ -72,18 +72,18 @@
 				<p><label for="ldap_port"><?php p($l->t('Port'));?></label><input type="number" id="ldap_port" name="ldap_port" data-default="<?php p($_['ldap_port_default']); ?>"  /></p>
 				<p><label for="ldap_backup_host"><?php p($l->t('Backup (Replica) Host'));?></label><input type="text" id="ldap_backup_host" name="ldap_backup_host" data-default="<?php p($_['ldap_backup_host_default']); ?>" title="<?php p($l->t('Give an optional backup host. It must be a replica of the main LDAP/AD server.'));?>"></p>
 				<p><label for="ldap_backup_port"><?php p($l->t('Backup (Replica) Port'));?></label><input type="number" id="ldap_backup_port" name="ldap_backup_port" data-default="<?php p($_['ldap_backup_port_default']); ?>"  /></p>
-				<p><label for="ldap_override_main_server"><?php p($l->t('Disable Main Server'));?></label><input type="checkbox" id="ldap_override_main_server" name="ldap_override_main_server" value="1" data-default="<?php p($_['ldap_override_main_server_default']); ?>"  title="<?php p($l->t('When switched on, ownCloud will only connect to the replica server.'));?>" /></p>
+				<p><label for="ldap_override_main_server"><?php p($l->t('Disable Main Server'));?></label><input type="checkbox" id="ldap_override_main_server" name="ldap_override_main_server" value="1" data-default="<?php p($_['ldap_override_main_server_default']); ?>"  title="<?php p($l->t('Only connect to the replica server.'));?>" /></p>
 				<p><label for="ldap_tls"><?php p($l->t('Use TLS'));?></label><input type="checkbox" id="ldap_tls" name="ldap_tls" value="1" data-default="<?php p($_['ldap_tls_default']); ?>" title="<?php p($l->t('Do not use it additionally for LDAPS connections, it will fail.'));?>" /></p>
 				<p><label for="ldap_nocase"><?php p($l->t('Case insensitve LDAP server (Windows)'));?></label><input type="checkbox" id="ldap_nocase" name="ldap_nocase" data-default="<?php p($_['ldap_nocase_default']); ?>"  value="1"<?php if (isset($_['ldap_nocase']) && ($_['ldap_nocase'])) p(' checked'); ?>></p>
-				<p><label for="ldap_turn_off_cert_check"><?php p($l->t('Turn off SSL certificate validation.'));?></label><input type="checkbox" id="ldap_turn_off_cert_check" name="ldap_turn_off_cert_check" title="<?php p($l->t('If connection only works with this option, import the LDAP server\'s SSL certificate in your ownCloud server.'));?>" data-default="<?php p($_['ldap_turn_off_cert_check_default']); ?>" value="1"><br/><small><?php p($l->t('Not recommended, use for testing only.'));?></small></p>
+				<p><label for="ldap_turn_off_cert_check"><?php p($l->t('Turn off SSL certificate validation.'));?></label><input type="checkbox" id="ldap_turn_off_cert_check" name="ldap_turn_off_cert_check" title="<?php p($l->t('If connection only works with this option, import the LDAP server\'s SSL certificate in your %s server.', $theme->getName() ));?>" data-default="<?php p($_['ldap_turn_off_cert_check_default']); ?>" value="1"><br/><small><?php p($l->t('Not recommended, use for testing only.'));?></small></p>
 				<p><label for="ldap_cache_ttl"><?php p($l->t('Cache Time-To-Live'));?></label><input type="number" id="ldap_cache_ttl" name="ldap_cache_ttl" title="<?php p($l->t('in seconds. A change empties the cache.'));?>" data-default="<?php p($_['ldap_cache_ttl_default']); ?>" /></p>
 			</div>
 			<h3><?php p($l->t('Directory Settings'));?></h3>
 			<div>
-				<p><label for="ldap_display_name"><?php p($l->t('User Display Name Field'));?></label><input type="text" id="ldap_display_name" name="ldap_display_name" data-default="<?php p($_['ldap_display_name_default']); ?>" title="<?php p($l->t('The LDAP attribute to use to generate the user`s ownCloud name.'));?>" /></p>
+				<p><label for="ldap_display_name"><?php p($l->t('User Display Name Field'));?></label><input type="text" id="ldap_display_name" name="ldap_display_name" data-default="<?php p($_['ldap_display_name_default']); ?>" title="<?php p($l->t('The LDAP attribute to use to generate the user\'s display name.'));?>" /></p>
 				<p><label for="ldap_base_users"><?php p($l->t('Base User Tree'));?></label><textarea id="ldap_base_users" name="ldap_base_users" placeholder="<?php p($l->t('One User Base DN per line'));?>" data-default="<?php p($_['ldap_base_users_default']); ?>" title="<?php p($l->t('Base User Tree'));?>"></textarea></p>
 				<p><label for="ldap_attributes_for_user_search"><?php p($l->t('User Search Attributes'));?></label><textarea id="ldap_attributes_for_user_search" name="ldap_attributes_for_user_search" placeholder="<?php p($l->t('Optional; one attribute per line'));?>" data-default="<?php p($_['ldap_attributes_for_user_search_default']); ?>" title="<?php p($l->t('User Search Attributes'));?>"></textarea></p>
-				<p><label for="ldap_group_display_name"><?php p($l->t('Group Display Name Field'));?></label><input type="text" id="ldap_group_display_name" name="ldap_group_display_name" data-default="<?php p($_['ldap_group_display_name_default']); ?>" title="<?php p($l->t('The LDAP attribute to use to generate the groups`s ownCloud name.'));?>" /></p>
+				<p><label for="ldap_group_display_name"><?php p($l->t('Group Display Name Field'));?></label><input type="text" id="ldap_group_display_name" name="ldap_group_display_name" data-default="<?php p($_['ldap_group_display_name_default']); ?>" title="<?php p($l->t('The LDAP attribute to use to generate the groups\'s display name.'));?>" /></p>
 				<p><label for="ldap_base_groups"><?php p($l->t('Base Group Tree'));?></label><textarea id="ldap_base_groups" name="ldap_base_groups" placeholder="<?php p($l->t('One Group Base DN per line'));?>" data-default="<?php p($_['ldap_base_groups_default']); ?>" title="<?php p($l->t('Base Group Tree'));?>"></textarea></p>
 				<p><label for="ldap_attributes_for_group_search"><?php p($l->t('Group Search Attributes'));?></label><textarea id="ldap_attributes_for_group_search" name="ldap_attributes_for_group_search" placeholder="<?php p($l->t('Optional; one attribute per line'));?>" data-default="<?php p($_['ldap_attributes_for_group_search_default']); ?>" title="<?php p($l->t('Group Search Attributes'));?>"></textarea></p>
 				<p><label for="ldap_group_member_assoc_attribute"><?php p($l->t('Group-Member association'));?></label><select id="ldap_group_member_assoc_attribute" name="ldap_group_member_assoc_attribute" data-default="<?php p($_['ldap_group_member_assoc_attribute_default']); ?>" ><option value="uniqueMember"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'uniqueMember')) p(' selected'); ?>>uniqueMember</option><option value="memberUid"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'memberUid')) p(' selected'); ?>>memberUid</option><option value="member"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'member')) p(' selected'); ?>>member (AD)</option></select></p>
@@ -99,16 +99,16 @@
 	</fieldset>
 	<fieldset id="ldapSettings-3">
 		<p><strong><?php p($l->t('Internal Username'));?></strong></p>
-		<p class="ldapIndent"><?php p($l->t('By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ].  Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder in ownCloud. It is also a port of remote URLs, for instance for all *DAV services. With this setting, the default behaviour can be overriden. To achieve a similar behaviour as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behaviour. Changes will have effect only on newly mapped (added) LDAP users.'));?></p>
+		<p class="ldapIndent"><?php p($l->t('By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ].  Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users.'));?></p>
 		<p class="ldapIndent"><label for="ldap_expert_username_attr"><?php p($l->t('Internal Username Attribute:'));?></label><input type="text" id="ldap_expert_username_attr" name="ldap_expert_username_attr" data-default="<?php p($_['ldap_expert_username_attr_default']); ?>" /></p>
 		<p><strong><?php p($l->t('Override UUID detection'));?></strong></p>
-		<p class="ldapIndent"><?php p($l->t('By default, ownCloud autodetects the UUID attribute. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behaviour. Changes will have effect only on newly mapped (added) LDAP users and groups.'));?></p>
+		<p class="ldapIndent"><?php p($l->t('By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups.'));?></p>
 		<p class="ldapIndent"><label for="ldap_expert_uuid_attr"><?php p($l->t('UUID Attribute:'));?></label><input type="text" id="ldap_expert_uuid_attr" name="ldap_expert_uuid_attr" data-default="<?php p($_['ldap_expert_uuid_attr_default']); ?>" /></p>
 		<p><strong><?php p($l->t('Username-LDAP User Mapping'));?></strong></p>
-		<p class="ldapIndent"><?php p($l->t('ownCloud uses usernames to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from ownCloud username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found by ownCloud. The internal ownCloud name is used all over in ownCloud. Clearing the Mappings will have leftovers everywhere. Clearing the Mappings is not configuration sensitive, it affects all LDAP configurations! Do never clear the mappings in a production environment. Only clear mappings in a testing or experimental stage.'));?></p>
+		<p class="ldapIndent"><?php p($l->t('Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage.'));?></p>
 		<p class="ldapIndent"><button id="ldap_action_clear_user_mappings" name="ldap_action_clear_user_mappings"><?php p($l->t('Clear Username-LDAP User Mapping'));?></button><br/><button id="ldap_action_clear_group_mappings" name="ldap_action_clear_group_mappings"><?php p($l->t('Clear Groupname-LDAP Group Mapping'));?></button></p>
 	</fieldset>
-	<input id="ldap_submit" type="submit" value="Save" /> <button id="ldap_action_test_connection" name="ldap_action_test_connection"><?php p($l->t('Test Configuration'));?></button> <a href="http://doc.owncloud.org/server/5.0/admin_manual/auth_ldap.html" target="_blank"><img src="<?php print_unescaped(OCP\Util::imagePath('', 'actions/info.png')); ?>" style="height:1.75ex" /> <?php p($l->t('Help'));?></a>
+	<input id="ldap_submit" type="submit" value="Save" /> <button id="ldap_action_test_connection" name="ldap_action_test_connection"><?php p($l->t('Test Configuration'));?></button> <a href="<?php p($theme->getDocBaseUrl()); ?>/server/5.0/admin_manual/auth_ldap.html" target="_blank"><img src="<?php print_unescaped(OCP\Util::imagePath('', 'actions/info.png')); ?>" style="height:1.75ex" /> <?php p($l->t('Help'));?></a>
 	</div>
 
 </form>
diff --git a/apps/user_webdavauth/templates/settings.php b/apps/user_webdavauth/templates/settings.php
index e199c32675c5c198fee0395e876ce4668136f0bc..70c10057c20caeb81f2d65f59580ece30cbb57c5 100755
--- a/apps/user_webdavauth/templates/settings.php
+++ b/apps/user_webdavauth/templates/settings.php
@@ -1,9 +1,9 @@
 <form id="webdavauth" action="#" method="post">
 	<fieldset class="personalblock">
 		<legend><strong><?php p($l->t('WebDAV Authentication'));?></strong></legend>
-		<p><label for="webdav_url"><?php p($l->t('URL: '));?><input type="url" placeholder="https://example.com/webdav" id="webdav_url" name="webdav_url" value="<?php p($_['webdav_url']); ?>"></label>
+		<p><label for="webdav_url"><?php p($l->t('Address: '));?><input type="url" placeholder="https://example.com/webdav" id="webdav_url" name="webdav_url" value="<?php p($_['webdav_url']); ?>"></label>
 		 <input type="hidden" name="requesttoken" value="<?php p($_['requesttoken']) ?>" id="requesttoken">
 		<input type="submit" value="Save" />
-		<br /><?php p($l->t('ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials.')); ?>
+		<br /><?php p($l->t('The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials.')); ?>
 	</fieldset>
 </form>
diff --git a/core/l10n/nb_NO.php b/core/l10n/nb_NO.php
index dfe0cbaeb81e74cd8e6fe92fd568f17b247206e7..6780a69a22fc0bdadd1541d20581912298d8678c 100644
--- a/core/l10n/nb_NO.php
+++ b/core/l10n/nb_NO.php
@@ -1,5 +1,7 @@
 <?php $TRANSLATIONS = array(
+"%s shared »%s« with you" => "%s delte »%s« med deg",
 "No category to add?" => "Ingen kategorier å legge til?",
+"This category already exists: %s" => "Denne kategorien finnes allerede: %s",
 "No categories selected for deletion." => "Ingen kategorier merket for sletting.",
 "Sunday" => "Søndag",
 "Monday" => "Mandag",
@@ -40,8 +42,10 @@
 "No" => "Nei",
 "Ok" => "Ok",
 "Error" => "Feil",
+"Shared" => "Delt",
 "Share" => "Del",
 "Error while sharing" => "Feil under deling",
+"Shared with you by {owner}" => "Delt med deg av {owner}",
 "Share with" => "Del med",
 "Share with link" => "Del med link",
 "Password protect" => "Passordbeskyttet",
@@ -78,6 +82,7 @@
 "Help" => "Hjelp",
 "Access forbidden" => "Tilgang nektet",
 "Cloud not found" => "Sky ikke funnet",
+"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\nCheers!" => "Hei der.⏎\n⏎\nVille bare gjøre deg oppmerksom på at %s delte %s med deg.⏎\nVis den: %s⏎\n⏎\nVI ses!",
 "Edit categories" => "Rediger kategorier",
 "Add" => "Legg til",
 "Security Warning" => "Sikkerhetsadvarsel",
@@ -100,5 +105,6 @@
 "remember" => "husk",
 "Log in" => "Logg inn",
 "prev" => "forrige",
-"next" => "neste"
+"next" => "neste",
+"Updating ownCloud to version %s, this may take a while." => "Oppdaterer ownCloud til versjon %s, dette kan ta en stund."
 );
diff --git a/core/templates/altmail.php b/core/templates/altmail.php
index a7df29a2446d244cc27371d81d0cfdd649424b46..2551473c6f0939364d95f3739201709281b08a41 100644
--- a/core/templates/altmail.php
+++ b/core/templates/altmail.php
@@ -1,9 +1,7 @@
 <?php
-$defaults = new OC_Defaults();
-
 print_unescaped($l->t("Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\nCheers!", array($_['user_displayname'], $_['filename'], $_['link'])));
 ?>
 
 --
-<?php p($defaults->getName() . ' - ' . $defaults->getSlogan()); ?>
-<?php print_unescaped("\n".$defaults->getBaseUrl());
+<?php p($theme->getName() . ' - ' . $theme->getSlogan()); ?>
+<?php print_unescaped("\n".$theme->getBaseUrl());
diff --git a/core/templates/installation.php b/core/templates/installation.php
index 7f2796a4b319e8e4fe3ac20da509bb16b9e7d177..6de67a83d427d02a6bb37e7fe9dce8e7fd62cd31 100644
--- a/core/templates/installation.php
+++ b/core/templates/installation.php
@@ -23,7 +23,7 @@
 	<fieldset class="warning">
 		<legend><strong><?php p($l->t('Security Warning'));?></strong></legend>
 		<p><?php p($l->t('Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)'));?><br/>
-		<?php p($l->t('Please update your PHP installation to use ownCloud securely.'));?></p>
+		<?php p($l->t('Please update your PHP installation to use %s securely.', $theme->getName() )); ?></p>
 	</fieldset>
 	<?php endif; ?>
 	<?php if(!$_['secureRNG']): ?>
@@ -37,7 +37,10 @@
 	<fieldset class="warning">
 		<legend><strong><?php p($l->t('Security Warning'));?></strong></legend>
 		<p><?php p($l->t('Your data directory and files are probably accessible from the internet because the .htaccess file does not work.'));?><br>
-		<?php print_unescaped($l->t('For information how to properly configure your server, please see the <a href="http://doc.owncloud.org/server/5.0/admin_manual/installation.html" target="_blank">documentation</a>.'));?></p>
+		<?php print_unescaped($l->t(
+			'For information how to properly configure your server, please see the <a href="%s" target="_blank">documentation</a>.',
+			$theme->getDocBaseUrl().'/server/5.0/admin_manual/installation.html'
+		)); ?></p>
 	</fieldset>
 	<?php endif; ?>
 	<fieldset id="adminaccount">
diff --git a/core/templates/layout.base.php b/core/templates/layout.base.php
index 09e1006d507bf06b95e32e4e5c6a5dc6a29192cc..ea10c3042b592f7f192d9723be89e68493a14e6e 100644
--- a/core/templates/layout.base.php
+++ b/core/templates/layout.base.php
@@ -6,11 +6,9 @@
 <!--[if gt IE 9]><html class="ng-csp ie"><![endif]-->
 <!--[if !IE]><!--><html class="ng-csp"><!--<![endif]-->
 
-	<?php $defaults = new OC_Defaults(); // initialize themable default strings and urls ?>
-
 	<head>
 		<title>
-		<?php p($defaults->getName()); ?>
+		<?php p($theme->getTitle()); ?>
 		</title>
 		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 		<link rel="shortcut icon" href="<?php print_unescaped(image_path('', 'favicon.png')); ?>" />
diff --git a/core/templates/layout.guest.php b/core/templates/layout.guest.php
index f49d8ee215fc779f1df2bbd1c91a8a0aaf10fa9b..9c9eb63382fff615bb93777b226c6570f94e9e89 100644
--- a/core/templates/layout.guest.php
+++ b/core/templates/layout.guest.php
@@ -6,11 +6,9 @@
 <!--[if gt IE 9]><html class="ng-csp ie"><![endif]-->
 <!--[if !IE]><!--><html class="ng-csp"><!--<![endif]-->
 
-	<?php $defaults = new OC_Defaults(); // initialize themable default strings and urls ?>
-
 	<head data-requesttoken="<?php p($_['requesttoken']); ?>">
 		<title>
-		<?php p($defaults->getName()); ?>
+		<?php p($theme->getTitle()); ?>
 		</title>
 		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 		<meta name="apple-itunes-app" content="app-id=543672169">
@@ -22,7 +20,7 @@
 		<?php foreach($_['jsfiles'] as $jsfile): ?>
 			<script type="text/javascript" src="<?php print_unescaped($jsfile); ?>"></script>
 		<?php endforeach; ?>
-	
+
 		<?php foreach($_['headers'] as $header): ?>
 			<?php
 				print_unescaped('<'.$header['tag'].' ');
@@ -37,8 +35,8 @@
 	<body id="body-login">
 		<div class="wrapper"><!-- for sticky footer -->
 			<header><div id="header">
-				<img src="<?php print_unescaped(image_path('', 'logo.svg')); ?>" class="svg" alt="ownCloud" />
-				<div id="logo-claim" style="display:none;"><?php p($defaults->getLogoClaim()); ?></div>
+				<img src="<?php print_unescaped(image_path('', 'logo.svg')); ?>" class="svg" alt="<?php p($theme->getName()); ?>" />
+				<div id="logo-claim" style="display:none;"><?php p($theme->getLogoClaim()); ?></div>
 			</div></header>
 
 			<?php print_unescaped($_['content']); ?>
@@ -48,7 +46,7 @@
 
 		<footer>
 			<p class="info">
-				<?php print_unescaped($defaults->getLongFooter()); ?>
+				<?php print_unescaped($theme->getLongFooter()); ?>
 			</p>
 		</footer>
 	</body>
diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php
index dacbe79bd342ee0303ddda2cebcfa0f1b5026da2..b7405ea273b7f2c6bc8b70cf8e3bc3c3f1086eb5 100644
--- a/core/templates/layout.user.php
+++ b/core/templates/layout.user.php
@@ -6,12 +6,10 @@
 <!--[if gt IE 9]><html class="ng-csp ie"><![endif]-->
 <!--[if !IE]><!--><html class="ng-csp"><!--<![endif]-->
 
-	<?php $defaults = new OC_Defaults(); // initialize themable default strings and urls ?>
-	
 	<head data-user="<?php p($_['user_uid']); ?>" data-requesttoken="<?php p($_['requesttoken']); ?>">
 		<title>
 			<?php p(!empty($_['application'])?$_['application'].' | ':'');
-			p($defaults->getName());
+			p($theme->getTitle());
 			p(trim($_['user_displayname']) != '' ?' ('.$_['user_displayname'].') ':'') ?>
 		</title>
 		<meta charset="utf-8">
@@ -45,8 +43,8 @@
 	</div>
 	<header><div id="header">
 			<a href="<?php print_unescaped(link_to('', 'index.php')); ?>" title="" id="owncloud"><img class="svg"
-				src="<?php print_unescaped(image_path('', 'logo-wide.svg')); ?>" alt="ownCloud" /></a>
-			<div id="logo-claim" style="display:none;"><?php p($defaults->getLogoClaim()); ?></div>
+				src="<?php print_unescaped(image_path('', 'logo-wide.svg')); ?>" alt="<?php p($theme->getName()); ?>" /></a>
+			<div id="logo-claim" style="display:none;"><?php p($theme->getLogoClaim()); ?></div>
 			<ul id="settings" class="svg">
 				<span id="expand" tabindex="0" role="link">
 					<span id="expandDisplayName"><?php  p(trim($_['user_displayname']) != '' ? $_['user_displayname'] : $_['user_uid']) ?></span>
diff --git a/core/templates/login.php b/core/templates/login.php
index 571e0a865d96bcc959439b4530330672e5a471f1..9143510f75732046ffa104f07c4228205d9d3175 100644
--- a/core/templates/login.php
+++ b/core/templates/login.php
@@ -35,8 +35,8 @@
 		</a>
 		<?php endif; ?>
 
-		<input type="checkbox" name="remember_login" value="1" id="remember_login"/><label
-			for="remember_login"><?php p($l->t('remember')); ?></label>
+		<input type="checkbox" name="remember_login" value="1" id="remember_login" checked />
+		<label for="remember_login"><?php p($l->t('remember')); ?></label>
 		<input type="hidden" name="timezone-offset" id="timezone-offset"/>
 		<input type="submit" id="submit" class="login primary" value="<?php p($l->t('Log in')); ?>"/>
 	</fieldset>
diff --git a/core/templates/mail.php b/core/templates/mail.php
index 562ad82e953ad7ce38ea4aa476fbeefa085fc721..de72b136b135149a73b09bf04b7dbb2b55b12cc4 100644
--- a/core/templates/mail.php
+++ b/core/templates/mail.php
@@ -1,11 +1,10 @@
-<?php $defaults = new OC_Defaults() // initialize themable default strings and urls ?>
 <table cellspacing="0" cellpadding="0" border="0" width="100%">
 <tr><td>
 <table cellspacing="0" cellpadding="0" border="0" width="600px">
 <tr>
 <td bgcolor="#1d2d44" width="20px">&nbsp;</td>
 <td bgcolor="#1d2d44">
-<img src="<?php print_unescaped(OC_Helper::makeURLAbsolute(image_path('', 'logo-mail.gif'))); ?>" alt="ownCloud"/>
+<img src="<?php print_unescaped(OC_Helper::makeURLAbsolute(image_path('', 'logo-mail.gif'))); ?>" alt="<?php p($theme->getName()); ?>"/>
 </td>
 </tr>
 <tr><td bgcolor="#f8f8f8" colspan="2">&nbsp;</td></tr>
@@ -21,9 +20,9 @@ print_unescaped($l->t('Hey there,<br><br>just letting you know that %s shared »
 <tr>
 <td bgcolor="#f8f8f8" width="20px">&nbsp;</td>
 <td bgcolor="#f8f8f8" style="font-weight:normal; font-size:0.8em; line-height:1.2em; font-family:verdana,'arial',sans;">--<br>
-<?php p($defaults->getName()); ?> -
-<?php p($defaults->getSlogan()); ?>
-<br><a href="<?php print_unescaped($defaults->getBaseUrl()); ?>"><?php print_unescaped($defaults->getBaseUrl());?></a></td>
+<?php p($theme->getName()); ?> -
+<?php p($theme->getSlogan()); ?>
+<br><a href="<?php print_unescaped($theme->getBaseUrl()); ?>"><?php print_unescaped($theme->getBaseUrl());?></a></td>
 </tr>
 <tr>
 <td bgcolor="#f8f8f8" colspan="2">&nbsp;</td>
diff --git a/l10n/af_ZA/lib.po b/l10n/af_ZA/lib.po
index 10f369060285b1e4c2fbb1c31fbcb00f8b716797..e89d30f4081c21f4104016c126db3708e2085776 100644
--- a/l10n/af_ZA/lib.po
+++ b/l10n/af_ZA/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-22 06:02+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "Toepassings"
 msgid "Admin"
 msgstr "Admin"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "webdienste onder jou beheer"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr ""
@@ -53,15 +63,21 @@ msgstr ""
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -189,58 +205,62 @@ msgstr ""
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr ""
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr ""
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr ""
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr ""
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr ""
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr ""
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr ""
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr ""
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr ""
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr ""
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr ""
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr ""
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/ar/lib.po b/l10n/ar/lib.po
index 4fdf77792c640d3e03601752addf0cbf79e538e6..e1901ce0fef700a266bc6a8dc9d695a6695b77ff 100644
--- a/l10n/ar/lib.po
+++ b/l10n/ar/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "التطبيقات"
 msgid "Admin"
 msgstr "المدير"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "خدمات الشبكة تحت سيطرتك"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "تحميل ملفات ZIP متوقف"
@@ -53,15 +63,21 @@ msgstr "تحميل ملفات ZIP متوقف"
 msgid "Files need to be downloaded one by one."
 msgstr "الملفات بحاجة الى ان يتم تحميلها واحد تلو الاخر"
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "العودة الى الملفات"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "الملفات المحددة كبيرة جدا ليتم ضغطها في ملف zip"
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "تعذّر تحديده"
 
@@ -189,58 +205,62 @@ msgstr "اعدادات خادمك غير صحيحة بشكل تسمح لك بم
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "الرجاء التحقق من <a href='%s'>دليل التنصيب</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "منذ ثواني"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "منذ دقيقة"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d دقيقة مضت"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "قبل ساعة مضت"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "%d ساعة مضت"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "اليوم"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "يوم أمس"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d يوم مضى"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "الشهر الماضي"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "%d شهر مضت"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "السنةالماضية"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "سنة مضت"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/be/lib.po b/l10n/be/lib.po
index 4d50e77416a9faff675788fe493e9c1d5cae6740..56bb86b0ac2e4510acc17dbdb0af7ea50eecc720 100644
--- a/l10n/be/lib.po
+++ b/l10n/be/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-05 02:13+0200\n"
-"PO-Revision-Date: 2013-07-05 00:13+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Belarusian (http://www.transifex.com/projects/p/owncloud/language/be/)\n"
 "MIME-Version: 1.0\n"
@@ -41,27 +41,43 @@ msgstr ""
 msgid "Admin"
 msgstr ""
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr ""
 
-#: files.php:210
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
+#: files.php:226
 msgid "ZIP download is turned off."
 msgstr ""
 
-#: files.php:211
+#: files.php:227
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:212 files.php:245
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:242
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -170,77 +186,81 @@ msgstr ""
 msgid "PostgreSQL username and/or password not valid"
 msgstr ""
 
-#: setup.php:42
+#: setup.php:28
 msgid "Set an admin username."
 msgstr ""
 
-#: setup.php:45
+#: setup.php:31
 msgid "Set an admin password."
 msgstr ""
 
-#: setup.php:198
+#: setup.php:184
 msgid ""
 "Your web server is not yet properly setup to allow files synchronization "
 "because the WebDAV interface seems to be broken."
 msgstr ""
 
-#: setup.php:199
+#: setup.php:185
 #, php-format
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:113
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr ""
 
-#: template.php:114
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr ""
 
-#: template.php:115
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr ""
 
-#: template.php:116
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr ""
 
-#: template.php:117
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr ""
 
-#: template.php:118
+#: template/functions.php:85
 msgid "today"
 msgstr ""
 
-#: template.php:119
+#: template/functions.php:86
 msgid "yesterday"
 msgstr ""
 
-#: template.php:120
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr ""
 
-#: template.php:121
+#: template/functions.php:88
 msgid "last month"
 msgstr ""
 
-#: template.php:122
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr ""
 
-#: template.php:123
+#: template/functions.php:90
 msgid "last year"
 msgstr ""
 
-#: template.php:124
+#: template/functions.php:91
 msgid "years ago"
 msgstr ""
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/bg_BG/lib.po b/l10n/bg_BG/lib.po
index bd663bdd1ee582d7fd745ca8853d4ddaf62e2095..74cc7751a414857bd6a39069ed6c2d79dca52ff7 100644
--- a/l10n/bg_BG/lib.po
+++ b/l10n/bg_BG/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
 "MIME-Version: 1.0\n"
@@ -42,10 +42,20 @@ msgstr "Приложения"
 msgid "Admin"
 msgstr "Админ"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "уеб услуги под Ваш контрол"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "Изтеглянето като ZIP е изключено."
@@ -54,15 +64,21 @@ msgstr "Изтеглянето като ZIP е изключено."
 msgid "Files need to be downloaded one by one."
 msgstr "Файловете трябва да се изтеглят един по един."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Назад към файловете"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Избраните файлове са прекалено големи за генерирането на ZIP архив."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "не може да се определи"
 
@@ -190,58 +206,62 @@ msgstr "Вашият web сървър все още не е удачно нас
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Моля направете повторна справка с <a href='%s'>ръководството за инсталиране</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "преди секунди"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "преди 1 минута"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "преди %d минути"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "преди 1 час"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "преди %d часа"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "днес"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "вчера"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "преди %d дни"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "последният месец"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "преди %d месеца"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "последната година"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "последните години"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/bn_BD/lib.po b/l10n/bn_BD/lib.po
index ed1031c84c9457efcb2ba83ea7f18d9c59e3d6b4..d9e572a75f83df658250227e61b70f4cb25864a9 100644
--- a/l10n/bn_BD/lib.po
+++ b/l10n/bn_BD/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "অ্যাপ"
 msgid "Admin"
 msgstr "প্রশাসন"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "ওয়েব সার্ভিস আপনার হাতের মুঠোয়"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "ZIP ডাউনলোড বন্ধ করা আছে।"
@@ -53,15 +63,21 @@ msgstr "ZIP ডাউনলোড বন্ধ করা আছে।"
 msgid "Files need to be downloaded one by one."
 msgstr "ফাইলগুলো একে একে ডাউনলোড করা আবশ্যক।"
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "ফাইলে ফিরে চল"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "নির্বাচিত ফাইলগুলো এতই বৃহৎ যে জিপ ফাইল তৈরী করা সম্ভব নয়।"
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -189,58 +205,62 @@ msgstr ""
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "সেকেন্ড পূর্বে"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "১ মিনিট পূর্বে"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d মিনিট পূর্বে"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1 ঘন্টা পূর্বে"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr ""
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "আজ"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "গতকাল"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d  দিন পূর্বে"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "গত মাস"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr ""
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "গত বছর"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "বছর পূর্বে"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/bs/lib.po b/l10n/bs/lib.po
index 815a68397d76344764eb4358f9ff4791785c40ec..4def658658b71818d2c03921cc5b1f2fef8a6c28 100644
--- a/l10n/bs/lib.po
+++ b/l10n/bs/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-05 02:13+0200\n"
-"PO-Revision-Date: 2013-07-05 00:13+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Bosnian (http://www.transifex.com/projects/p/owncloud/language/bs/)\n"
 "MIME-Version: 1.0\n"
@@ -41,27 +41,43 @@ msgstr ""
 msgid "Admin"
 msgstr ""
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr ""
 
-#: files.php:210
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
+#: files.php:226
 msgid "ZIP download is turned off."
 msgstr ""
 
-#: files.php:211
+#: files.php:227
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:212 files.php:245
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:242
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -170,77 +186,81 @@ msgstr ""
 msgid "PostgreSQL username and/or password not valid"
 msgstr ""
 
-#: setup.php:42
+#: setup.php:28
 msgid "Set an admin username."
 msgstr ""
 
-#: setup.php:45
+#: setup.php:31
 msgid "Set an admin password."
 msgstr ""
 
-#: setup.php:198
+#: setup.php:184
 msgid ""
 "Your web server is not yet properly setup to allow files synchronization "
 "because the WebDAV interface seems to be broken."
 msgstr ""
 
-#: setup.php:199
+#: setup.php:185
 #, php-format
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:113
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr ""
 
-#: template.php:114
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr ""
 
-#: template.php:115
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr ""
 
-#: template.php:116
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr ""
 
-#: template.php:117
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr ""
 
-#: template.php:118
+#: template/functions.php:85
 msgid "today"
 msgstr ""
 
-#: template.php:119
+#: template/functions.php:86
 msgid "yesterday"
 msgstr ""
 
-#: template.php:120
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr ""
 
-#: template.php:121
+#: template/functions.php:88
 msgid "last month"
 msgstr ""
 
-#: template.php:122
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr ""
 
-#: template.php:123
+#: template/functions.php:90
 msgid "last year"
 msgstr ""
 
-#: template.php:124
+#: template/functions.php:91
 msgid "years ago"
 msgstr ""
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/ca/lib.po b/l10n/ca/lib.po
index 7c86622a7ab47a196c574b8c9826658a2a0b4861..8f316d07dbebaf58b0b713fb613fd75689502760 100644
--- a/l10n/ca/lib.po
+++ b/l10n/ca/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
 "MIME-Version: 1.0\n"
@@ -42,10 +42,20 @@ msgstr "Aplicacions"
 msgid "Admin"
 msgstr "Administració"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "controleu els vostres serveis web"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "La baixada en ZIP està desactivada."
@@ -54,15 +64,21 @@ msgstr "La baixada en ZIP està desactivada."
 msgid "Files need to be downloaded one by one."
 msgstr "Els fitxers s'han de baixar d'un en un."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Torna a Fitxers"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Els fitxers seleccionats son massa grans per generar un fitxer zip."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "no s'ha pogut determinar"
 
@@ -190,58 +206,62 @@ msgstr "El servidor web no està configurat correctament per permetre la sincron
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Comproveu les <a href='%s'>guies d'instal·lació</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "segons enrere"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "fa 1 minut"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "fa %d minuts"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "fa 1 hora"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "fa %d hores"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "avui"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "ahir"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "fa %d dies"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "el mes passat"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "fa %d mesos"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "l'any passat"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "anys enrere"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/cs_CZ/lib.po b/l10n/cs_CZ/lib.po
index 29c915f027494d56cb95603a51f2b77f22332711..d19bbe4bb92b93dbc939a6fe69e567c1996e5713 100644
--- a/l10n/cs_CZ/lib.po
+++ b/l10n/cs_CZ/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
 "MIME-Version: 1.0\n"
@@ -42,10 +42,20 @@ msgstr "Aplikace"
 msgid "Admin"
 msgstr "Administrace"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "služby webu pod Vaší kontrolou"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "Stahování ZIPu je vypnuto."
@@ -54,15 +64,21 @@ msgstr "Stahování ZIPu je vypnuto."
 msgid "Files need to be downloaded one by one."
 msgstr "Soubory musí být stahovány jednotlivě."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Zpět k souborům"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Vybrané soubory jsou příliš velké pro vytvoření zip souboru."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "nelze zjistit"
 
@@ -190,58 +206,62 @@ msgstr "Váš webový server není správně nastaven pro umožnění synchroniz
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Zkonzultujte, prosím, <a href='%s'>průvodce instalací</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "před pár vteřinami"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "před minutou"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "před %d minutami"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "před hodinou"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "před %d hodinami"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "dnes"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "včera"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "před %d dny"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "minulý měsíc"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "Před %d měsíci"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "minulý rok"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "před lety"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/cy_GB/lib.po b/l10n/cy_GB/lib.po
index b8199d6217d0627d4e4df6f078bd00be8a6f12ae..ce21b1417ac21baa2d722032f4935b610fcf6441 100644
--- a/l10n/cy_GB/lib.po
+++ b/l10n/cy_GB/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Welsh (United Kingdom) (http://www.transifex.com/projects/p/owncloud/language/cy_GB/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "Pecynnau"
 msgid "Admin"
 msgstr "Gweinyddu"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "gwasanaethau gwe a reolir gennych"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "Mae llwytho ZIP wedi ei ddiffodd."
@@ -53,15 +63,21 @@ msgstr "Mae llwytho ZIP wedi ei ddiffodd."
 msgid "Files need to be downloaded one by one."
 msgstr "Mae angen llwytho ffeiliau i lawr fesul un."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Nôl i Ffeiliau"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Mae'r ffeiliau ddewiswyd yn rhy fawr i gynhyrchu ffeil zip."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "methwyd pennu"
 
@@ -189,58 +205,62 @@ msgstr "Nid yw eich gweinydd wedi'i gyflunio eto i ganiatáu cydweddu ffeiliau o
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Gwiriwch y <a href='%s'>canllawiau gosod</a> eto."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "eiliad yn ôl"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 munud yn ôl"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d munud yn ôl"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1 awr yn ôl"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "%d awr yn ôl"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "heddiw"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "ddoe"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d diwrnod yn ôl"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "mis diwethaf"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "%d mis yn ôl"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "y llynedd"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "blwyddyn yn ôl"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/da/lib.po b/l10n/da/lib.po
index 7e95b63abd7d0ea59b9b0f47f8abbff6ac26d2f3..03a1bcfb42f0503b0e93491c67953753dcfb9cf8 100644
--- a/l10n/da/lib.po
+++ b/l10n/da/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
 "MIME-Version: 1.0\n"
@@ -42,10 +42,20 @@ msgstr "Apps"
 msgid "Admin"
 msgstr "Admin"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "Webtjenester under din kontrol"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "ZIP-download er slået fra."
@@ -54,15 +64,21 @@ msgstr "ZIP-download er slået fra."
 msgid "Files need to be downloaded one by one."
 msgstr "Filer skal downloades en for en."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Tilbage til Filer"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "De markerede filer er for store til at generere en ZIP-fil."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "kunne ikke fastslås"
 
@@ -190,58 +206,62 @@ msgstr "Din webserver er endnu ikke sat op til at tillade fil synkronisering for
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Dobbelttjek venligst <a href='%s'>installations vejledningerne</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "sekunder siden"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 minut siden"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d minutter siden"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1 time siden"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "%d timer siden"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "i dag"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "i går"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d dage siden"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "sidste måned"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "%d måneder siden"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "sidste år"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "Ã¥r siden"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/de/lib.po b/l10n/de/lib.po
index 7c724bda5a8cff9386aa0f6803ca234322cab8cc..9617f8684012c2b1274f566cdbfbe950ee821f54 100644
--- a/l10n/de/lib.po
+++ b/l10n/de/lib.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: German <translations@owncloud.org>\n"
 "MIME-Version: 1.0\n"
@@ -43,10 +43,20 @@ msgstr "Apps"
 msgid "Admin"
 msgstr "Administration"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "Web-Services unter Deiner Kontrolle"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "Der ZIP-Download ist deaktiviert."
@@ -55,15 +65,21 @@ msgstr "Der ZIP-Download ist deaktiviert."
 msgid "Files need to be downloaded one by one."
 msgstr "Die Dateien müssen einzeln heruntergeladen werden."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Zurück zu \"Dateien\""
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Die gewählten Dateien sind zu groß, um eine ZIP-Datei zu erstellen."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "konnte nicht festgestellt werden"
 
@@ -191,58 +207,62 @@ msgstr "Dein Web-Server ist noch nicht für Datei-Synchronisation bereit, weil d
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Bitte prüfe die <a href='%s'>Installationsanleitungen</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "Gerade eben"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "vor einer Minute"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "Vor %d Minuten"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "Vor einer Stunde"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "Vor %d Stunden"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "Heute"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "Gestern"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "Vor %d Tag(en)"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "Letzten Monat"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "Vor %d Monaten"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "Letztes Jahr"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "Vor Jahren"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/de/settings.po b/l10n/de/settings.po
index be9bdae7e3c0a47b6c3eea866a766f3111333c2d..ec725c94768da08918f5658b5af49ddcb4ebdb18 100644
--- a/l10n/de/settings.po
+++ b/l10n/de/settings.po
@@ -12,9 +12,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:55+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-23 21:56+0000\n"
+"Last-Translator: Mario Siegmann <mario_siegmann@web.de>\n"
 "Language-Team: German <translations@owncloud.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -280,12 +280,12 @@ msgstr "Erlaubt Benutzern, Inhalte über öffentliche Links zu teilen"
 
 #: templates/admin.php:153
 msgid "Allow public uploads"
-msgstr ""
+msgstr "Öffentliches Hochladen erlauben"
 
 #: templates/admin.php:154
 msgid ""
 "Allow users to enable others to upload into their publicly shared folders"
-msgstr ""
+msgstr "Erlaubt Benutzern die Freigabe anderer Benutzer in ihren öffentlich freigegebene Ordner hochladen zu dürfen"
 
 #: templates/admin.php:162
 msgid "Allow resharing"
diff --git a/l10n/de_DE/lib.po b/l10n/de_DE/lib.po
index 202f99c43014b97d018a917632090642f1bb10a7..2908fcd3ca3562ac95980756a3445610a61e00f5 100644
--- a/l10n/de_DE/lib.po
+++ b/l10n/de_DE/lib.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
-"Last-Translator: traductor <transifex-2.7.mensaje@spamgourmet.com>\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: German (Germany) <translations@owncloud.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -42,10 +42,20 @@ msgstr "Apps"
 msgid "Admin"
 msgstr "Administrator"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "Web-Services unter Ihrer Kontrolle"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "Der ZIP-Download ist deaktiviert."
@@ -54,15 +64,21 @@ msgstr "Der ZIP-Download ist deaktiviert."
 msgid "Files need to be downloaded one by one."
 msgstr "Die Dateien müssen einzeln heruntergeladen werden."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Zurück zu \"Dateien\""
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Die gewählten Dateien sind zu groß, um eine ZIP-Datei zu erstellen."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "konnte nicht ermittelt werden"
 
@@ -190,58 +206,62 @@ msgstr "Ihr Web-Server ist noch nicht für eine Datei-Synchronisation konfigurie
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Bitte prüfen Sie die <a href='%s'>Installationsanleitungen</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "Gerade eben"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "Vor 1 Minute"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "Vor %d Minuten"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "Vor einer Stunde"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "Vor %d Stunden"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "Heute"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "Gestern"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "Vor %d Tag(en)"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "Letzten Monat"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "Vor %d Monaten"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "Letztes Jahr"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "Vor  Jahren"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/de_DE/settings.po b/l10n/de_DE/settings.po
index 826988516880766c712b2d7efa28fae51b75b6d2..c7c5d9647d776ba3800dc3bcaa273fb344ded6b7 100644
--- a/l10n/de_DE/settings.po
+++ b/l10n/de_DE/settings.po
@@ -13,9 +13,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:55+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-23 21:56+0000\n"
+"Last-Translator: Mario Siegmann <mario_siegmann@web.de>\n"
 "Language-Team: German (Germany) <translations@owncloud.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -281,12 +281,12 @@ msgstr "Benutzern erlauben, Inhalte per öffentlichem Link zu teilen"
 
 #: templates/admin.php:153
 msgid "Allow public uploads"
-msgstr ""
+msgstr "Erlaube öffentliches hochladen"
 
 #: templates/admin.php:154
 msgid ""
 "Allow users to enable others to upload into their publicly shared folders"
-msgstr ""
+msgstr "Erlaubt Benutzern die Freigabe anderer Benutzer in ihren öffentlich freigegebene Ordner hochladen zu dürfen"
 
 #: templates/admin.php:162
 msgid "Allow resharing"
diff --git a/l10n/el/lib.po b/l10n/el/lib.po
index 0bc015505de90fbf3ff8b3428fff3e295e5c15c3..47a64c55113408d7f4c3d61b9c21348e6c7156cb 100644
--- a/l10n/el/lib.po
+++ b/l10n/el/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
 "MIME-Version: 1.0\n"
@@ -42,10 +42,20 @@ msgstr "Εφαρμογές"
 msgid "Admin"
 msgstr "Διαχειριστής"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "υπηρεσίες δικτύου υπό τον έλεγχό σας"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "Η λήψη ZIP απενεργοποιήθηκε."
@@ -54,15 +64,21 @@ msgstr "Η λήψη ZIP απενεργοποιήθηκε."
 msgid "Files need to be downloaded one by one."
 msgstr "Τα αρχεία πρέπει να ληφθούν ένα-ένα."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Πίσω στα Αρχεία"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Τα επιλεγμένα αρχεία είναι μεγάλα ώστε να δημιουργηθεί αρχείο zip."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "δεν μπορούσε να προσδιορισθεί"
 
@@ -190,58 +206,62 @@ msgstr "Ο διακομιστής σας δεν έχει ρυθμιστεί κα
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Ελέγξτε ξανά τις <a href='%s'>οδηγίες εγκατάστασης</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "δευτερόλεπτα πριν"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 λεπτό πριν"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d λεπτά πριν"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1 ώρα πριν"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "%d ώρες πριν"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "σήμερα"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "χτες"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d ημέρες πριν"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "τελευταίο μήνα"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "%d μήνες πριν"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "τελευταίο χρόνο"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "χρόνια πριν"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/el/settings.po b/l10n/el/settings.po
index e8db1d9429efe6f21a3b838f018e40b1d83d428e..5d394d36ded2a6ccafe7a027ced6306c8341fe6b 100644
--- a/l10n/el/settings.po
+++ b/l10n/el/settings.po
@@ -3,6 +3,7 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# Efstathios Iosifidis <iefstathios@gmail.com>, 2013
 # Efstathios Iosifidis <iosifidis@opensuse.org>, 2013
 # KAT.RAT12 <spanish.katerina@gmail.com>, 2013
 # Teogramm <theodorewii121@hotmail.com>, 2013
@@ -12,9 +13,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:55+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-23 11:50+0000\n"
+"Last-Translator: Efstathios Iosifidis <iefstathios@gmail.com>\n"
 "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -470,7 +471,7 @@ msgstr "WebDAV"
 msgid ""
 "Use this address to <a href=\"%s/server/5.0/user_manual/files/files.html\" "
 "target=\"_blank\">access your Files via WebDAV</a>"
-msgstr ""
+msgstr "Χρήση αυτής της διεύθυνσης για <a href=\"%s/server/5.0/user_manual/files/files.html\" target=\"_blank\">πρόσβαση των αρχείων σας μέσω WebDAV</a>"
 
 #: templates/users.php:21
 msgid "Login Name"
diff --git a/l10n/en@pirate/lib.po b/l10n/en@pirate/lib.po
index c41a936390908ca9e7a3476e42e4382ca24e5930..fb244e8b564bdd20405031ea17d4a7b7309738f4 100644
--- a/l10n/en@pirate/lib.po
+++ b/l10n/en@pirate/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-06 02:02+0200\n"
-"PO-Revision-Date: 2013-07-05 00:30+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Pirate English (http://www.transifex.com/projects/p/owncloud/language/en@pirate/)\n"
 "MIME-Version: 1.0\n"
@@ -41,27 +41,43 @@ msgstr ""
 msgid "Admin"
 msgstr ""
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "web services under your control"
 
-#: files.php:210
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
+#: files.php:226
 msgid "ZIP download is turned off."
 msgstr ""
 
-#: files.php:211
+#: files.php:227
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:212 files.php:245
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:242
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -170,77 +186,81 @@ msgstr ""
 msgid "PostgreSQL username and/or password not valid"
 msgstr ""
 
-#: setup.php:42
+#: setup.php:28
 msgid "Set an admin username."
 msgstr ""
 
-#: setup.php:45
+#: setup.php:31
 msgid "Set an admin password."
 msgstr ""
 
-#: setup.php:198
+#: setup.php:184
 msgid ""
 "Your web server is not yet properly setup to allow files synchronization "
 "because the WebDAV interface seems to be broken."
 msgstr ""
 
-#: setup.php:199
+#: setup.php:185
 #, php-format
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:113
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr ""
 
-#: template.php:114
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr ""
 
-#: template.php:115
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr ""
 
-#: template.php:116
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr ""
 
-#: template.php:117
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr ""
 
-#: template.php:118
+#: template/functions.php:85
 msgid "today"
 msgstr ""
 
-#: template.php:119
+#: template/functions.php:86
 msgid "yesterday"
 msgstr ""
 
-#: template.php:120
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr ""
 
-#: template.php:121
+#: template/functions.php:88
 msgid "last month"
 msgstr ""
 
-#: template.php:122
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr ""
 
-#: template.php:123
+#: template/functions.php:90
 msgid "last year"
 msgstr ""
 
-#: template.php:124
+#: template/functions.php:91
 msgid "years ago"
 msgstr ""
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/eo/lib.po b/l10n/eo/lib.po
index 34706a7f37624141b4c95f36d791577f235f2e9b..60028aadc88377ba313953950e56c3bc371fc5c0 100644
--- a/l10n/eo/lib.po
+++ b/l10n/eo/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n"
 "MIME-Version: 1.0\n"
@@ -42,10 +42,20 @@ msgstr "Aplikaĵoj"
 msgid "Admin"
 msgstr "Administranto"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "TTT-servoj regataj de vi"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "ZIP-elŝuto estas malkapabligita."
@@ -54,15 +64,21 @@ msgstr "ZIP-elŝuto estas malkapabligita."
 msgid "Files need to be downloaded one by one."
 msgstr "Dosieroj devas elŝutiĝi unuope."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Reen al la dosieroj"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "La elektitaj dosieroj tro grandas por genero de ZIP-dosiero."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -190,58 +206,62 @@ msgstr "Via TTT-servilo ankoraŭ ne ĝuste agordiĝis por permesi sinkronigi dos
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Bonvolu duoble kontroli la <a href='%s'>gvidilon por instalo</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "sekundoj antaÅ­e"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "antaÅ­ 1 minuto"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "antaÅ­ %d minutoj"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "antaÅ­ 1 horo"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "antaÅ­ %d horoj"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "hodiaÅ­"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "hieraÅ­"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "antaÅ­ %d tagoj"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "lastamonate"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "antaÅ­ %d monatoj"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "lastajare"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "jaroj antaÅ­e"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/es/lib.po b/l10n/es/lib.po
index f18384938c0989df2841570c1a1f7c722a65052f..4d7f653565d96fcfe9d9113a9fff26e5f813cb4c 100644
--- a/l10n/es/lib.po
+++ b/l10n/es/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
 "MIME-Version: 1.0\n"
@@ -42,10 +42,20 @@ msgstr "Aplicaciones"
 msgid "Admin"
 msgstr "Administración"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "Servicios web bajo su control"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "La descarga en ZIP está desactivada."
@@ -54,15 +64,21 @@ msgstr "La descarga en ZIP está desactivada."
 msgid "Files need to be downloaded one by one."
 msgstr "Los archivos deben ser descargados uno por uno."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Volver a Archivos"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Los archivos seleccionados son demasiado grandes para generar el archivo zip."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "no pudo ser determinado"
 
@@ -190,58 +206,62 @@ msgstr "Su servidor web aún no está configurado adecuadamente para permitir si
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Por favor, vuelva a comprobar las <a href='%s'>guías de instalación</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "hace segundos"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "hace 1 minuto"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "hace %d minutos"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "Hace 1 hora"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "Hace %d horas"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "hoy"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "ayer"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "hace %d días"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "mes pasado"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "Hace %d meses"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "año pasado"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "hace años"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/es_AR/lib.po b/l10n/es_AR/lib.po
index 38a942ff168cefc2806e90d4be62029f42b27bc4..0797fe2fa94b51c16aba7e61215730f1308877da 100644
--- a/l10n/es_AR/lib.po
+++ b/l10n/es_AR/lib.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
-"Last-Translator: cjtess <claudio.tessone@gmail.com>\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -42,10 +42,20 @@ msgstr "Apps"
 msgid "Admin"
 msgstr "Administración"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "servicios web sobre los que tenés control"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "La descarga en ZIP está desactivada."
@@ -54,15 +64,21 @@ msgstr "La descarga en ZIP está desactivada."
 msgid "Files need to be downloaded one by one."
 msgstr "Los archivos deben ser descargados de a uno."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Volver a Archivos"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Los archivos seleccionados son demasiado grandes para generar el archivo zip."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "no se pudo determinar"
 
@@ -190,58 +206,62 @@ msgstr "Tu servidor web no está configurado todavía para permitir sincronizaci
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Por favor, comprobá nuevamente la <a href='%s'>guía de instalación</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "segundos atrás"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "hace 1 minuto"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "hace %d minutos"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "hace 1 hora"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "hace %d horas"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "hoy"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "ayer"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "hace %d días"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "el mes pasado"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "hace %d meses"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "el año pasado"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "años atrás"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/et_EE/lib.po b/l10n/et_EE/lib.po
index 1b9b1c585356c751a2563644c60cc5460418c361..4286a1d97e1e0d73ecdb0715821fd2be084daae5 100644
--- a/l10n/et_EE/lib.po
+++ b/l10n/et_EE/lib.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n"
 "MIME-Version: 1.0\n"
@@ -43,10 +43,20 @@ msgstr "Rakendused"
 msgid "Admin"
 msgstr "Admin"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "veebitenused sinu kontrolli all"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "ZIP-ina allalaadimine on välja lülitatud."
@@ -55,15 +65,21 @@ msgstr "ZIP-ina allalaadimine on välja lülitatud."
 msgid "Files need to be downloaded one by one."
 msgstr "Failid tuleb alla laadida ükshaaval."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Tagasi failide juurde"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Valitud failid on ZIP-faili loomiseks liiga suured."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "ei suudetud tuvastada"
 
@@ -191,58 +207,62 @@ msgstr "Veebiserveri ei ole veel korralikult seadistatud võimaldamaks failide s
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Palun tutvu veelkord <a href='%s'>paigalduse juhenditega</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "sekundit tagasi"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 minut tagasi"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d minutit tagasi"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1 tund tagasi"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "%d tundi tagasi"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "täna"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "eile"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d päeva tagasi"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "viimasel kuul"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "%d kuud tagasi"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "viimasel aastal"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "aastat tagasi"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/et_EE/settings.po b/l10n/et_EE/settings.po
index 3392305b6c856d858ec41a7422ec5d3da6eb2f20..d6eb8e8264689d75d8db0f9ff6cbd2aeb38c475b 100644
--- a/l10n/et_EE/settings.po
+++ b/l10n/et_EE/settings.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:55+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-23 09:30+0000\n"
+"Last-Translator: pisike.sipelgas <pisike.sipelgas@gmail.com>\n"
 "Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -277,12 +277,12 @@ msgstr "Luba kasutajatel jagada kirjeid avalike linkidega"
 
 #: templates/admin.php:153
 msgid "Allow public uploads"
-msgstr ""
+msgstr "Luba avalikud üleslaadimised"
 
 #: templates/admin.php:154
 msgid ""
 "Allow users to enable others to upload into their publicly shared folders"
-msgstr ""
+msgstr "Luba kasutajatel üleslaadimine teiste poolt oma avalikult jagatud kataloogidesse "
 
 #: templates/admin.php:162
 msgid "Allow resharing"
diff --git a/l10n/eu/lib.po b/l10n/eu/lib.po
index 0dcf61649343d8caabe1e9d42a1c5108d92fe138..d34f67e8c9cd546450abbde80fde25b2d8a7c31d 100644
--- a/l10n/eu/lib.po
+++ b/l10n/eu/lib.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
-"Last-Translator: Piarres Beobide <pi@beobide.net>\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -42,10 +42,20 @@ msgstr "Aplikazioak"
 msgid "Admin"
 msgstr "Admin"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "web zerbitzuak zure kontrolpean"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "ZIP deskarga ez dago gaituta."
@@ -54,15 +64,21 @@ msgstr "ZIP deskarga ez dago gaituta."
 msgid "Files need to be downloaded one by one."
 msgstr "Fitxategiak banan-banan deskargatu behar dira."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Itzuli fitxategietara"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Hautatuko fitxategiak oso handiak dira zip fitxategia sortzeko."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "ezin izan da zehaztu"
 
@@ -190,58 +206,62 @@ msgstr "Zure web zerbitzaria ez dago oraindik ongi konfiguratuta fitxategien sin
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Mesedez begiratu <a href='%s'>instalazio gidak</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "segundu"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "orain dela minutu 1"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "orain dela %d minutu"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "orain dela ordu bat"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "orain dela %d ordu"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "gaur"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "atzo"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "orain dela %d egun"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "joan den hilabetean"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "orain dela %d hilabete"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "joan den urtean"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "urte"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/fa/lib.po b/l10n/fa/lib.po
index 1fd173c4dc9f45e6ed1d8501a21873015691db91..ecfe7c69a3bf8456715a5389681130718b3264b3 100644
--- a/l10n/fa/lib.po
+++ b/l10n/fa/lib.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
-"Last-Translator: miki_mika1362 <miki_mika1362@yahoo.com>\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -42,10 +42,20 @@ msgstr "  برنامه ها"
 msgid "Admin"
 msgstr "مدیر"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "سرویس های تحت وب در کنترل شما"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "دانلود به صورت فشرده غیر فعال است"
@@ -54,15 +64,21 @@ msgstr "دانلود به صورت فشرده غیر فعال است"
 msgid "Files need to be downloaded one by one."
 msgstr "فایل ها باید به صورت یکی یکی دانلود شوند"
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "بازگشت به فایل ها"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "فایل های انتخاب شده بزرگتر از آن هستند که بتوان یک فایل فشرده تولید کرد"
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "نمیتواند مشخص شود"
 
@@ -190,58 +206,62 @@ msgstr "احتمالاً وب سرور شما طوری تنظیم نشده اس
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "لطفاً دوباره <a href='%s'>راهنمای نصب</a>را بررسی کنید."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "ثانیه‌ها پیش"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 دقیقه پیش"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d دقیقه پیش"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1 ساعت پیش"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "%d ساعت پیش"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "امروز"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "دیروز"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d روز  پیش"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "ماه قبل"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "%dماه پیش"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "سال قبل"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "سال‌های قبل"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/fi_FI/lib.po b/l10n/fi_FI/lib.po
index 58c52b0dac940774ae92dbb70f176de5707e485f..ca512563c65e64f929cc18fc3d021fb0a38df304 100644
--- a/l10n/fi_FI/lib.po
+++ b/l10n/fi_FI/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n"
 "MIME-Version: 1.0\n"
@@ -42,10 +42,20 @@ msgstr "Sovellukset"
 msgid "Admin"
 msgstr "Ylläpitäjä"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "verkkopalvelut hallinnassasi"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "ZIP-lataus on poistettu käytöstä."
@@ -54,15 +64,21 @@ msgstr "ZIP-lataus on poistettu käytöstä."
 msgid "Files need to be downloaded one by one."
 msgstr "Tiedostot on ladattava yksittäin."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Takaisin tiedostoihin"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Valitut tiedostot ovat liian suurikokoisia mahtuakseen zip-tiedostoon."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "ei voitu määrittää"
 
@@ -190,58 +206,62 @@ msgstr ""
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Lue tarkasti <a href='%s'>asennusohjeet</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "sekuntia sitten"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 minuutti sitten"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d minuuttia sitten"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1 tunti sitten"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "%d tuntia sitten"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "tänään"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "eilen"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d päivää sitten"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "viime kuussa"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "%d kuukautta sitten"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "viime vuonna"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "vuotta sitten"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/fr/lib.po b/l10n/fr/lib.po
index 8237e512ae3004e108ec5759a8f18a6a863436c7..dcb8bc19a2b8c6952f5f410b60a8b382e900ad57 100644
--- a/l10n/fr/lib.po
+++ b/l10n/fr/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
 "MIME-Version: 1.0\n"
@@ -42,10 +42,20 @@ msgstr "Applications"
 msgid "Admin"
 msgstr "Administration"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "services web sous votre contrôle"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "Téléchargement ZIP désactivé."
@@ -54,15 +64,21 @@ msgstr "Téléchargement ZIP désactivé."
 msgid "Files need to be downloaded one by one."
 msgstr "Les fichiers nécessitent d'être téléchargés un par un."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Retour aux Fichiers"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Les fichiers sélectionnés sont trop volumineux pour être compressés."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "impossible à déterminer"
 
@@ -190,58 +206,62 @@ msgstr "Votre serveur web, n'est pas correctement configuré pour permettre la s
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Veuillez vous référer au <a href='%s'>guide d'installation</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "il y a quelques secondes"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "il y a une minute"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "il y a %d minutes"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "Il y a une heure"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "Il y a %d heures"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "aujourd'hui"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "hier"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "il y a %d jours"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "le mois dernier"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "Il y a %d mois"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "l'année dernière"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "il y a plusieurs années"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/gl/lib.po b/l10n/gl/lib.po
index e94df659b8fb6b448568e1323c33a1b016a42a59..d91186c5b8e7663c53dbb6ff31ab88aeee630afb 100644
--- a/l10n/gl/lib.po
+++ b/l10n/gl/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
 "MIME-Version: 1.0\n"
@@ -42,10 +42,20 @@ msgstr "Aplicativos"
 msgid "Admin"
 msgstr "Administración"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "servizos web baixo o seu control"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "As descargas ZIP están desactivadas."
@@ -54,15 +64,21 @@ msgstr "As descargas ZIP están desactivadas."
 msgid "Files need to be downloaded one by one."
 msgstr "Os ficheiros necesitan seren descargados dun en un."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Volver aos ficheiros"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Os ficheiros seleccionados son demasiado grandes como para xerar un ficheiro zip."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "non foi posíbel determinalo"
 
@@ -190,58 +206,62 @@ msgstr "O seu servidor web non está aínda configurado adecuadamente para permi
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Volva comprobar as <a href='%s'>guías de instalación</a>"
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "segundos atrás"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "hai 1 minuto"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "hai %d minutos"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "Vai 1 hora"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "Vai %d horas"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "hoxe"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "onte"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "hai %d días"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "último mes"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "Vai %d meses"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "último ano"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "anos atrás"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/gl/settings.po b/l10n/gl/settings.po
index 561654b21274f9dfe1e6a04298083a599d5f43c5..d82cc9352e41fcacd251d6eb158d0f554d36fc56 100644
--- a/l10n/gl/settings.po
+++ b/l10n/gl/settings.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:55+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-23 17:20+0000\n"
+"Last-Translator: mbouzada <mbouzada@gmail.com>\n"
 "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -276,12 +276,12 @@ msgstr "Permitir que os usuarios compartan elementos ao público con ligazóns"
 
 #: templates/admin.php:153
 msgid "Allow public uploads"
-msgstr ""
+msgstr "Permitir os envíos públicos"
 
 #: templates/admin.php:154
 msgid ""
 "Allow users to enable others to upload into their publicly shared folders"
-msgstr ""
+msgstr "Permitir que os usuarios lle permitan a outros enviar aos seus cartafoles compartidos publicamente"
 
 #: templates/admin.php:162
 msgid "Allow resharing"
diff --git a/l10n/he/lib.po b/l10n/he/lib.po
index 89e77e4bfd4967099b95cbd00db143a890c5db96..bb79451d05bef669455f50d6c3dd84bf9d3e8b23 100644
--- a/l10n/he/lib.po
+++ b/l10n/he/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "יישומים"
 msgid "Admin"
 msgstr "מנהל"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "שירותי רשת תחת השליטה שלך"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "הורדת ZIP כבויה"
@@ -53,15 +63,21 @@ msgstr "הורדת ZIP כבויה"
 msgid "Files need to be downloaded one by one."
 msgstr "יש להוריד את הקבצים אחד אחרי השני."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "חזרה לקבצים"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "הקבצים הנבחרים גדולים מידי ליצירת קובץ zip."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -189,58 +205,62 @@ msgstr "שרת האינטרנט שלך אינו מוגדר לצורכי סנכר
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "נא לעיין שוב ב<a href='%s'>מדריכי ההתקנה</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "שניות"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "לפני דקה אחת"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "לפני %d דקות"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "לפני שעה"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "לפני %d שעות"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "היום"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "אתמול"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "לפני %d ימים"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "חודש שעבר"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "לפני %d חודשים"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "שנה שעברה"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "שנים"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/hi/lib.po b/l10n/hi/lib.po
index 89421ef490119dac2710d121792f8b033aed80d1..4c585172851b9cd22d598adae4a1bb9ec3b22d17 100644
--- a/l10n/hi/lib.po
+++ b/l10n/hi/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-22 06:02+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "Apps"
 msgid "Admin"
 msgstr ""
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr ""
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr ""
@@ -53,15 +63,21 @@ msgstr ""
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -189,58 +205,62 @@ msgstr ""
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr ""
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr ""
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr ""
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr ""
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr ""
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr ""
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr ""
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr ""
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr ""
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr ""
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr ""
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr ""
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/hr/lib.po b/l10n/hr/lib.po
index bc3342a20b70d3a14ed6e62d8b624bf82b8167ff..d7ad1c61c971607bbcc97dfc653e96cd0bb75316 100644
--- a/l10n/hr/lib.po
+++ b/l10n/hr/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "Aplikacije"
 msgid "Admin"
 msgstr "Administrator"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "web usluge pod vašom kontrolom"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr ""
@@ -53,15 +63,21 @@ msgstr ""
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -189,58 +205,62 @@ msgstr ""
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "sekundi prije"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr ""
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr ""
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr ""
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr ""
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "danas"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "jučer"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr ""
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "prošli mjesec"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr ""
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "prošlu godinu"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "godina"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/hu_HU/lib.po b/l10n/hu_HU/lib.po
index dbde5e9a4ab7ed7160fee5b50cf97d0ce861829b..e008f3406a94223ace85d5a92ec0058e482f912c 100644
--- a/l10n/hu_HU/lib.po
+++ b/l10n/hu_HU/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n"
 "MIME-Version: 1.0\n"
@@ -42,10 +42,20 @@ msgstr "Alkalmazások"
 msgid "Admin"
 msgstr "Adminsztráció"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "webszolgáltatások saját kézben"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "A ZIP-letöltés nincs engedélyezve."
@@ -54,15 +64,21 @@ msgstr "A ZIP-letöltés nincs engedélyezve."
 msgid "Files need to be downloaded one by one."
 msgstr "A fájlokat egyenként kell letölteni."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Vissza a Fájlokhoz"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "A kiválasztott fájlok túl nagyok a zip tömörítéshez."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "nem határozható meg"
 
@@ -190,58 +206,62 @@ msgstr "Az Ön webkiszolgálója nincs megfelelően beállítva az állományok
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Kérjük tüzetesen tanulmányozza át a <a href='%s'>telepítési útmutatót</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "pár másodperce"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 perce"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d perce"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1 órája"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "%d órája"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "ma"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "tegnap"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d napja"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "múlt hónapban"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "%d hónapja"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "tavaly"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "több éve"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/hy/lib.po b/l10n/hy/lib.po
index 07d46915210e7d2f1550f9069197d373272cd36a..40f120e53550473bd0e238f7b6565c61fa9dc32c 100644
--- a/l10n/hy/lib.po
+++ b/l10n/hy/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-05 02:13+0200\n"
-"PO-Revision-Date: 2013-07-05 00:13+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Armenian (http://www.transifex.com/projects/p/owncloud/language/hy/)\n"
 "MIME-Version: 1.0\n"
@@ -41,27 +41,43 @@ msgstr ""
 msgid "Admin"
 msgstr ""
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr ""
 
-#: files.php:210
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
+#: files.php:226
 msgid "ZIP download is turned off."
 msgstr ""
 
-#: files.php:211
+#: files.php:227
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:212 files.php:245
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:242
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -170,77 +186,81 @@ msgstr ""
 msgid "PostgreSQL username and/or password not valid"
 msgstr ""
 
-#: setup.php:42
+#: setup.php:28
 msgid "Set an admin username."
 msgstr ""
 
-#: setup.php:45
+#: setup.php:31
 msgid "Set an admin password."
 msgstr ""
 
-#: setup.php:198
+#: setup.php:184
 msgid ""
 "Your web server is not yet properly setup to allow files synchronization "
 "because the WebDAV interface seems to be broken."
 msgstr ""
 
-#: setup.php:199
+#: setup.php:185
 #, php-format
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:113
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr ""
 
-#: template.php:114
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr ""
 
-#: template.php:115
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr ""
 
-#: template.php:116
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr ""
 
-#: template.php:117
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr ""
 
-#: template.php:118
+#: template/functions.php:85
 msgid "today"
 msgstr ""
 
-#: template.php:119
+#: template/functions.php:86
 msgid "yesterday"
 msgstr ""
 
-#: template.php:120
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr ""
 
-#: template.php:121
+#: template/functions.php:88
 msgid "last month"
 msgstr ""
 
-#: template.php:122
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr ""
 
-#: template.php:123
+#: template/functions.php:90
 msgid "last year"
 msgstr ""
 
-#: template.php:124
+#: template/functions.php:91
 msgid "years ago"
 msgstr ""
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/ia/lib.po b/l10n/ia/lib.po
index f39dedd713c9a5720a9a7d5e9b533047bdcbf83c..283c448b8e61780dd3f524d95830ab63c4a2c228 100644
--- a/l10n/ia/lib.po
+++ b/l10n/ia/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "Applicationes"
 msgid "Admin"
 msgstr "Administration"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "servicios web sub tu controlo"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr ""
@@ -53,15 +63,21 @@ msgstr ""
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -189,58 +205,62 @@ msgstr ""
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr ""
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr ""
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr ""
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr ""
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr ""
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr ""
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr ""
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr ""
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr ""
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr ""
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr ""
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr ""
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/id/lib.po b/l10n/id/lib.po
index 94f6deecc5a73840b1275f3935b0a991511d3e0a..7d7e86cd29ad9cf1cd47e5cfeeae32c4fd6959e3 100644
--- a/l10n/id/lib.po
+++ b/l10n/id/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "Aplikasi"
 msgid "Admin"
 msgstr "Admin"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "layanan web dalam kontrol Anda"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "Pengunduhan ZIP dimatikan."
@@ -53,15 +63,21 @@ msgstr "Pengunduhan ZIP dimatikan."
 msgid "Files need to be downloaded one by one."
 msgstr "Berkas harus diunduh satu persatu."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Kembali ke Daftar Berkas"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Berkas yang dipilih terlalu besar untuk dibuat berkas zip-nya."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "tidak dapat ditentukan"
 
@@ -189,58 +205,62 @@ msgstr "Web server Anda belum dikonfigurasikan dengan baik untuk mengizinkan sin
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Silakan periksa ulang <a href='%s'>panduan instalasi</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "beberapa detik yang lalu"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 menit yang lalu"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d menit yang lalu"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1 jam yang lalu"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "%d jam yang lalu"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "hari ini"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "kemarin"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d hari yang lalu"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "bulan kemarin"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "%d bulan yang lalu"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "tahun kemarin"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "beberapa tahun lalu"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/is/lib.po b/l10n/is/lib.po
index 80ce920a55fe2f63aaff94ec11fc4b999cd397a3..ad927007a61f4c081a2e198b7fe448b6c4999ebc 100644
--- a/l10n/is/lib.po
+++ b/l10n/is/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "Forrit"
 msgid "Admin"
 msgstr "Stjórnun"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "vefþjónusta undir þinni stjórn"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "Slökkt á ZIP niðurhali."
@@ -53,15 +63,21 @@ msgstr "Slökkt á ZIP niðurhali."
 msgid "Files need to be downloaded one by one."
 msgstr "Skrárnar verður að sækja eina og eina"
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Aftur í skrár"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Valdar skrár eru of stórar til að búa til ZIP skrá."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -189,58 +205,62 @@ msgstr ""
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "sek."
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "Fyrir 1 mínútu"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "fyrir %d mínútum"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "Fyrir 1 klst."
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "fyrir %d klst."
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "í dag"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "í gær"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "fyrir %d dögum"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "síðasta mánuði"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "fyrir %d mánuðum"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "síðasta ári"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "einhverjum árum"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/it/lib.po b/l10n/it/lib.po
index ca491c64f0e12753f92b5c5b15c4136812ab0cee..366d47f7892a4f027fbd37731ad00ac0a60b04aa 100644
--- a/l10n/it/lib.po
+++ b/l10n/it/lib.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
-"Last-Translator: Vincenzo Reale <vinx.reale@gmail.com>\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -42,10 +42,20 @@ msgstr "Applicazioni"
 msgid "Admin"
 msgstr "Admin"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "servizi web nelle tue mani"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "Lo scaricamento in formato ZIP è stato disabilitato."
@@ -54,15 +64,21 @@ msgstr "Lo scaricamento in formato ZIP è stato disabilitato."
 msgid "Files need to be downloaded one by one."
 msgstr "I file devono essere scaricati uno alla volta."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Torna ai file"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "I  file selezionati sono troppo grandi per generare un file zip."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "non può essere determinato"
 
@@ -190,58 +206,62 @@ msgstr "Il tuo server web non è configurato correttamente per consentire la sin
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Leggi attentamente le <a href='%s'>guide d'installazione</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "secondi fa"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "Un minuto fa"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d minuti fa"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1 ora fa"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "%d ore fa"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "oggi"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "ieri"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d giorni fa"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "mese scorso"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "%d mesi fa"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "anno scorso"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "anni fa"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/it/settings.po b/l10n/it/settings.po
index 3f5ba6d2638ec5e697f4a5dc65bc9c0ed2065ec5..58fa949610d3a63220c5356c0db18cada20dbf9c 100644
--- a/l10n/it/settings.po
+++ b/l10n/it/settings.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:55+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-23 08:20+0000\n"
+"Last-Translator: Vincenzo Reale <vinx.reale@gmail.com>\n"
 "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -278,12 +278,12 @@ msgstr "Consenti agli utenti di condividere pubblicamente elementi tramite colle
 
 #: templates/admin.php:153
 msgid "Allow public uploads"
-msgstr ""
+msgstr "Consenti caricamenti pubblici"
 
 #: templates/admin.php:154
 msgid ""
 "Allow users to enable others to upload into their publicly shared folders"
-msgstr ""
+msgstr "Consenti agli utenti di abilitare altri al caricamento nelle loro cartelle pubbliche condivise"
 
 #: templates/admin.php:162
 msgid "Allow resharing"
diff --git a/l10n/ja_JP/lib.po b/l10n/ja_JP/lib.po
index 6de2d481c219e78fd53605d922b262e075782ce8..a9bfe0203ff9ca68ac502fece3b61ae77c443420 100644
--- a/l10n/ja_JP/lib.po
+++ b/l10n/ja_JP/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
 "MIME-Version: 1.0\n"
@@ -42,10 +42,20 @@ msgstr "アプリ"
 msgid "Admin"
 msgstr "管理"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "管理下のウェブサービス"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "ZIPダウンロードは無効です。"
@@ -54,15 +64,21 @@ msgstr "ZIPダウンロードは無効です。"
 msgid "Files need to be downloaded one by one."
 msgstr "ファイルは1つずつダウンロードする必要があります。"
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "ファイルに戻る"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "選択したファイルはZIPファイルの生成には大きすぎます。"
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "測定できませんでした"
 
@@ -190,58 +206,62 @@ msgstr "WebDAVインタフェースが動作していないと考えられるた
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "<a href='%s'>インストールガイド</a>をよく確認してください。"
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "数秒前"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 分前"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d 分前"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1 時間前"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "%d 時間前"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "今日"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "昨日"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d 日前"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "一月前"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "%d 分前"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "一年前"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "年前"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/ka/lib.po b/l10n/ka/lib.po
index 4fa2845d636b6955712978c523920de0d5077e31..5cfcfa245f770f25718246da5676ac542525dd42 100644
--- a/l10n/ka/lib.po
+++ b/l10n/ka/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-05 02:13+0200\n"
-"PO-Revision-Date: 2013-07-05 00:13+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Georgian (http://www.transifex.com/projects/p/owncloud/language/ka/)\n"
 "MIME-Version: 1.0\n"
@@ -41,27 +41,43 @@ msgstr ""
 msgid "Admin"
 msgstr "ადმინისტრატორი"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr ""
 
-#: files.php:210
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
+#: files.php:226
 msgid "ZIP download is turned off."
 msgstr "ZIP გადმოწერა გამორთულია"
 
-#: files.php:211
+#: files.php:227
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:212 files.php:245
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:242
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -170,77 +186,81 @@ msgstr ""
 msgid "PostgreSQL username and/or password not valid"
 msgstr ""
 
-#: setup.php:42
+#: setup.php:28
 msgid "Set an admin username."
 msgstr ""
 
-#: setup.php:45
+#: setup.php:31
 msgid "Set an admin password."
 msgstr ""
 
-#: setup.php:198
+#: setup.php:184
 msgid ""
 "Your web server is not yet properly setup to allow files synchronization "
 "because the WebDAV interface seems to be broken."
 msgstr ""
 
-#: setup.php:199
+#: setup.php:185
 #, php-format
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:113
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "წამის წინ"
 
-#: template.php:114
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 წუთის წინ"
 
-#: template.php:115
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d წუთის წინ"
 
-#: template.php:116
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1 საათის წინ"
 
-#: template.php:117
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr ""
 
-#: template.php:118
+#: template/functions.php:85
 msgid "today"
 msgstr "დღეს"
 
-#: template.php:119
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "გუშინ"
 
-#: template.php:120
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d დღის წინ"
 
-#: template.php:121
+#: template/functions.php:88
 msgid "last month"
 msgstr ""
 
-#: template.php:122
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr ""
 
-#: template.php:123
+#: template/functions.php:90
 msgid "last year"
 msgstr ""
 
-#: template.php:124
+#: template/functions.php:91
 msgid "years ago"
 msgstr ""
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/ka_GE/lib.po b/l10n/ka_GE/lib.po
index d68e2c07874f5a0855fe94655987ec499b4f4c42..499f821fb1f6cccd5ded920a3474affe0a22d549 100644
--- a/l10n/ka_GE/lib.po
+++ b/l10n/ka_GE/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "აპლიკაციები"
 msgid "Admin"
 msgstr "ადმინისტრატორი"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "web services under your control"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "ZIP download–ი გათიშულია"
@@ -53,15 +63,21 @@ msgstr "ZIP download–ი გათიშულია"
 msgid "Files need to be downloaded one by one."
 msgstr "ფაილები უნდა გადმოიტვირთოს სათითაოდ."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "უკან ფაილებში"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "არჩეული ფაილები ძალიან დიდია zip ფაილის გენერაციისთვის."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "ვერ განისაზღვრა"
 
@@ -189,58 +205,62 @@ msgstr "თქვენი web სერვერი არ არის კო
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "გთხოვთ გადაათვალიეროთ <a href='%s'>ინსტალაციის გზამკვლევი</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "წამის წინ"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 წუთის წინ"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d წუთის წინ"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1 საათის წინ"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "%d საათის წინ"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "დღეს"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "გუშინ"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d  დღის წინ"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "გასულ თვეში"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "%d თვის წინ"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "ბოლო წელს"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "წლის წინ"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/kn/lib.po b/l10n/kn/lib.po
index 308114917bc48c6407f97ee063aa870a7498ea84..9b637e4cf9f37ac69179b1a00fd48e04377b80ba 100644
--- a/l10n/kn/lib.po
+++ b/l10n/kn/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-05 02:13+0200\n"
-"PO-Revision-Date: 2013-07-05 00:13+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Kannada (http://www.transifex.com/projects/p/owncloud/language/kn/)\n"
 "MIME-Version: 1.0\n"
@@ -41,27 +41,43 @@ msgstr ""
 msgid "Admin"
 msgstr ""
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr ""
 
-#: files.php:210
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
+#: files.php:226
 msgid "ZIP download is turned off."
 msgstr ""
 
-#: files.php:211
+#: files.php:227
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:212 files.php:245
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:242
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -170,77 +186,81 @@ msgstr ""
 msgid "PostgreSQL username and/or password not valid"
 msgstr ""
 
-#: setup.php:42
+#: setup.php:28
 msgid "Set an admin username."
 msgstr ""
 
-#: setup.php:45
+#: setup.php:31
 msgid "Set an admin password."
 msgstr ""
 
-#: setup.php:198
+#: setup.php:184
 msgid ""
 "Your web server is not yet properly setup to allow files synchronization "
 "because the WebDAV interface seems to be broken."
 msgstr ""
 
-#: setup.php:199
+#: setup.php:185
 #, php-format
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:113
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr ""
 
-#: template.php:114
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr ""
 
-#: template.php:115
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr ""
 
-#: template.php:116
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr ""
 
-#: template.php:117
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr ""
 
-#: template.php:118
+#: template/functions.php:85
 msgid "today"
 msgstr ""
 
-#: template.php:119
+#: template/functions.php:86
 msgid "yesterday"
 msgstr ""
 
-#: template.php:120
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr ""
 
-#: template.php:121
+#: template/functions.php:88
 msgid "last month"
 msgstr ""
 
-#: template.php:122
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr ""
 
-#: template.php:123
+#: template/functions.php:90
 msgid "last year"
 msgstr ""
 
-#: template.php:124
+#: template/functions.php:91
 msgid "years ago"
 msgstr ""
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/ko/lib.po b/l10n/ko/lib.po
index b9b2527be0684f462e8fd34bcd9657fb6cd11b04..720609c125c900a62e660eea885bdf86ba39776e 100644
--- a/l10n/ko/lib.po
+++ b/l10n/ko/lib.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
-"Last-Translator: smallsnail <bjh13579@gmail.com>\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -42,10 +42,20 @@ msgstr "앱"
 msgid "Admin"
 msgstr "관리자"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "내가 관리하는 웹 서비스"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "ZIP 다운로드가 비활성화되었습니다."
@@ -54,15 +64,21 @@ msgstr "ZIP 다운로드가 비활성화되었습니다."
 msgid "Files need to be downloaded one by one."
 msgstr "파일을 개별적으로 다운로드해야 합니다."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "파일로 돌아가기"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "선택한 파일들은 ZIP 파일을 생성하기에 너무 큽니다."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "결정할 수 없음"
 
@@ -190,58 +206,62 @@ msgstr "WebDAV 인터페이스가 제대로 작동하지 않습니다. 웹 서
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "<a href='%s'>설치 가이드</a>를 다시 한 번 확인하십시오."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "ì´ˆ ì „"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1분 전"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d분 전"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1시간 전"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "%d시간 전"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "오늘"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "어제"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d일 전"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "지난 달"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "%d개월 전"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "ìž‘ë…„"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "ë…„ ì „"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/ku_IQ/lib.po b/l10n/ku_IQ/lib.po
index c3c469f9600db7f99e75ce05339ea26caeee4f15..3c562c92d4cf956a6e2aed129955bf0523078154 100644
--- a/l10n/ku_IQ/lib.po
+++ b/l10n/ku_IQ/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-22 06:02+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "به‌رنامه‌كان"
 msgid "Admin"
 msgstr "به‌ڕێوه‌به‌ری سه‌ره‌كی"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "ڕاژه‌ی وێب له‌ژێر چاودێریت دایه"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr ""
@@ -53,15 +63,21 @@ msgstr ""
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -189,58 +205,62 @@ msgstr ""
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr ""
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr ""
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr ""
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr ""
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr ""
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr ""
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr ""
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr ""
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr ""
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr ""
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr ""
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr ""
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/lb/lib.po b/l10n/lb/lib.po
index cf966802a75757a55a08de9b000828a41a046d05..12f02c1dd412b2f969507c883f4dee0b0e7dbb63 100644
--- a/l10n/lb/lib.po
+++ b/l10n/lb/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n"
 "MIME-Version: 1.0\n"
@@ -42,10 +42,20 @@ msgstr "Applikatiounen"
 msgid "Admin"
 msgstr "Admin"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "Web-Servicer ënnert denger Kontroll"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr ""
@@ -54,15 +64,21 @@ msgstr ""
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -190,58 +206,62 @@ msgstr ""
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "Sekonnen hir"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 Minutt hir"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr ""
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "vrun 1 Stonn"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr ""
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "haut"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "gëschter"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr ""
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "Läschte Mount"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr ""
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "Läscht Joer"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "Joren hier"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/lt_LT/lib.po b/l10n/lt_LT/lib.po
index 7885517e31f025cc69be5f15f5df4627555aac65..c91fa67de3c4c49458b28988ac91e7917397f450 100644
--- a/l10n/lt_LT/lib.po
+++ b/l10n/lt_LT/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n"
 "MIME-Version: 1.0\n"
@@ -42,10 +42,20 @@ msgstr "Programos"
 msgid "Admin"
 msgstr "Administravimas"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "jūsų valdomos web paslaugos"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "ZIP atsisiuntimo galimybė yra išjungta."
@@ -54,15 +64,21 @@ msgstr "ZIP atsisiuntimo galimybė yra išjungta."
 msgid "Files need to be downloaded one by one."
 msgstr "Failai turi būti parsiunčiami vienas po kito."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Atgal į Failus"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Pasirinkti failai per dideli archyvavimui į ZIP."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -190,58 +206,62 @@ msgstr ""
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "prieš sekundę"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "Prieš 1 minutę"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "prieš %d minučių"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "prieš 1 valandą"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "prieš %d valandų"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "Å¡iandien"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "vakar"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "prieš %d dienų"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "praeitą mėnesį"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "prieš %d mėnesių"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "praeitais metais"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "prieš metus"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/lv/lib.po b/l10n/lv/lib.po
index fbd234584d2bf1cd79e0210dbf46a38614e73a02..bf2fd831db6badc24cc10c4fae57967b53741935 100644
--- a/l10n/lv/lib.po
+++ b/l10n/lv/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "Lietotnes"
 msgid "Admin"
 msgstr "Administratori"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "tīmekļa servisi tavā varā"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "ZIP lejupielādēšana ir izslēgta."
@@ -53,15 +63,21 @@ msgstr "ZIP lejupielādēšana ir izslēgta."
 msgid "Files need to be downloaded one by one."
 msgstr "Datnes var lejupielādēt tikai katru atsevišķi."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Atpakaļ pie datnēm"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Izvēlētās datnes ir pārāk lielas, lai izveidotu zip datni."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "nevarēja noteikt"
 
@@ -189,58 +205,62 @@ msgstr "Jūsu serveris vēl nav pareizi iestatīts, lai ļautu sinhronizēt datn
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Lūdzu, vēlreiz pārbaudiet <a href='%s'>instalēšanas palīdzību</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "sekundes atpakaļ"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "pirms 1 minūtes"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "pirms %d minūtēm"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "pirms 1 stundas"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "pirms %d stundām"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "Å¡odien"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "vakar"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "pirms %d dienām"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "pagājušajā mēnesī"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "pirms %d mēnešiem"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "gājušajā gadā"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "gadus atpakaļ"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/mk/lib.po b/l10n/mk/lib.po
index 2a9f839d23b2636c7549dad64a27789b1f5f5d02..836a3490761fb9829c43276101f579f31fa84cbe 100644
--- a/l10n/mk/lib.po
+++ b/l10n/mk/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "Аппликации"
 msgid "Admin"
 msgstr "Админ"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "веб сервиси под Ваша контрола"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "Преземање во ZIP е исклучено"
@@ -53,15 +63,21 @@ msgstr "Преземање во ZIP е исклучено"
 msgid "Files need to be downloaded one by one."
 msgstr "Датотеките треба да се симнат една по една."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Назад кон датотеки"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Избраните датотеки се преголеми за да се генерира zip."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -189,58 +205,62 @@ msgstr ""
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "пред секунди"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "пред 1 минута"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "пред %d минути"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "пред 1 час"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "пред %d часови"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "денеска"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "вчера"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "пред %d денови"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "минатиот месец"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "пред %d месеци"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "минатата година"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "пред години"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/ml_IN/lib.po b/l10n/ml_IN/lib.po
index d4532ad9a440e2e69629474194a918867afd7efd..8590f74b6742294a647f0a4157fde0a362e14cc6 100644
--- a/l10n/ml_IN/lib.po
+++ b/l10n/ml_IN/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-06 02:02+0200\n"
-"PO-Revision-Date: 2013-07-05 08:25+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Malayalam (India) (http://www.transifex.com/projects/p/owncloud/language/ml_IN/)\n"
 "MIME-Version: 1.0\n"
@@ -41,27 +41,43 @@ msgstr ""
 msgid "Admin"
 msgstr ""
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr ""
 
-#: files.php:210
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
+#: files.php:226
 msgid "ZIP download is turned off."
 msgstr ""
 
-#: files.php:211
+#: files.php:227
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:212 files.php:245
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:242
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -170,77 +186,81 @@ msgstr ""
 msgid "PostgreSQL username and/or password not valid"
 msgstr ""
 
-#: setup.php:42
+#: setup.php:28
 msgid "Set an admin username."
 msgstr ""
 
-#: setup.php:45
+#: setup.php:31
 msgid "Set an admin password."
 msgstr ""
 
-#: setup.php:198
+#: setup.php:184
 msgid ""
 "Your web server is not yet properly setup to allow files synchronization "
 "because the WebDAV interface seems to be broken."
 msgstr ""
 
-#: setup.php:199
+#: setup.php:185
 #, php-format
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:113
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr ""
 
-#: template.php:114
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr ""
 
-#: template.php:115
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr ""
 
-#: template.php:116
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr ""
 
-#: template.php:117
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr ""
 
-#: template.php:118
+#: template/functions.php:85
 msgid "today"
 msgstr ""
 
-#: template.php:119
+#: template/functions.php:86
 msgid "yesterday"
 msgstr ""
 
-#: template.php:120
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr ""
 
-#: template.php:121
+#: template/functions.php:88
 msgid "last month"
 msgstr ""
 
-#: template.php:122
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr ""
 
-#: template.php:123
+#: template/functions.php:90
 msgid "last year"
 msgstr ""
 
-#: template.php:124
+#: template/functions.php:91
 msgid "years ago"
 msgstr ""
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/ms_MY/lib.po b/l10n/ms_MY/lib.po
index c5de62287d44c8f75826e7ee152c0418e2322961..d0deb26d3fa177b41db37b282a6449b5818fcfbd 100644
--- a/l10n/ms_MY/lib.po
+++ b/l10n/ms_MY/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "Aplikasi"
 msgid "Admin"
 msgstr "Admin"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "Perkhidmatan web di bawah kawalan anda"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr ""
@@ -53,15 +63,21 @@ msgstr ""
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -189,58 +205,62 @@ msgstr ""
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr ""
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr ""
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr ""
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr ""
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr ""
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr ""
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr ""
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr ""
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr ""
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr ""
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr ""
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr ""
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/my_MM/lib.po b/l10n/my_MM/lib.po
index 885131eea59dce1c62dac32a5a5b9aa514ca5a57..5b05b4a9110471f39781331bf315ff467a7515a4 100644
--- a/l10n/my_MM/lib.po
+++ b/l10n/my_MM/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Burmese (Myanmar) (http://www.transifex.com/projects/p/owncloud/language/my_MM/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "Apps"
 msgid "Admin"
 msgstr "အက်ဒမင်"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "သင်၏ထိန်းချုပ်မှု့အောက်တွင်ရှိသော Web services"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "ZIP ဒေါင်းလုတ်ကိုပိတ်ထားသည်"
@@ -53,15 +63,21 @@ msgstr "ZIP ဒေါင်းလုတ်ကိုပိတ်ထားသည
 msgid "Files need to be downloaded one by one."
 msgstr "ဖိုင်များသည် တစ်ခုပြီး တစ်ခုဒေါင်းလုတ်ချရန်လိုအပ်သည်"
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "ဖိုင်သို့ပြန်သွားမည်"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "zip ဖိုင်အဖြစ်ပြုလုပ်ရန် ရွေးချယ်ထားသောဖိုင်များသည် အရမ်းကြီးလွန်းသည်"
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "မဆုံးဖြတ်နိုင်ပါ။"
 
@@ -189,58 +205,62 @@ msgstr ""
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "စက္ကန့်အနည်းငယ်က"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "၁ မိနစ်အရင်က"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d မိနစ်အရင်က"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "၁ နာရီ အရင်က"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "%d နာရီအရင်က"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "ယနေ့"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "မနေ့က"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d ရက် အရင်က"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "ပြီးခဲ့သောလ"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "%d လအရင်က"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "မနှစ်က"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "နှစ် အရင်က"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/nb_NO/core.po b/l10n/nb_NO/core.po
index 69addf2420ee74d88c77343b101e5fa80e0015fa..76f78665fa846431251b55ad3d3e757a07b75416 100644
--- a/l10n/nb_NO/core.po
+++ b/l10n/nb_NO/core.po
@@ -3,13 +3,14 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# Stein-Aksel Basma <stabasm@hotmail.com>, 2013
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:04+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-23 21:56+0000\n"
+"Last-Translator: Stein-Aksel Basma <stabasm@hotmail.com>\n"
 "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -20,7 +21,7 @@ msgstr ""
 #: ajax/share.php:97
 #, php-format
 msgid "%s shared »%s« with you"
-msgstr ""
+msgstr "%s delte »%s« med deg"
 
 #: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25
 msgid "Category type not provided."
@@ -33,7 +34,7 @@ msgstr "Ingen kategorier å legge til?"
 #: ajax/vcategories/add.php:37
 #, php-format
 msgid "This category already exists: %s"
-msgstr ""
+msgstr "Denne kategorien finnes allerede: %s"
 
 #: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
 #: ajax/vcategories/favorites.php:24
@@ -225,8 +226,8 @@ msgstr ""
 #: js/oc-vcategories.js:14 js/oc-vcategories.js:80 js/oc-vcategories.js:95
 #: js/oc-vcategories.js:110 js/oc-vcategories.js:125 js/oc-vcategories.js:136
 #: js/oc-vcategories.js:172 js/oc-vcategories.js:189 js/oc-vcategories.js:195
-#: js/oc-vcategories.js:199 js/share.js:136 js/share.js:143 js/share.js:625
-#: js/share.js:637
+#: js/oc-vcategories.js:199 js/share.js:129 js/share.js:142 js/share.js:149
+#: js/share.js:631 js/share.js:643
 msgid "Error"
 msgstr "Feil"
 
@@ -240,129 +241,129 @@ msgstr ""
 
 #: js/share.js:30 js/share.js:45 js/share.js:87
 msgid "Shared"
-msgstr ""
+msgstr "Delt"
 
 #: js/share.js:90
 msgid "Share"
 msgstr "Del"
 
-#: js/share.js:125 js/share.js:665
+#: js/share.js:131 js/share.js:671
 msgid "Error while sharing"
 msgstr "Feil under deling"
 
-#: js/share.js:136
+#: js/share.js:142
 msgid "Error while unsharing"
 msgstr ""
 
-#: js/share.js:143
+#: js/share.js:149
 msgid "Error while changing permissions"
 msgstr ""
 
-#: js/share.js:152
+#: js/share.js:158
 msgid "Shared with you and the group {group} by {owner}"
 msgstr ""
 
-#: js/share.js:154
+#: js/share.js:160
 msgid "Shared with you by {owner}"
-msgstr ""
+msgstr "Delt med deg av {owner}"
 
-#: js/share.js:177
+#: js/share.js:183
 msgid "Share with"
 msgstr "Del med"
 
-#: js/share.js:182
+#: js/share.js:188
 msgid "Share with link"
 msgstr "Del med link"
 
-#: js/share.js:185
+#: js/share.js:191
 msgid "Password protect"
 msgstr "Passordbeskyttet"
 
-#: js/share.js:187 templates/installation.php:54 templates/login.php:26
+#: js/share.js:193 templates/installation.php:54 templates/login.php:26
 msgid "Password"
 msgstr "Passord"
 
-#: js/share.js:192
+#: js/share.js:198
 msgid "Allow Public Upload"
 msgstr ""
 
-#: js/share.js:196
+#: js/share.js:202
 msgid "Email link to person"
 msgstr ""
 
-#: js/share.js:197
+#: js/share.js:203
 msgid "Send"
 msgstr "Send"
 
-#: js/share.js:202
+#: js/share.js:208
 msgid "Set expiration date"
 msgstr "Set utløpsdato"
 
-#: js/share.js:203
+#: js/share.js:209
 msgid "Expiration date"
 msgstr "Utløpsdato"
 
-#: js/share.js:235
+#: js/share.js:241
 msgid "Share via email:"
 msgstr "Del på epost"
 
-#: js/share.js:237
+#: js/share.js:243
 msgid "No people found"
 msgstr "Ingen personer funnet"
 
-#: js/share.js:275
+#: js/share.js:281
 msgid "Resharing is not allowed"
 msgstr ""
 
-#: js/share.js:311
+#: js/share.js:317
 msgid "Shared in {item} with {user}"
 msgstr ""
 
-#: js/share.js:332
+#: js/share.js:338
 msgid "Unshare"
 msgstr "Avslutt deling"
 
-#: js/share.js:344
+#: js/share.js:350
 msgid "can edit"
 msgstr "kan endre"
 
-#: js/share.js:346
+#: js/share.js:352
 msgid "access control"
 msgstr "tilgangskontroll"
 
-#: js/share.js:349
+#: js/share.js:355
 msgid "create"
 msgstr "opprett"
 
-#: js/share.js:352
+#: js/share.js:358
 msgid "update"
 msgstr "oppdater"
 
-#: js/share.js:355
+#: js/share.js:361
 msgid "delete"
 msgstr "slett"
 
-#: js/share.js:358
+#: js/share.js:364
 msgid "share"
 msgstr "del"
 
-#: js/share.js:392 js/share.js:612
+#: js/share.js:398 js/share.js:618
 msgid "Password protected"
 msgstr "Passordbeskyttet"
 
-#: js/share.js:625
+#: js/share.js:631
 msgid "Error unsetting expiration date"
 msgstr ""
 
-#: js/share.js:637
+#: js/share.js:643
 msgid "Error setting expiration date"
 msgstr "Kan ikke sette utløpsdato"
 
-#: js/share.js:652
+#: js/share.js:658
 msgid "Sending ..."
 msgstr "Sender..."
 
-#: js/share.js:663
+#: js/share.js:669
 msgid "Email sent"
 msgstr "E-post sendt"
 
@@ -474,7 +475,7 @@ msgid ""
 "View it: %s\n"
 "\n"
 "Cheers!"
-msgstr ""
+msgstr "Hei der.⏎\n⏎\nVille bare gjøre deg oppmerksom på at %s delte %s med deg.⏎\nVis den: %s⏎\n⏎\nVI ses!"
 
 #: templates/edit_categories_dialog.php:4
 msgid "Edit categories"
@@ -625,4 +626,4 @@ msgstr "neste"
 #: templates/update.php:3
 #, php-format
 msgid "Updating ownCloud to version %s, this may take a while."
-msgstr ""
+msgstr "Oppdaterer ownCloud til versjon %s, dette kan ta en stund."
diff --git a/l10n/nb_NO/lib.po b/l10n/nb_NO/lib.po
index 39a99a6a77529733095aa73b8d7ade6548193128..771095599f9e812235fad31fa43320ee9aeb2e35 100644
--- a/l10n/nb_NO/lib.po
+++ b/l10n/nb_NO/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "Apper"
 msgid "Admin"
 msgstr "Admin"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "web tjenester du kontrollerer"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "ZIP-nedlasting av avslått"
@@ -53,15 +63,21 @@ msgstr "ZIP-nedlasting av avslått"
 msgid "Files need to be downloaded one by one."
 msgstr "Filene må lastes ned en om gangen"
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Tilbake til filer"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "De valgte filene er for store til å kunne generere ZIP-fil"
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -189,58 +205,62 @@ msgstr "Din nettservev er ikke konfigurert korrekt for filsynkronisering. WebDAV
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Vennligst dobbelsjekk <a href='%s'>installasjonsguiden</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "sekunder siden"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 minutt siden"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d minutter siden"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1 time siden"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "%d timer siden"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "i dag"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "i går"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d dager siden"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "forrige måned"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "%d måneder siden"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "forrige år"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "Ã¥r siden"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/ne/lib.po b/l10n/ne/lib.po
index 37489e0ed6462e6fd40952de290d884bb9e05a88..5445c8e816c572a9e060527e30a73e69ea87adac 100644
--- a/l10n/ne/lib.po
+++ b/l10n/ne/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-05 02:13+0200\n"
-"PO-Revision-Date: 2013-07-05 00:13+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Nepali (http://www.transifex.com/projects/p/owncloud/language/ne/)\n"
 "MIME-Version: 1.0\n"
@@ -41,27 +41,43 @@ msgstr ""
 msgid "Admin"
 msgstr ""
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr ""
 
-#: files.php:210
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
+#: files.php:226
 msgid "ZIP download is turned off."
 msgstr ""
 
-#: files.php:211
+#: files.php:227
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:212 files.php:245
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:242
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -170,77 +186,81 @@ msgstr ""
 msgid "PostgreSQL username and/or password not valid"
 msgstr ""
 
-#: setup.php:42
+#: setup.php:28
 msgid "Set an admin username."
 msgstr ""
 
-#: setup.php:45
+#: setup.php:31
 msgid "Set an admin password."
 msgstr ""
 
-#: setup.php:198
+#: setup.php:184
 msgid ""
 "Your web server is not yet properly setup to allow files synchronization "
 "because the WebDAV interface seems to be broken."
 msgstr ""
 
-#: setup.php:199
+#: setup.php:185
 #, php-format
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:113
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr ""
 
-#: template.php:114
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr ""
 
-#: template.php:115
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr ""
 
-#: template.php:116
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr ""
 
-#: template.php:117
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr ""
 
-#: template.php:118
+#: template/functions.php:85
 msgid "today"
 msgstr ""
 
-#: template.php:119
+#: template/functions.php:86
 msgid "yesterday"
 msgstr ""
 
-#: template.php:120
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr ""
 
-#: template.php:121
+#: template/functions.php:88
 msgid "last month"
 msgstr ""
 
-#: template.php:122
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr ""
 
-#: template.php:123
+#: template/functions.php:90
 msgid "last year"
 msgstr ""
 
-#: template.php:124
+#: template/functions.php:91
 msgid "years ago"
 msgstr ""
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/nl/lib.po b/l10n/nl/lib.po
index f301504ebffa79ecd7ba49b4407cd6fe64965caf..9f001941d0f6a77de98c4d6f9a748f5dd6c960ab 100644
--- a/l10n/nl/lib.po
+++ b/l10n/nl/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
 "MIME-Version: 1.0\n"
@@ -42,10 +42,20 @@ msgstr "Apps"
 msgid "Admin"
 msgstr "Beheerder"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "Webdiensten in eigen beheer"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "ZIP download is uitgeschakeld."
@@ -54,15 +64,21 @@ msgstr "ZIP download is uitgeschakeld."
 msgid "Files need to be downloaded one by one."
 msgstr "Bestanden moeten één voor één worden gedownload."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Terug naar bestanden"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "De geselecteerde bestanden zijn te groot om een zip bestand te maken."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "kon niet worden vastgesteld"
 
@@ -190,58 +206,62 @@ msgstr "Uw webserver is nog niet goed ingesteld voor bestandssynchronisatie omda
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Controleer de <a href='%s'>installatiehandleiding</a> goed."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "seconden geleden"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 minuut geleden"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d minuten geleden"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1 uur geleden"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "%d uren geleden"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "vandaag"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "gisteren"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d dagen geleden"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "vorige maand"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "%d maanden geleden"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "vorig jaar"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "jaar geleden"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/nn_NO/lib.po b/l10n/nn_NO/lib.po
index 46d91a7e9c07fbe74fbc02a2c83782a29fbdd64c..3ca8a975f7a5ac5c648d81d21996d663d14d69b5 100644
--- a/l10n/nn_NO/lib.po
+++ b/l10n/nn_NO/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n"
 "MIME-Version: 1.0\n"
@@ -42,10 +42,20 @@ msgstr "Program"
 msgid "Admin"
 msgstr "Administrer"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "Vev tjenester under din kontroll"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr ""
@@ -54,15 +64,21 @@ msgstr ""
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -190,58 +206,62 @@ msgstr "Tenaren din er ikkje enno rett innstilt til å tilby filsynkronisering s
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Ver vennleg og dobbeltsjekk <a href='%s'>installasjonsrettleiinga</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "sekund sidan"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 minutt sidan"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr ""
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1 time sidan"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr ""
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "i dag"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "i går"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr ""
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "førre månad"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr ""
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "i fjor"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "Ã¥r sidan"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/oc/lib.po b/l10n/oc/lib.po
index 09900debe20d575a2e09fde3dd9cfe96454b4c3f..9fd1bfbc3437aaea617023247d8449c623729406 100644
--- a/l10n/oc/lib.po
+++ b/l10n/oc/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-22 06:02+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "Apps"
 msgid "Admin"
 msgstr "Admin"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "Services web jos ton contraròtle"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "Avalcargar los ZIP es inactiu."
@@ -53,15 +63,21 @@ msgstr "Avalcargar los ZIP es inactiu."
 msgid "Files need to be downloaded one by one."
 msgstr "Los fichièrs devan èsser avalcargats un per un."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Torna cap als fichièrs"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -189,58 +205,62 @@ msgstr ""
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "segonda a"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 minuta a"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d minutas a"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr ""
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr ""
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "uèi"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "ièr"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d jorns a"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "mes passat"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr ""
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "an passat"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "ans a"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/pl/lib.po b/l10n/pl/lib.po
index 3aadc964d2ee06bf8662430ae5ca10f03844f922..69554bc77cf01fa0b1af82463eab2beb9fe2904c 100644
--- a/l10n/pl/lib.po
+++ b/l10n/pl/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
 "MIME-Version: 1.0\n"
@@ -42,10 +42,20 @@ msgstr "Aplikacje"
 msgid "Admin"
 msgstr "Administrator"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "Kontrolowane serwisy"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "Pobieranie ZIP jest wyłączone."
@@ -54,15 +64,21 @@ msgstr "Pobieranie ZIP jest wyłączone."
 msgid "Files need to be downloaded one by one."
 msgstr "Pliki muszą zostać pobrane pojedynczo."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Wróć do plików"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Wybrane pliki są zbyt duże, aby wygenerować plik zip."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "nie może zostać znaleziony"
 
@@ -190,58 +206,62 @@ msgstr "Serwer internetowy nie jest jeszcze poprawnie skonfigurowany, aby umożl
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Sprawdź ponownie <a href='%s'>przewodniki instalacji</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "sekund temu"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 minutÄ™ temu"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d minut temu"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1 godzinÄ™ temu"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "%d godzin temu"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "dziÅ›"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "wczoraj"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d dni temu"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "w zeszłym miesiącu"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "%d miesiecy temu"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "w zeszłym roku"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "lat temu"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/pt_BR/lib.po b/l10n/pt_BR/lib.po
index b64828ff2bae172a1e3e40dd1c3fdefd397960cf..15f63ba0d35f8fc45e2878b49aa8f2aba2e774c1 100644
--- a/l10n/pt_BR/lib.po
+++ b/l10n/pt_BR/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
 "MIME-Version: 1.0\n"
@@ -42,10 +42,20 @@ msgstr "Aplicações"
 msgid "Admin"
 msgstr "Admin"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "serviços web sob seu controle"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "Download ZIP está desligado."
@@ -54,15 +64,21 @@ msgstr "Download ZIP está desligado."
 msgid "Files need to be downloaded one by one."
 msgstr "Arquivos precisam ser baixados um de cada vez."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Voltar para Arquivos"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Arquivos selecionados são muito grandes para gerar arquivo zip."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "não pôde ser determinado"
 
@@ -190,58 +206,62 @@ msgstr "Seu servidor web não está configurado corretamente para permitir sincr
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Por favor, confira os <a href='%s'>guias de instalação</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "segundos atrás"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 minuto atrás"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d minutos atrás"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1 hora atrás"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "%d horas atrás"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "hoje"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "ontem"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d dias atrás"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "último mês"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "%d meses atrás"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "último ano"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "anos atrás"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/pt_BR/settings.po b/l10n/pt_BR/settings.po
index 88fd0f853b157d47c5ee0d45d1fc6b8c7c7635c1..d970d4b2083bfd9fbc79587a0e47cd8029f70ff0 100644
--- a/l10n/pt_BR/settings.po
+++ b/l10n/pt_BR/settings.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:55+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-23 11:20+0000\n"
+"Last-Translator: Flávio Veras <flaviove@gmail.com>\n"
 "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -277,12 +277,12 @@ msgstr "Permitir que usuários compartilhem itens com o público usando links"
 
 #: templates/admin.php:153
 msgid "Allow public uploads"
-msgstr ""
+msgstr "Permitir envio público"
 
 #: templates/admin.php:154
 msgid ""
 "Allow users to enable others to upload into their publicly shared folders"
-msgstr ""
+msgstr "Permitir que usuários deem permissão a outros para enviarem arquivios para suas pastas compartilhadas publicamente"
 
 #: templates/admin.php:162
 msgid "Allow resharing"
diff --git a/l10n/pt_PT/lib.po b/l10n/pt_PT/lib.po
index b3c5a1d3c7c0b7d640ffaa6ee58dad73fe27581a..9e69e8e33c952adacf4f99c01c98870e104900b3 100644
--- a/l10n/pt_PT/lib.po
+++ b/l10n/pt_PT/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
 "MIME-Version: 1.0\n"
@@ -42,10 +42,20 @@ msgstr "Aplicações"
 msgid "Admin"
 msgstr "Admin"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "serviços web sob o seu controlo"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "Descarregamento em ZIP está desligado."
@@ -54,15 +64,21 @@ msgstr "Descarregamento em ZIP está desligado."
 msgid "Files need to be downloaded one by one."
 msgstr "Os ficheiros precisam de ser descarregados um por um."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Voltar a Ficheiros"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Os ficheiros seleccionados são grandes demais para gerar um ficheiro zip."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "Não foi possível determinar"
 
@@ -190,58 +206,62 @@ msgstr "O seu servidor web não está configurado correctamente para autorizar s
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Por favor verifique <a href='%s'>installation guides</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "Minutos atrás"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "Há 1 minuto"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "há %d minutos"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "Há 1 horas"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "Há %d horas"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "hoje"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "ontem"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "há %d dias"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "ultímo mês"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "Há %d meses atrás"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "ano passado"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "anos atrás"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/ro/lib.po b/l10n/ro/lib.po
index 0e837673874429e76b100272b588153c6ee44198..9dcc447b2b211bd8e835d050495be5fb38f7a63c 100644
--- a/l10n/ro/lib.po
+++ b/l10n/ro/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "Aplicații"
 msgid "Admin"
 msgstr "Admin"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "servicii web controlate de tine"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "Descărcarea ZIP este dezactivată."
@@ -53,15 +63,21 @@ msgstr "Descărcarea ZIP este dezactivată."
 msgid "Files need to be downloaded one by one."
 msgstr "Fișierele trebuie descărcate unul câte unul."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Înapoi la fișiere"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Fișierele selectate sunt prea mari pentru a genera un fișier zip."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "nu poate fi determinat"
 
@@ -189,58 +205,62 @@ msgstr "Serverul de web nu este încă setat corespunzător pentru a permite sin
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Vă rugăm să verificați <a href='%s'>ghiduri de instalare</ a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "secunde în urmă"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 minut în urmă"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d minute în urmă"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "Acum o ora"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "%d ore in urma"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "astăzi"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "ieri"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d zile în urmă"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "ultima lună"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "%d luni in urma"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "ultimul an"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "ani în urmă"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/ru/lib.po b/l10n/ru/lib.po
index 79294a677a85d6c895ca7673504268428450ba8e..36029f07eece27ade03642fa3030165cd38b68f4 100644
--- a/l10n/ru/lib.po
+++ b/l10n/ru/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n"
 "MIME-Version: 1.0\n"
@@ -42,10 +42,20 @@ msgstr "Приложения"
 msgid "Admin"
 msgstr "Admin"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "веб-сервисы под вашим управлением"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "ZIP-скачивание отключено."
@@ -54,15 +64,21 @@ msgstr "ZIP-скачивание отключено."
 msgid "Files need to be downloaded one by one."
 msgstr "Файлы должны быть загружены по одному."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Назад к файлам"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Выбранные файлы слишком велики, чтобы создать zip файл."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "Невозможно установить"
 
@@ -190,58 +206,62 @@ msgstr "Ваш веб сервер до сих пор не настроен пр
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Пожалуйста, дважды просмотрите <a href='%s'>инструкции по установке</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "несколько секунд назад"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 минуту назад"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d минут назад"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "час назад"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "%d часов назад"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "сегодня"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "вчера"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d дней назад"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "в прошлом месяце"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "%d месяцев назад"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "в прошлом году"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "несколько лет назад"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/si_LK/lib.po b/l10n/si_LK/lib.po
index ee2f5a76fa736b3f07d6203697f710286f3a01fd..f6c17bac2d5b2af402e95d0302dd05ed2e761424 100644
--- a/l10n/si_LK/lib.po
+++ b/l10n/si_LK/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "යෙදුම්"
 msgid "Admin"
 msgstr "පරිපාලක"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "ඔබට පාලනය කළ හැකි වෙබ් සේවාවන්"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "ZIP භාගත කිරීම් අක්‍රියයි"
@@ -53,15 +63,21 @@ msgstr "ZIP භාගත කිරීම් අක්‍රියයි"
 msgid "Files need to be downloaded one by one."
 msgstr "ගොනු එකින් එක භාගත යුතුයි"
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "ගොනු වෙතට නැවත යන්න"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "තෝරාගත් ගොනු ZIP ගොනුවක් තැනීමට විශාල වැඩිය."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -189,58 +205,62 @@ msgstr ""
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "තත්පරයන්ට පෙර"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 මිනිත්තුවකට පෙර"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d මිනිත්තුවන්ට පෙර"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr ""
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr ""
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "අද"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "ඊයේ"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d දිනකට පෙර"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "පෙර මාසයේ"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr ""
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "පෙර අවුරුද්දේ"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "අවුරුදු කීපයකට පෙර"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/sk/lib.po b/l10n/sk/lib.po
index d1f1b336f10d5b054111c33d4e18a670d76bfdd2..9d5bd19be2dfbeaa2089718eb79d4c3bb92e2f71 100644
--- a/l10n/sk/lib.po
+++ b/l10n/sk/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-05 02:13+0200\n"
-"PO-Revision-Date: 2013-07-05 00:13+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Slovak (http://www.transifex.com/projects/p/owncloud/language/sk/)\n"
 "MIME-Version: 1.0\n"
@@ -41,27 +41,43 @@ msgstr ""
 msgid "Admin"
 msgstr ""
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr ""
 
-#: files.php:210
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
+#: files.php:226
 msgid "ZIP download is turned off."
 msgstr ""
 
-#: files.php:211
+#: files.php:227
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:212 files.php:245
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:242
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -170,77 +186,81 @@ msgstr ""
 msgid "PostgreSQL username and/or password not valid"
 msgstr ""
 
-#: setup.php:42
+#: setup.php:28
 msgid "Set an admin username."
 msgstr ""
 
-#: setup.php:45
+#: setup.php:31
 msgid "Set an admin password."
 msgstr ""
 
-#: setup.php:198
+#: setup.php:184
 msgid ""
 "Your web server is not yet properly setup to allow files synchronization "
 "because the WebDAV interface seems to be broken."
 msgstr ""
 
-#: setup.php:199
+#: setup.php:185
 #, php-format
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:113
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr ""
 
-#: template.php:114
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr ""
 
-#: template.php:115
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr ""
 
-#: template.php:116
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr ""
 
-#: template.php:117
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr ""
 
-#: template.php:118
+#: template/functions.php:85
 msgid "today"
 msgstr ""
 
-#: template.php:119
+#: template/functions.php:86
 msgid "yesterday"
 msgstr ""
 
-#: template.php:120
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr ""
 
-#: template.php:121
+#: template/functions.php:88
 msgid "last month"
 msgstr ""
 
-#: template.php:122
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr ""
 
-#: template.php:123
+#: template/functions.php:90
 msgid "last year"
 msgstr ""
 
-#: template.php:124
+#: template/functions.php:91
 msgid "years ago"
 msgstr ""
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/sk_SK/lib.po b/l10n/sk_SK/lib.po
index 722ff92de03850ae42b0236fdd2f6e015da6a1f0..804de8e425ca85f016b7aa97669943e366041050 100644
--- a/l10n/sk_SK/lib.po
+++ b/l10n/sk_SK/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
 "MIME-Version: 1.0\n"
@@ -42,10 +42,20 @@ msgstr "Aplikácie"
 msgid "Admin"
 msgstr "Administrátor"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "webové služby pod Vašou kontrolou"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "Sťahovanie súborov ZIP je vypnuté."
@@ -54,15 +64,21 @@ msgstr "Sťahovanie súborov ZIP je vypnuté."
 msgid "Files need to be downloaded one by one."
 msgstr "Súbory musia byť nahrávané jeden za druhým."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Späť na súbory"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Zvolené súbory sú príliš veľké na vygenerovanie zip súboru."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "nedá sa zistiť"
 
@@ -190,58 +206,62 @@ msgstr "Váš webový server nie je správne nastavený na synchronizáciu, pret
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Prosím skontrolujte <a href='%s'>inštalačnú príručku</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "pred sekundami"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "pred minútou"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "pred %d minútami"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "Pred 1 hodinou"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "Pred %d hodinami."
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "dnes"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "včera"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "pred %d dňami"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "minulý mesiac"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "Pred %d mesiacmi."
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "minulý rok"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "pred rokmi"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/sl/lib.po b/l10n/sl/lib.po
index 08808a8af7c26347d9322b85444d25f5a9b28248..1c5ae53da77251e827a5826e7eeeea7c32085f8a 100644
--- a/l10n/sl/lib.po
+++ b/l10n/sl/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
 "MIME-Version: 1.0\n"
@@ -42,10 +42,20 @@ msgstr "Programi"
 msgid "Admin"
 msgstr "Skrbništvo"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "spletne storitve pod vašim nadzorom"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "Prejemanje datotek v paketu ZIP je onemogočeno."
@@ -54,15 +64,21 @@ msgstr "Prejemanje datotek v paketu ZIP je onemogočeno."
 msgid "Files need to be downloaded one by one."
 msgstr "Datoteke je mogoče prejeti le posamično."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Nazaj na datoteke"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Izbrane datoteke so prevelike za ustvarjanje datoteke arhiva zip."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "ni mogoče določiti"
 
@@ -190,58 +206,62 @@ msgstr "Spletni stražnik še ni ustrezno nastavljen in ne omogoča usklajevanja
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Preverite <a href='%s'>navodila namestitve</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "pred nekaj sekundami"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "pred minuto"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "pred %d minutami"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "Pred 1 uro"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "Pred %d urami"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "danes"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "včeraj"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "pred %d dnevi"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "zadnji mesec"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "Pred %d meseci"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "lansko leto"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "let nazaj"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/sq/lib.po b/l10n/sq/lib.po
index 67a91dbe0bb6befdc619e4d507ff18e04efac458..35759acbd8e5224c96d27e99a94bee5e4e70e48a 100644
--- a/l10n/sq/lib.po
+++ b/l10n/sq/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Albanian (http://www.transifex.com/projects/p/owncloud/language/sq/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "App"
 msgid "Admin"
 msgstr "Admin"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "shërbime web nën kontrollin tënd"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "Shkarimi i skedarëve ZIP është i çaktivizuar."
@@ -53,15 +63,21 @@ msgstr "Shkarimi i skedarëve ZIP është i çaktivizuar."
 msgid "Files need to be downloaded one by one."
 msgstr "Skedarët duhet të shkarkohen një nga një."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Kthehu tek skedarët"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Skedarët e selektuar janë shumë të mëdhenj për të krijuar një skedar ZIP."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "nuk u vendos dot"
 
@@ -189,58 +205,62 @@ msgstr "Serveri web i juaji nuk është konfiguruar akoma për të lejuar sinkro
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Ju lutemi kontrolloni mirë <a href='%s'>shoqëruesin e instalimit</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "sekonda më parë"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 minutë më parë"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d minuta më parë"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1 orë më parë"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "%d orë më parë"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "sot"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "dje"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d ditë më parë"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "muajin e shkuar"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "%d muaj më parë"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "vitin e shkuar"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "vite më parë"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/sr/lib.po b/l10n/sr/lib.po
index b0fd929fad24e0c96977b501fa118d16c2883789..bd9dcab7ec78d814adf441dcf2ef9ce14b619b19 100644
--- a/l10n/sr/lib.po
+++ b/l10n/sr/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "Апликације"
 msgid "Admin"
 msgstr "Администратор"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "веб сервиси под контролом"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "Преузимање ZIP-а је искључено."
@@ -53,15 +63,21 @@ msgstr "Преузимање ZIP-а је искључено."
 msgid "Files need to be downloaded one by one."
 msgstr "Датотеке морате преузимати једну по једну."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Назад на датотеке"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Изабране датотеке су превелике да бисте направили ZIP датотеку."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "није одређено"
 
@@ -189,58 +205,62 @@ msgstr "Ваш веб сервер тренутно не подржава син
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Погледајте <a href='%s'>водиче за инсталацију</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "пре неколико секунди"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "пре 1 минут"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "пре %d минута"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "Пре једног сата"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "пре %d сата/и"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "данас"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "јуче"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "пре %d дана"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "прошлог месеца"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "пре %d месеца/и"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "прошле године"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "година раније"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/sr@latin/lib.po b/l10n/sr@latin/lib.po
index 13d4f6643e5d5c771fed2635a49e78836424d582..f2a53ab59e9bd46b64a2c5cc8fb8856bfc850e37 100644
--- a/l10n/sr@latin/lib.po
+++ b/l10n/sr@latin/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "Programi"
 msgid "Admin"
 msgstr "Adninistracija"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr ""
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr ""
@@ -53,15 +63,21 @@ msgstr ""
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -189,58 +205,62 @@ msgstr ""
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr ""
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr ""
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr ""
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr ""
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr ""
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr ""
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr ""
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr ""
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr ""
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr ""
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr ""
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr ""
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/sv/lib.po b/l10n/sv/lib.po
index 3e637ac9076b67c14769788c001bf52ddb3a7822..4c06773ff196da2ebbc4ed96bd37177666c3c51b 100644
--- a/l10n/sv/lib.po
+++ b/l10n/sv/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n"
 "MIME-Version: 1.0\n"
@@ -42,10 +42,20 @@ msgstr "Program"
 msgid "Admin"
 msgstr "Admin"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "webbtjänster under din kontroll"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "Nerladdning av ZIP är avstängd."
@@ -54,15 +64,21 @@ msgstr "Nerladdning av ZIP är avstängd."
 msgid "Files need to be downloaded one by one."
 msgstr "Filer laddas ner en åt gången."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Tillbaka till Filer"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Valda filer är för stora för att skapa zip-fil."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "kunde inte bestämmas"
 
@@ -190,58 +206,62 @@ msgstr "Din webbserver är inte korrekt konfigurerad för att tillåta filsynkro
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Var god kontrollera <a href='%s'>installationsguiden</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "sekunder sedan"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 minut sedan"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d minuter sedan"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1 timme sedan"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "%d timmar sedan"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "i dag"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "i går"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d dagar sedan"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "förra månaden"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "%d månader sedan"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "förra året"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "Ã¥r sedan"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/sw_KE/lib.po b/l10n/sw_KE/lib.po
index cf3d110e8eb3765c2e38597e5272b72ed91da91a..5f0afb54abac7d50f8d52381fba7432ebb6b2a24 100644
--- a/l10n/sw_KE/lib.po
+++ b/l10n/sw_KE/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-05 02:13+0200\n"
-"PO-Revision-Date: 2013-07-05 00:13+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Swahili (Kenya) (http://www.transifex.com/projects/p/owncloud/language/sw_KE/)\n"
 "MIME-Version: 1.0\n"
@@ -41,27 +41,43 @@ msgstr ""
 msgid "Admin"
 msgstr ""
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr ""
 
-#: files.php:210
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
+#: files.php:226
 msgid "ZIP download is turned off."
 msgstr ""
 
-#: files.php:211
+#: files.php:227
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:212 files.php:245
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:242
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -170,77 +186,81 @@ msgstr ""
 msgid "PostgreSQL username and/or password not valid"
 msgstr ""
 
-#: setup.php:42
+#: setup.php:28
 msgid "Set an admin username."
 msgstr ""
 
-#: setup.php:45
+#: setup.php:31
 msgid "Set an admin password."
 msgstr ""
 
-#: setup.php:198
+#: setup.php:184
 msgid ""
 "Your web server is not yet properly setup to allow files synchronization "
 "because the WebDAV interface seems to be broken."
 msgstr ""
 
-#: setup.php:199
+#: setup.php:185
 #, php-format
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:113
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr ""
 
-#: template.php:114
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr ""
 
-#: template.php:115
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr ""
 
-#: template.php:116
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr ""
 
-#: template.php:117
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr ""
 
-#: template.php:118
+#: template/functions.php:85
 msgid "today"
 msgstr ""
 
-#: template.php:119
+#: template/functions.php:86
 msgid "yesterday"
 msgstr ""
 
-#: template.php:120
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr ""
 
-#: template.php:121
+#: template/functions.php:88
 msgid "last month"
 msgstr ""
 
-#: template.php:122
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr ""
 
-#: template.php:123
+#: template/functions.php:90
 msgid "last year"
 msgstr ""
 
-#: template.php:124
+#: template/functions.php:91
 msgid "years ago"
 msgstr ""
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/ta_LK/lib.po b/l10n/ta_LK/lib.po
index 65dcf5e617bf692b7cc45018e4c41e92d6ed11ef..b4f5cc473a7ee8d396773c2d203cc88c829d0bd8 100644
--- a/l10n/ta_LK/lib.po
+++ b/l10n/ta_LK/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "செயலிகள்"
 msgid "Admin"
 msgstr "நிர்வாகம்"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "வலைய சேவைகள் உங்களுடைய கட்டுப்பாட்டின் கீழ் உள்ளது"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "வீசொலிப் பூட்டு பதிவிறக்கம் நிறுத்தப்பட்டுள்ளது."
@@ -53,15 +63,21 @@ msgstr "வீசொலிப் பூட்டு பதிவிறக்க
 msgid "Files need to be downloaded one by one."
 msgstr "கோப்புகள்ஒன்றன் பின் ஒன்றாக பதிவிறக்கப்படவேண்டும்."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "கோப்புகளுக்கு செல்க"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "வீ சொலிக் கோப்புகளை உருவாக்குவதற்கு தெரிவுசெய்யப்பட்ட கோப்புகள் மிகப்பெரியவை"
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -189,58 +205,62 @@ msgstr ""
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "செக்கன்களுக்கு முன்"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 நிமிடத்திற்கு முன் "
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d நிமிடங்களுக்கு முன்"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1 மணித்தியாலத்திற்கு முன்"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "%d மணித்தியாலத்திற்கு முன்"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "இன்று"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "நேற்று"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d நாட்களுக்கு முன்"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "கடந்த மாதம்"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "%d மாதத்திற்கு முன்"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "கடந்த வருடம்"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "வருடங்களுக்கு முன்"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/te/lib.po b/l10n/te/lib.po
index c1517bd461240de9e1522afa77c2f015edb0b1f1..5cb1c2bfb6cc7fec89d72ebe360ca70baa63d0e6 100644
--- a/l10n/te/lib.po
+++ b/l10n/te/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-22 06:02+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Telugu (http://www.transifex.com/projects/p/owncloud/language/te/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr ""
 msgid "Admin"
 msgstr ""
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr ""
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr ""
@@ -53,15 +63,21 @@ msgstr ""
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -189,58 +205,62 @@ msgstr ""
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "క్షణాల క్రితం"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 నిమిషం క్రితం"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr ""
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1 గంట క్రితం"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr ""
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "ఈరోజు"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "నిన్న"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr ""
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "పోయిన నెల"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr ""
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "పోయిన సంవత్సరం"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "సంవత్సరాల క్రితం"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot
index 40103df31a4527d9a7b795317becfa69b1950603..9d3e3ce4c9d825488ff8ae7f0cf9bf943c1f84c3 100644
--- a/l10n/templates/core.pot
+++ b/l10n/templates/core.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -225,8 +225,8 @@ msgstr ""
 #: js/oc-vcategories.js:14 js/oc-vcategories.js:80 js/oc-vcategories.js:95
 #: js/oc-vcategories.js:110 js/oc-vcategories.js:125 js/oc-vcategories.js:136
 #: js/oc-vcategories.js:172 js/oc-vcategories.js:189 js/oc-vcategories.js:195
-#: js/oc-vcategories.js:199 js/share.js:136 js/share.js:143 js/share.js:625
-#: js/share.js:637
+#: js/oc-vcategories.js:199 js/share.js:129 js/share.js:142 js/share.js:149
+#: js/share.js:631 js/share.js:643
 msgid "Error"
 msgstr ""
 
@@ -246,123 +246,123 @@ msgstr ""
 msgid "Share"
 msgstr ""
 
-#: js/share.js:125 js/share.js:665
+#: js/share.js:131 js/share.js:671
 msgid "Error while sharing"
 msgstr ""
 
-#: js/share.js:136
+#: js/share.js:142
 msgid "Error while unsharing"
 msgstr ""
 
-#: js/share.js:143
+#: js/share.js:149
 msgid "Error while changing permissions"
 msgstr ""
 
-#: js/share.js:152
+#: js/share.js:158
 msgid "Shared with you and the group {group} by {owner}"
 msgstr ""
 
-#: js/share.js:154
+#: js/share.js:160
 msgid "Shared with you by {owner}"
 msgstr ""
 
-#: js/share.js:177
+#: js/share.js:183
 msgid "Share with"
 msgstr ""
 
-#: js/share.js:182
+#: js/share.js:188
 msgid "Share with link"
 msgstr ""
 
-#: js/share.js:185
+#: js/share.js:191
 msgid "Password protect"
 msgstr ""
 
-#: js/share.js:187 templates/installation.php:54 templates/login.php:26
+#: js/share.js:193 templates/installation.php:54 templates/login.php:26
 msgid "Password"
 msgstr ""
 
-#: js/share.js:192
+#: js/share.js:198
 msgid "Allow Public Upload"
 msgstr ""
 
-#: js/share.js:196
+#: js/share.js:202
 msgid "Email link to person"
 msgstr ""
 
-#: js/share.js:197
+#: js/share.js:203
 msgid "Send"
 msgstr ""
 
-#: js/share.js:202
+#: js/share.js:208
 msgid "Set expiration date"
 msgstr ""
 
-#: js/share.js:203
+#: js/share.js:209
 msgid "Expiration date"
 msgstr ""
 
-#: js/share.js:235
+#: js/share.js:241
 msgid "Share via email:"
 msgstr ""
 
-#: js/share.js:237
+#: js/share.js:243
 msgid "No people found"
 msgstr ""
 
-#: js/share.js:275
+#: js/share.js:281
 msgid "Resharing is not allowed"
 msgstr ""
 
-#: js/share.js:311
+#: js/share.js:317
 msgid "Shared in {item} with {user}"
 msgstr ""
 
-#: js/share.js:332
+#: js/share.js:338
 msgid "Unshare"
 msgstr ""
 
-#: js/share.js:344
+#: js/share.js:350
 msgid "can edit"
 msgstr ""
 
-#: js/share.js:346
+#: js/share.js:352
 msgid "access control"
 msgstr ""
 
-#: js/share.js:349
+#: js/share.js:355
 msgid "create"
 msgstr ""
 
-#: js/share.js:352
+#: js/share.js:358
 msgid "update"
 msgstr ""
 
-#: js/share.js:355
+#: js/share.js:361
 msgid "delete"
 msgstr ""
 
-#: js/share.js:358
+#: js/share.js:364
 msgid "share"
 msgstr ""
 
-#: js/share.js:392 js/share.js:612
+#: js/share.js:398 js/share.js:618
 msgid "Password protected"
 msgstr ""
 
-#: js/share.js:625
+#: js/share.js:631
 msgid "Error unsetting expiration date"
 msgstr ""
 
-#: js/share.js:637
+#: js/share.js:643
 msgid "Error setting expiration date"
 msgstr ""
 
-#: js/share.js:652
+#: js/share.js:658
 msgid "Sending ..."
 msgstr ""
 
-#: js/share.js:663
+#: js/share.js:669
 msgid "Email sent"
 msgstr ""
 
diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot
index 9a6b77990621af0fd0fe991a5afd6d4eaed89c32..10e875b4aeb9a919f15ec5c42c846c9b19b869c7 100644
--- a/l10n/templates/files.pot
+++ b/l10n/templates/files.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot
index 953fb643767b9375a91e428d25a863515818efb3..11f4fd0ffb71338fabe6939f552f209120c7e869 100644
--- a/l10n/templates/files_encryption.pot
+++ b/l10n/templates/files_encryption.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot
index 8783050a259061094c196b57913ce7df0edd27e9..2ca2c53177c1f31eced6452d616626a3337be64f 100644
--- a/l10n/templates/files_external.pot
+++ b/l10n/templates/files_external.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,7 +17,7 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: js/dropbox.js:7 js/dropbox.js:28 js/google.js:16 js/google.js:34
+#: js/dropbox.js:7 js/dropbox.js:28 js/google.js:8 js/google.js:39
 msgid "Access granted"
 msgstr ""
 
@@ -25,7 +25,7 @@ msgstr ""
 msgid "Error configuring Dropbox storage"
 msgstr ""
 
-#: js/dropbox.js:65 js/google.js:66
+#: js/dropbox.js:65 js/google.js:86
 msgid "Grant access"
 msgstr ""
 
@@ -33,24 +33,24 @@ msgstr ""
 msgid "Please provide a valid Dropbox app key and secret."
 msgstr ""
 
-#: js/google.js:36 js/google.js:93
+#: js/google.js:42 js/google.js:121
 msgid "Error configuring Google Drive storage"
 msgstr ""
 
-#: lib/config.php:447
+#: lib/config.php:448
 msgid ""
 "<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares "
 "is not possible. Please ask your system administrator to install it."
 msgstr ""
 
-#: lib/config.php:450
+#: lib/config.php:451
 msgid ""
 "<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting "
 "of FTP shares is not possible. Please ask your system administrator to "
 "install it."
 msgstr ""
 
-#: lib/config.php:453
+#: lib/config.php:454
 msgid ""
 "<b>Warning:</b> The Curl support in PHP is not enabled or installed. "
 "Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask "
diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot
index 684f57f5dfbde2b003389536e625eb4418e32c60..112dd50e748ba8789a03fe4696558cbcef533f62 100644
--- a/l10n/templates/files_sharing.pot
+++ b/l10n/templates/files_sharing.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot
index 67b8845c28ebbf9bb27f92845e338407ca2bb07a..1390d6e3802d4f0e7e30283c8018d092035db7c8 100644
--- a/l10n/templates/files_trashbin.pot
+++ b/l10n/templates/files_trashbin.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot
index 5f65e9534447baf924fabe6eaeb2c565d7be485d..6b1927af593d6b02427a4a0216ab7b512a6ddf5e 100644
--- a/l10n/templates/files_versions.pot
+++ b/l10n/templates/files_versions.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot
index d916e620879ee22a5f99a5ff9e16d6ecbfcc802c..37e37e51237eef0feb2ac5ab8af4da532cc0427d 100644
--- a/l10n/templates/lib.pot
+++ b/l10n/templates/lib.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -41,10 +41,20 @@ msgstr ""
 msgid "Admin"
 msgstr ""
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr ""
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr ""
@@ -53,15 +63,21 @@ msgstr ""
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -189,58 +205,62 @@ msgstr ""
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr ""
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr ""
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr ""
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr ""
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr ""
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr ""
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr ""
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr ""
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr ""
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr ""
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr ""
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr ""
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot
index 70d6df7d64698fe32a751ceea1e24d4eb71e86f8..9e3f34d3989c0448df88eca7ac273e25a913d932 100644
--- a/l10n/templates/settings.pot
+++ b/l10n/templates/settings.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot
index d4d639018190aea18a078c2de112b4ca6f2c7695..89c258816378e456cec321efecb057b0ab6adeb8 100644
--- a/l10n/templates/user_ldap.pot
+++ b/l10n/templates/user_ldap.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot
index ac45363c3a592a1eeb23e94bf31ae2e033e8b0c6..f52eb6ca714704380323581be93538306032a7ed 100644
--- a/l10n/templates/user_webdavauth.pot
+++ b/l10n/templates/user_webdavauth.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud Core 5.0.0\n"
 "Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/th_TH/lib.po b/l10n/th_TH/lib.po
index cd2e5593e3fdec17ae1026e85f1abceee2e8c0c4..a12613c7221805a20d8975b0effeb810aa9ef499 100644
--- a/l10n/th_TH/lib.po
+++ b/l10n/th_TH/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "แอปฯ"
 msgid "Admin"
 msgstr "ผู้ดูแล"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "เว็บเซอร์วิสที่คุณควบคุมการใช้งานได้"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "คุณสมบัติการดาวน์โหลด zip ถูกปิดการใช้งานไว้"
@@ -53,15 +63,21 @@ msgstr "คุณสมบัติการดาวน์โหลด zip ถ
 msgid "Files need to be downloaded one by one."
 msgstr "ไฟล์สามารถดาวน์โหลดได้ทีละครั้งเท่านั้น"
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "กลับไปที่ไฟล์"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "ไฟล์ที่เลือกมีขนาดใหญ่เกินกว่าที่จะสร้างเป็นไฟล์ zip"
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "ไม่สามารถกำหนดได้"
 
@@ -189,58 +205,62 @@ msgstr ""
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "วินาที ก่อนหน้านี้"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 นาทีก่อนหน้านี้"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d นาทีที่ผ่านมา"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1 ชั่วโมงก่อนหน้านี้"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "%d ชั่วโมงก่อนหน้านี้"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "วันนี้"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "เมื่อวานนี้"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d วันที่ผ่านมา"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "เดือนที่แล้ว"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "%d เดือนมาแล้ว"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "ปีที่แล้ว"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "ปี ที่ผ่านมา"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/tr/lib.po b/l10n/tr/lib.po
index 30b504d23b1a8c8e1a79fd171c0a1818863fb45c..f87d09b3415a2d8cf32ecf095f85fc5fcd20327a 100644
--- a/l10n/tr/lib.po
+++ b/l10n/tr/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n"
 "MIME-Version: 1.0\n"
@@ -42,10 +42,20 @@ msgstr "Uygulamalar"
 msgid "Admin"
 msgstr "Yönetici"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "Bilgileriniz güvenli ve şifreli"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "ZIP indirmeleri kapatılmıştır."
@@ -54,15 +64,21 @@ msgstr "ZIP indirmeleri kapatılmıştır."
 msgid "Files need to be downloaded one by one."
 msgstr "Dosyaların birer birer indirilmesi gerekmektedir."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Dosyalara dön"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Seçilen dosyalar bir zip dosyası oluşturmak için fazla büyüktür."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "tespit edilemedi"
 
@@ -190,58 +206,62 @@ msgstr "Web sunucunuz dosya transferi için düzgün bir şekilde yapılandırı
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Lütfen <a href='%s'>kurulum kılavuzlarını</a> iki kez kontrol edin."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "saniye önce"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 dakika önce"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d dakika önce"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1 saat önce"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "%d saat önce"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "bugün"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "dün"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d gün önce"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "geçen ay"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "%d ay önce"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "geçen yıl"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "yıl önce"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/ug/lib.po b/l10n/ug/lib.po
index fb0d253b77076c7012de1a40ff2c8ff31733d97b..bba5b72f53f33de791c2b4e520eb00a467d0adf9 100644
--- a/l10n/ug/lib.po
+++ b/l10n/ug/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Uighur <uqkun@outlook.com>\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "ئەپلەر"
 msgid "Admin"
 msgstr ""
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr ""
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr ""
@@ -53,15 +63,21 @@ msgstr ""
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -189,58 +205,62 @@ msgstr ""
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr ""
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 مىنۇت ئىلگىرى"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d مىنۇت ئىلگىرى"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1 سائەت ئىلگىرى"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "%d سائەت ئىلگىرى"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "بۈگۈن"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "تۈنۈگۈن"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d كۈن ئىلگىرى"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr ""
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "%d ئاي ئىلگىرى"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr ""
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr ""
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/uk/lib.po b/l10n/uk/lib.po
index 1dc92f7118726e1a91c5702af467e08e123f79f8..950fef2e264514f2c4d2f7e44e09de737194de4c 100644
--- a/l10n/uk/lib.po
+++ b/l10n/uk/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "Додатки"
 msgid "Admin"
 msgstr "Адмін"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "підконтрольні Вам веб-сервіси"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "ZIP завантаження вимкнено."
@@ -53,15 +63,21 @@ msgstr "ZIP завантаження вимкнено."
 msgid "Files need to be downloaded one by one."
 msgstr "Файли повинні бути завантаженні послідовно."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Повернутися до файлів"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Вибрані фали завеликі для генерування zip файлу."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "не може бути визначено"
 
@@ -189,58 +205,62 @@ msgstr "Ваш Web-сервер ще не налаштований належн
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "Будь ласка, перевірте <a href='%s'>інструкції по встановленню</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "секунди тому"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 хвилину тому"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d хвилин тому"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1 годину тому"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "%d годин тому"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "сьогодні"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "вчора"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d днів тому"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "минулого місяця"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "%d місяців тому"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "минулого року"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "роки тому"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/ur_PK/lib.po b/l10n/ur_PK/lib.po
index 2304f1c052b8f28f8ffe94cb505e3ef62add18e1..6c94b885fdac5367f0a50cf881e60706ecbc2412 100644
--- a/l10n/ur_PK/lib.po
+++ b/l10n/ur_PK/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-22 06:02+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Urdu (Pakistan) (http://www.transifex.com/projects/p/owncloud/language/ur_PK/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "ایپز"
 msgid "Admin"
 msgstr "ایڈمن"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "آپ کے اختیار میں ویب سروسیز"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr ""
@@ -53,15 +63,21 @@ msgstr ""
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -189,58 +205,62 @@ msgstr ""
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr ""
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr ""
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr ""
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr ""
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr ""
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr ""
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr ""
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr ""
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr ""
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr ""
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr ""
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr ""
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/vi/lib.po b/l10n/vi/lib.po
index cf5f630cf3b6fe5b980750f74c4f9e0866b94439..83319251fa0824342f4220942da6a2f1f97f2e86 100644
--- a/l10n/vi/lib.po
+++ b/l10n/vi/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "Ứng dụng"
 msgid "Admin"
 msgstr "Quản trị"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "dịch vụ web dưới sự kiểm soát của bạn"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "Tải về ZIP đã bị tắt."
@@ -53,15 +63,21 @@ msgstr "Tải về ZIP đã bị tắt."
 msgid "Files need to be downloaded one by one."
 msgstr "Tập tin cần phải được tải về từng người một."
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "Trở lại tập tin"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "Tập tin được chọn quá lớn để tạo tập tin ZIP."
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "không thể phát hiện được"
 
@@ -189,58 +205,62 @@ msgstr ""
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "vài giây trước"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 phút trước"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d phút trước"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1 giờ trước"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "%d giờ trước"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "hôm nay"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "hôm qua"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d ngày trước"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "tháng trước"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "%d tháng trước"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "năm trước"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "năm trước"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/zh_CN.GB2312/lib.po b/l10n/zh_CN.GB2312/lib.po
index 77205cd45d521f1ba71e9f51d4728533b559910c..63fdc2e17b5af35cbf44da5da5f5e927e3cd7f3a 100644
--- a/l10n/zh_CN.GB2312/lib.po
+++ b/l10n/zh_CN.GB2312/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "程序"
 msgid "Admin"
 msgstr "管理员"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "您控制的网络服务"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "ZIP 下载已关闭"
@@ -53,15 +63,21 @@ msgstr "ZIP 下载已关闭"
 msgid "Files need to be downloaded one by one."
 msgstr "需要逐个下载文件。"
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "返回到文件"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "选择的文件太大而不能生成 zip 文件。"
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -189,58 +205,62 @@ msgstr "因WebDAV接口故障,您的网络服务器好像并未允许文件同
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "请双击<a href='%s'>安装向导</a>。"
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "秒前"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 分钟前"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d 分钟前"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1小时前"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr ""
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "今天"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "昨天"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d 天前"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "上个月"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr ""
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "去年"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "年前"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/zh_CN/lib.po b/l10n/zh_CN/lib.po
index e7b55010f8d268e9ac412513b001efc5afeced14..35a0efd7f0288cbd07edbdd3aa38561e1d77d62a 100644
--- a/l10n/zh_CN/lib.po
+++ b/l10n/zh_CN/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n"
 "MIME-Version: 1.0\n"
@@ -42,10 +42,20 @@ msgstr "应用"
 msgid "Admin"
 msgstr "管理"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "您控制的web服务"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "ZIP 下载已经关闭"
@@ -54,15 +64,21 @@ msgstr "ZIP 下载已经关闭"
 msgid "Files need to be downloaded one by one."
 msgstr "需要逐一下载文件"
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "回到文件"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "选择的文件太大,无法生成 zip 文件。"
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "无法确定"
 
@@ -190,58 +206,62 @@ msgstr "您的Web服务器尚未正确设置以允许文件同步, 因为WebDAV
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "请认真检查<a href='%s'>安装指南</a>."
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "秒前"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "一分钟前"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d 分钟前"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1小时前"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "%d小时前"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "今天"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "昨天"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d 天前"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "上月"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "%d 月前"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "去年"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "年前"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/zh_HK/lib.po b/l10n/zh_HK/lib.po
index 584ef8503ccd65dabb579b27bc267d62ddfc6ac4..e6c8651e5c8ebe0e7c59565df384cad4e0648d4a 100644
--- a/l10n/zh_HK/lib.po
+++ b/l10n/zh_HK/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n"
 "MIME-Version: 1.0\n"
@@ -41,10 +41,20 @@ msgstr "軟件"
 msgid "Admin"
 msgstr "管理"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr ""
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr ""
@@ -53,15 +63,21 @@ msgstr ""
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr ""
 
@@ -189,58 +205,62 @@ msgstr ""
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr ""
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr ""
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr ""
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr ""
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr ""
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr ""
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "今日"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "昨日"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr ""
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "前一月"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr ""
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr ""
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr ""
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/l10n/zh_TW/lib.po b/l10n/zh_TW/lib.po
index 514e60bbf798c7349820a604e07d2d48f984f11f..813363fd041d3cff0be3b45aed77d6bab31df526 100644
--- a/l10n/zh_TW/lib.po
+++ b/l10n/zh_TW/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-07-23 01:55-0400\n"
-"PO-Revision-Date: 2013-07-23 05:05+0000\n"
+"POT-Creation-Date: 2013-07-24 01:55-0400\n"
+"PO-Revision-Date: 2013-07-24 05:55+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n"
 "MIME-Version: 1.0\n"
@@ -42,10 +42,20 @@ msgstr "應用程式"
 msgid "Admin"
 msgstr "管理"
 
+#: app.php:844
+#, php-format
+msgid "Failed to upgrade \"%s\"."
+msgstr ""
+
 #: defaults.php:33
 msgid "web services under your control"
 msgstr "由您控制的網路服務"
 
+#: files.php:66 files.php:98
+#, php-format
+msgid "cannot open \"%s\""
+msgstr ""
+
 #: files.php:226
 msgid "ZIP download is turned off."
 msgstr "ZIP 下載已關閉。"
@@ -54,15 +64,21 @@ msgstr "ZIP 下載已關閉。"
 msgid "Files need to be downloaded one by one."
 msgstr "檔案需要逐一下載。"
 
-#: files.php:228 files.php:261
+#: files.php:228 files.php:256
 msgid "Back to Files"
 msgstr "回到檔案列表"
 
-#: files.php:258
+#: files.php:253
 msgid "Selected files too large to generate zip file."
 msgstr "選擇的檔案太大以致於無法產生壓縮檔。"
 
-#: helper.php:236
+#: files.php:254
+msgid ""
+"Download the files in smaller chunks, seperately or kindly ask your "
+"administrator."
+msgstr ""
+
+#: helper.php:235
 msgid "couldn't be determined"
 msgstr "無法判斷"
 
@@ -190,58 +206,62 @@ msgstr "您的網頁伺服器尚未被正確設定來進行檔案同步,因為
 msgid "Please double check the <a href='%s'>installation guides</a>."
 msgstr "請參考<a href='%s'>安裝指南</a>。"
 
-#: template.php:95
+#: template/functions.php:80
 msgid "seconds ago"
 msgstr "幾秒前"
 
-#: template.php:96
+#: template/functions.php:81
 msgid "1 minute ago"
 msgstr "1 分鐘前"
 
-#: template.php:97
+#: template/functions.php:82
 #, php-format
 msgid "%d minutes ago"
 msgstr "%d 分鐘前"
 
-#: template.php:98
+#: template/functions.php:83
 msgid "1 hour ago"
 msgstr "1 小時之前"
 
-#: template.php:99
+#: template/functions.php:84
 #, php-format
 msgid "%d hours ago"
 msgstr "%d 小時之前"
 
-#: template.php:100
+#: template/functions.php:85
 msgid "today"
 msgstr "今天"
 
-#: template.php:101
+#: template/functions.php:86
 msgid "yesterday"
 msgstr "昨天"
 
-#: template.php:102
+#: template/functions.php:87
 #, php-format
 msgid "%d days ago"
 msgstr "%d 天前"
 
-#: template.php:103
+#: template/functions.php:88
 msgid "last month"
 msgstr "上個月"
 
-#: template.php:104
+#: template/functions.php:89
 #, php-format
 msgid "%d months ago"
 msgstr "%d 個月之前"
 
-#: template.php:105
+#: template/functions.php:90
 msgid "last year"
 msgstr "去年"
 
-#: template.php:106
+#: template/functions.php:91
 msgid "years ago"
 msgstr "幾年前"
 
+#: template.php:296
+msgid "Caused by:"
+msgstr ""
+
 #: vcategories.php:188 vcategories.php:249
 #, php-format
 msgid "Could not find category \"%s\""
diff --git a/lib/config.php b/lib/config.php
index f7852fd68f6fa979826cc176611bf6687423ec0f..e773e6e2eb0254a311efbba6176ecf835cf38047 100644
--- a/lib/config.php
+++ b/lib/config.php
@@ -144,11 +144,8 @@ class Config {
 				continue;
 			}
 			unset($CONFIG);
-			if((@include $file) === false)
-			{
-				throw new HintException("Can't read from config file '" . $file . "'. ".
-					'This is usually caused by the wrong file permission.');
-			}
+			// ignore errors on include, this can happen when doing a fresh install
+			@include $file;
 			if (isset($CONFIG) && is_array($CONFIG)) {
 				$this->cache = array_merge($this->cache, $CONFIG);
 			}
diff --git a/lib/connector/sabre/file.php b/lib/connector/sabre/file.php
index 438d9871c228ef83851f87bf2497112b35528d46..06ab73e3e4d11c95d9dd1e2f9958e3da24739e60 100644
--- a/lib/connector/sabre/file.php
+++ b/lib/connector/sabre/file.php
@@ -115,8 +115,11 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
 	 */
 	public function getSize() {
 		$this->getFileinfoCache();
-		return $this->fileinfo_cache['size'];
-
+		if ($this->fileinfo_cache['size'] > -1) {
+			return $this->fileinfo_cache['size'];
+		} else {
+			return null;
+		}
 	}
 
 	/**
diff --git a/lib/defaults.php b/lib/defaults.php
index 196bb5cf14df4ed9ea97e0dac533d4db550f43bd..10813a3e8d88d3eba151bb95f06f671c110374d4 100644
--- a/lib/defaults.php
+++ b/lib/defaults.php
@@ -16,6 +16,7 @@ class OC_Defaults {
 
 	private $defaultEntity;
 	private $defaultName;
+	private $defaultTitle;
 	private $defaultBaseUrl;
 	private $defaultSyncClientUrl;
 	private $defaultDocBaseUrl;
@@ -25,8 +26,9 @@ class OC_Defaults {
 	function __construct() {
 		$l = OC_L10N::get('core');
 
-		$this->defaultEntity = "ownCloud";
-		$this->defaultName = "ownCloud";
+		$this->defaultEntity = "ownCloud"; /* e.g. company name, used for footers and copyright notices */
+		$this->defaultName = "ownCloud"; /* short name, used when referring to the software */
+		$this->defaultTitle = "ownCloud"; /* can be a longer name, for titles */
 		$this->defaultBaseUrl = "http://owncloud.org";
 		$this->defaultSyncClientUrl = " http://owncloud.org/sync-clients/";
 		$this->defaultDocBaseUrl = "http://doc.owncloud.org";
@@ -69,6 +71,14 @@ class OC_Defaults {
 		}
 	}
 
+	public function getTitle() {
+		if ($this->themeExist('getTitle')) {
+			return $this->theme->getTitle();
+		} else {
+			return $this->defaultTitle;
+		}
+	}
+
 	public function getName() {
 		if ($this->themeExist('getName')) {
 			return $this->theme->getName();
diff --git a/lib/group.php b/lib/group.php
index d1a830730b755a18398e0c052281bad2482730b6..8fbf5f8641885cbee4500774e324b56eb84839c4 100644
--- a/lib/group.php
+++ b/lib/group.php
@@ -34,28 +34,43 @@
  *   post_removeFromGroup(uid, gid)
  */
 class OC_Group {
-	// The backend used for group management
 	/**
-	 * @var OC_Group_Interface[]
+	 * @var \OC\Group\Manager $manager
 	 */
-	private static $_usedBackends = array();
+	private static $manager;
+
+	/**
+	 * @var \OC\User\Manager
+	 */
+	private static $userManager;
+
+	/**
+	 * @return \OC\Group\Manager
+	 */
+	public static function getManager() {
+		if (self::$manager) {
+			return self::$manager;
+		}
+		self::$userManager = \OC_User::getManager();
+		self::$manager = new \OC\Group\Manager(self::$userManager);
+		return self::$manager;
+	}
 
 	/**
 	 * @brief set the group backend
-	 * @param  string  $backend  The backend to use for user managment
+	 * @param  \OC_Group_Backend $backend  The backend to use for user managment
 	 * @return bool
 	 */
-	public static function useBackend( $backend ) {
-		if($backend instanceof OC_Group_Interface) {
-			self::$_usedBackends[]=$backend;
-		}
+	public static function useBackend($backend) {
+		self::getManager()->addBackend($backend);
+		return true;
 	}
 
 	/**
 	 * remove all used backends
 	 */
 	public static function clearBackends() {
-		self::$_usedBackends=array();
+		self::getManager()->clearBackends();
 	}
 
 	/**
@@ -66,32 +81,13 @@ class OC_Group {
 	 * Tries to create a new group. If the group name already exists, false will
 	 * be returned. Basic checking of Group name
 	 */
-	public static function createGroup( $gid ) {
-		// No empty group names!
-		if( !$gid ) {
-			return false;
-		}
-		// No duplicate group names
-		if( in_array( $gid, self::getGroups())) {
-			return false;
-		}
-
-		$run = true;
-		OC_Hook::emit( "OC_Group", "pre_createGroup", array( "run" => &$run, "gid" => $gid ));
-
-		if($run) {
-			//create the group in the first backend that supports creating groups
-			foreach(self::$_usedBackends as $backend) {
-				if(!$backend->implementsActions(OC_GROUP_BACKEND_CREATE_GROUP))
-					continue;
+	public static function createGroup($gid) {
+		OC_Hook::emit("OC_Group", "pre_createGroup", array("run" => true, "gid" => $gid));
 
-				$backend->createGroup($gid);
-				OC_Hook::emit( "OC_User", "post_createGroup", array( "gid" => $gid ));
-
-				return true;
-			}
-			return false;
-		}else{
+		if (self::getManager()->createGroup($gid)) {
+			OC_Hook::emit("OC_User", "post_createGroup", array("gid" => $gid));
+			return true;
+		} else {
 			return false;
 		}
 	}
@@ -103,30 +99,22 @@ class OC_Group {
 	 *
 	 * Deletes a group and removes it from the group_user-table
 	 */
-	public static function deleteGroup( $gid ) {
+	public static function deleteGroup($gid) {
 		// Prevent users from deleting group admin
-		if( $gid == "admin" ) {
+		if ($gid == "admin") {
 			return false;
 		}
 
-		$run = true;
-		OC_Hook::emit( "OC_Group", "pre_deleteGroup", array( "run" => &$run, "gid" => $gid ));
-
-		if($run) {
-			//delete the group from all backends
-			foreach(self::$_usedBackends as $backend) {
-				if(!$backend->implementsActions(OC_GROUP_BACKEND_DELETE_GROUP))
-					continue;
-
-				$backend->deleteGroup($gid);
-				OC_Hook::emit( "OC_User", "post_deleteGroup", array( "gid" => $gid ));
+		OC_Hook::emit("OC_Group", "pre_deleteGroup", array("run" => true, "gid" => $gid));
 
+		$group = self::getManager()->get($gid);
+		if ($group) {
+			if ($group->delete()) {
+				OC_Hook::emit("OC_User", "post_deleteGroup", array("gid" => $gid));
 				return true;
 			}
-			return false;
-		}else{
-			return false;
 		}
+		return false;
 	}
 
 	/**
@@ -137,11 +125,11 @@ class OC_Group {
 	 *
 	 * Checks whether the user is member of a group or not.
 	 */
-	public static function inGroup( $uid, $gid ) {
-		foreach(self::$_usedBackends as $backend) {
-			if($backend->inGroup($uid, $gid)) {
-				return true;
-			}
+	public static function inGroup($uid, $gid) {
+		$group = self::getManager()->get($gid);
+		$user = self::$userManager->get($uid);
+		if ($group and $user) {
+			return $group->inGroup($user);
 		}
 		return false;
 	}
@@ -154,33 +142,15 @@ class OC_Group {
 	 *
 	 * Adds a user to a group.
 	 */
-	public static function addToGroup( $uid, $gid ) {
-		// Does the group exist?
-		if( !OC_Group::groupExists($gid)) {
-			return false;
-		}
-
-		// Go go go
-		$run = true;
-		OC_Hook::emit( "OC_Group", "pre_addToGroup", array( "run" => &$run, "uid" => $uid, "gid" => $gid ));
-
-		if($run) {
-			$success=false;
-
-			//add the user to the all backends that have the group
-			foreach(self::$_usedBackends as $backend) {
-				if(!$backend->implementsActions(OC_GROUP_BACKEND_ADD_TO_GROUP))
-					continue;
-
-				if($backend->groupExists($gid)) {
-					$success|=$backend->addToGroup($uid, $gid);
-				}
-			}
-			if($success) {
-				OC_Hook::emit( "OC_User", "post_addToGroup", array( "uid" => $uid, "gid" => $gid ));
-			}
-			return $success;
-		}else{
+	public static function addToGroup($uid, $gid) {
+		$group = self::getManager()->get($gid);
+		$user = self::$userManager->get($uid);
+		if ($group and $user) {
+			OC_Hook::emit("OC_Group", "pre_addToGroup", array("run" => true, "uid" => $uid, "gid" => $gid));
+			$group->addUser($user);
+			OC_Hook::emit("OC_User", "post_addToGroup", array("uid" => $uid, "gid" => $gid));
+			return true;
+		} else {
 			return false;
 		}
 	}
@@ -193,21 +163,15 @@ class OC_Group {
 	 *
 	 * removes the user from a group.
 	 */
-	public static function removeFromGroup( $uid, $gid ) {
-		$run = true;
-		OC_Hook::emit( "OC_Group", "pre_removeFromGroup", array( "run" => &$run, "uid" => $uid, "gid" => $gid ));
-
-		if($run) {
-			//remove the user from the all backends that have the group
-			foreach(self::$_usedBackends as $backend) {
-				if(!$backend->implementsActions(OC_GROUP_BACKEND_REMOVE_FROM_GOUP))
-					continue;
-
-				$backend->removeFromGroup($uid, $gid);
-				OC_Hook::emit( "OC_User", "post_removeFromGroup", array( "uid" => $uid, "gid" => $gid ));
-			}
+	public static function removeFromGroup($uid, $gid) {
+		$group = self::getManager()->get($gid);
+		$user = self::$userManager->get($uid);
+		if ($group and $user) {
+			OC_Hook::emit("OC_Group", "pre_removeFromGroup", array("run" => true, "uid" => $uid, "gid" => $gid));
+			$group->removeUser($user);
+			OC_Hook::emit("OC_User", "post_removeFromGroup", array("uid" => $uid, "gid" => $gid));
 			return true;
-		}else{
+		} else {
 			return false;
 		}
 	}
@@ -220,13 +184,18 @@ class OC_Group {
 	 * This function fetches all groups a user belongs to. It does not check
 	 * if the user exists at all.
 	 */
-	public static function getUserGroups( $uid ) {
-		$groups=array();
-		foreach(self::$_usedBackends as $backend) {
-			$groups=array_merge($backend->getUserGroups($uid), $groups);
+	public static function getUserGroups($uid) {
+		$user = self::$userManager->get($uid);
+		if ($user) {
+			$groups = self::getManager()->getUserGroups($user);
+			$groupIds = array();
+			foreach ($groups as $group) {
+				$groupIds[] = $group->getGID();
+			}
+			return $groupIds;
+		} else {
+			return array();
 		}
-		asort($groups);
-		return $groups;
 	}
 
 	/**
@@ -235,27 +204,23 @@ class OC_Group {
 	 *
 	 * Returns a list with all groups
 	 */
-	public static function getGroups($search = '', $limit = -1, $offset = 0) {
-		$groups = array();
-		foreach (self::$_usedBackends as $backend) {
-			$groups = array_merge($backend->getGroups($search, $limit, $offset), $groups);
+	public static function getGroups($search = '', $limit = null, $offset = null) {
+		$groups = self::getManager()->search($search, $limit, $offset);
+		$groupIds = array();
+		foreach ($groups as $group) {
+			$groupIds[] = $group->getGID();
 		}
-		asort($groups);
-		return $groups;
+		return $groupIds;
 	}
 
 	/**
 	 * check if a group exists
+	 *
 	 * @param string $gid
 	 * @return bool
 	 */
 	public static function groupExists($gid) {
-		foreach(self::$_usedBackends as $backend) {
-			if ($backend->groupExists($gid)) {
-				return true;
-			}
-		}
-		return false;
+		return self::getManager()->groupExists($gid);
 	}
 
 	/**
@@ -263,11 +228,17 @@ class OC_Group {
 	 * @returns array with user ids
 	 */
 	public static function usersInGroup($gid, $search = '', $limit = -1, $offset = 0) {
-		$users=array();
-		foreach(self::$_usedBackends as $backend) {
-			$users = array_merge($backend->usersInGroup($gid, $search, $limit, $offset), $users);
+		$group = self::getManager()->get($gid);
+		if ($group) {
+			$users = $group->searchUsers($search . $limit, $offset);
+			$userIds = array();
+			foreach ($users as $user) {
+				$userIds[] = $user->getUID();
+			}
+			return $userIds;
+		} else {
+			return array();
 		}
-		return $users;
 	}
 
 	/**
@@ -292,17 +263,17 @@ class OC_Group {
 	 * @returns array with display names (value) and user ids(key)
 	 */
 	public static function displayNamesInGroup($gid, $search = '', $limit = -1, $offset = 0) {
-		$displayNames=array();
-		foreach(self::$_usedBackends as $backend) {
-			if($backend->implementsActions(OC_GROUP_BACKEND_GET_DISPLAYNAME)) {
-				$displayNames = array_merge($backend->displayNamesInGroup($gid, $search, $limit, $offset), $displayNames);
-			} else {
-				$users = $backend->usersInGroup($gid, $search, $limit, $offset);
-				$names = array_combine($users, $users);
-				$displayNames = array_merge($names, $displayNames);
+		$group = self::getManager()->get($gid);
+		if ($group) {
+			$users = $group->searchDisplayName($search . $limit, $offset);
+			$displayNames = array();
+			foreach ($users as $user) {
+				$displayNames[] = $user->getDisplayName();
 			}
+			return $displayNames;
+		} else {
+			return array();
 		}
-		return $displayNames;
 	}
 
 	/**
diff --git a/lib/group/group.php b/lib/group/group.php
new file mode 100644
index 0000000000000000000000000000000000000000..7a6393132475a489f779f87a167579de7331ceec
--- /dev/null
+++ b/lib/group/group.php
@@ -0,0 +1,238 @@
+<?php
+
+/**
+ * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Group;
+
+class Group {
+	/**
+	 * @var string $id
+	 */
+	private $fid;
+
+	/**
+	 * @var \OC\User\User[] $users
+	 */
+	private $users;
+
+	/**
+	 * @var \OC_Group_Backend[] | \OC_Group_Database[] $backend
+	 */
+	private $backends;
+
+	/**
+	 * @var \OC\Hooks\PublicEmitter $emitter;
+	 */
+	private $emitter;
+
+	/**
+	 * @var \OC\User\Manager $userManager
+	 */
+	private $userManager;
+
+	/**
+	 * @param string $gid
+	 * @param \OC_Group_Backend[] $backends
+	 * @param \OC\User\Manager $userManager
+	 * @param \OC\Hooks\PublicEmitter $emitter
+	 */
+	public function __construct($gid, $backends, $userManager, $emitter = null) {
+		$this->gid = $gid;
+		$this->backends = $backends;
+		$this->userManager = $userManager;
+		$this->emitter = $emitter;
+	}
+
+	public function getGID() {
+		return $this->gid;
+	}
+
+	/**
+	 * get all users in the group
+	 *
+	 * @return \OC\User\User[]
+	 */
+	public function getUsers() {
+		if ($this->users) {
+			return $this->users;
+		}
+
+		$users = array();
+		$userIds = array();
+		foreach ($this->backends as $backend) {
+			$diff = array_diff(
+				$backend->usersInGroup($this->gid),
+				$userIds
+			);
+			if ($diff) {
+				$userIds = array_merge($userIds, $diff);
+			}
+		}
+
+		foreach ($userIds as $userId) {
+			$users[] = $this->userManager->get($userId);
+		}
+		$this->users = $users;
+		return $users;
+	}
+
+	/**
+	 * check if a user is in the group
+	 *
+	 * @param \OC\User\User $user
+	 * @return bool
+	 */
+	public function inGroup($user) {
+		foreach ($this->backends as $backend) {
+			if ($backend->inGroup($user->getUID(), $this->gid)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * add a user to the group
+	 *
+	 * @param \OC\User\User $user
+	 */
+	public function addUser($user) {
+		if ($this->inGroup($user)) {
+			return;
+		}
+
+		if ($this->emitter) {
+			$this->emitter->emit('\OC\Group', 'preAddUser', array($this, $user));
+		}
+		foreach ($this->backends as $backend) {
+			if ($backend->implementsActions(OC_GROUP_BACKEND_ADD_TO_GROUP)) {
+				$backend->addToGroup($user->getUID(), $this->gid);
+				if ($this->users) {
+					$this->users[] = $user;
+				}
+				if ($this->emitter) {
+					$this->emitter->emit('\OC\Group', 'postAddUser', array($this, $user));
+				}
+				return;
+			}
+		}
+	}
+
+	/**
+	 * remove a user from the group
+	 *
+	 * @param \OC\User\User $user
+	 */
+	public function removeUser($user) {
+		$result = false;
+		if ($this->emitter) {
+			$this->emitter->emit('\OC\Group', 'preRemoveUser', array($this, $user));
+		}
+		foreach ($this->backends as $backend) {
+			if ($backend->implementsActions(OC_GROUP_BACKEND_REMOVE_FROM_GOUP) and $backend->inGroup($user->getUID(), $this->gid)) {
+				$backend->removeFromGroup($user->getUID(), $this->gid);
+				$result = true;
+			}
+		}
+		if ($result) {
+			if ($this->emitter) {
+				$this->emitter->emit('\OC\Group', 'postRemoveUser', array($this, $user));
+			}
+			if ($this->users) {
+				foreach ($this->users as $index => $groupUser) {
+					if ($groupUser->getUID() === $user->getUID()) {
+						unset($this->users[$index]);
+						return;
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * search for users in the group by userid
+	 *
+	 * @param string $search
+	 * @param int $limit
+	 * @param int $offset
+	 * @return \OC\User\User[]
+	 */
+	public function searchUsers($search, $limit = null, $offset = null) {
+		$users = array();
+		foreach ($this->backends as $backend) {
+			$userIds = $backend->usersInGroup($this->gid, $search, $limit, $offset);
+			if (!is_null($limit)) {
+				$limit -= count($userIds);
+			}
+			if (!is_null($offset)) {
+				$offset -= count($userIds);
+			}
+			foreach ($userIds as $userId) {
+				$users[$userId] = $this->userManager->get($userId);
+			}
+			if (!is_null($limit) and $limit <= 0) {
+				return array_values($users);
+			}
+		}
+		return array_values($users);
+	}
+
+	/**
+	 * search for users in the group by displayname
+	 *
+	 * @param string $search
+	 * @param int $limit
+	 * @param int $offset
+	 * @return \OC\User\User[]
+	 */
+	public function searchDisplayName($search, $limit = null, $offset = null) {
+		$users = array();
+		foreach ($this->backends as $backend) {
+			if ($backend->implementsActions(OC_GROUP_BACKEND_GET_DISPLAYNAME)) {
+				$userIds = array_keys($backend->displayNamesInGroup($this->gid, $search, $limit, $offset));
+			} else {
+				$userIds = $backend->usersInGroup($this->gid, $search, $limit, $offset);
+			}
+			if (!is_null($limit)) {
+				$limit -= count($userIds);
+			}
+			if (!is_null($offset)) {
+				$offset -= count($userIds);
+			}
+			foreach ($userIds as $userId) {
+				$users[$userId] = $this->userManager->get($userId);
+			}
+			if (!is_null($limit) and $limit <= 0) {
+				return array_values($users);
+			}
+		}
+		return array_values($users);
+	}
+
+	/**
+	 * delete the group
+	 *
+	 * @return bool
+	 */
+	public function delete() {
+		$result = false;
+		if ($this->emitter) {
+			$this->emitter->emit('\OC\Group', 'preDelete', array($this));
+		}
+		foreach ($this->backends as $backend) {
+			if ($backend->implementsActions(OC_GROUP_BACKEND_DELETE_GROUP)) {
+				$result = true;
+				$backend->deleteGroup($this->gid);
+			}
+		}
+		if ($result and $this->emitter) {
+			$this->emitter->emit('\OC\Group', 'postDelete', array($this));
+		}
+		return $result;
+	}
+}
diff --git a/lib/group/manager.php b/lib/group/manager.php
new file mode 100644
index 0000000000000000000000000000000000000000..bf469d51d1248713aa06f5e1a69bcddbe8a0a07f
--- /dev/null
+++ b/lib/group/manager.php
@@ -0,0 +1,169 @@
+<?php
+
+/**
+ * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Group;
+
+use OC\Hooks\PublicEmitter;
+
+/**
+ * Class Manager
+ *
+ * Hooks available in scope \OC\Group:
+ * - preAddUser(\OC\Group\Group $group, \OC\User\User $user)
+ * - postAddUser(\OC\Group\Group $group, \OC\User\User $user)
+ * - preRemoveUser(\OC\Group\Group $group, \OC\User\User $user)
+ * - postRemoveUser(\OC\Group\Group $group, \OC\User\User $user)
+ * - preDelete(\OC\Group\Group $group)
+ * - postDelete(\OC\Group\Group $group)
+ * - preCreate(string $groupId)
+ * - postCreate(\OC\Group\Group $group)
+ *
+ * @package OC\Group
+ */
+class Manager extends PublicEmitter {
+	/**
+	 * @var \OC_Group_Backend[] | \OC_Group_Database[] $backends
+	 */
+	private $backends = array();
+
+	/**
+	 * @var \OC\User\Manager $userManager
+	 */
+	private $userManager;
+
+	/**
+	 * @var \OC\Group\Group[]
+	 */
+	private $cachedGroups;
+
+	/**
+	 * @param \OC\User\Manager $userManager
+	 */
+	public function __construct($userManager) {
+		$this->userManager = $userManager;
+		$cache = & $this->cachedGroups;
+		$this->listen('\OC\Group', 'postDelete', function ($group) use (&$cache) {
+			/**
+			 * @var \OC\Group\Group $group
+			 */
+			unset($cache[$group->getGID()]);
+		});
+	}
+
+	/**
+	 * @param \OC_Group_Backend $backend
+	 */
+	public function addBackend($backend) {
+		$this->backends[] = $backend;
+	}
+
+	public function clearBackends() {
+		$this->backends = array();
+		$this->cachedGroups = array();
+	}
+
+	/**
+	 * @param string $gid
+	 * @return \OC\Group\Group
+	 */
+	public function get($gid) {
+		if (isset($this->cachedGroups[$gid])) {
+			return $this->cachedGroups[$gid];
+		}
+		foreach ($this->backends as $backend) {
+			if ($backend->groupExists($gid)) {
+				return $this->getGroupObject($gid);
+			}
+		}
+		return null;
+	}
+
+	protected function getGroupObject($gid) {
+		$backends = array();
+		foreach ($this->backends as $backend) {
+			if ($backend->groupExists($gid)) {
+				$backends[] = $backend;
+			}
+		}
+		$this->cachedGroups[$gid] = new Group($gid, $backends, $this->userManager, $this);
+		return $this->cachedGroups[$gid];
+	}
+
+	/**
+	 * @param string $gid
+	 * @return bool
+	 */
+	public function groupExists($gid) {
+		return !is_null($this->get($gid));
+	}
+
+	/**
+	 * @param string $gid
+	 * @return \OC\Group\Group
+	 */
+	public function createGroup($gid) {
+		if (!$gid) {
+			return false;
+		} else if ($this->groupExists($gid)) {
+			return $this->get($gid);
+		} else {
+			$this->emit('\OC\Group', 'preCreate', array($gid));
+			foreach ($this->backends as $backend) {
+				if ($backend->implementsActions(OC_GROUP_BACKEND_CREATE_GROUP)) {
+					$backend->createGroup($gid);
+					$group = $this->getGroupObject($gid);
+					$this->emit('\OC\Group', 'postCreate', array($group));
+					return $group;
+				}
+			}
+			return null;
+		}
+	}
+
+	/**
+	 * @param string $search
+	 * @param int $limit
+	 * @param int $offset
+	 * @return \OC\Group\Group[]
+	 */
+	public function search($search, $limit = null, $offset = null) {
+		$groups = array();
+		foreach ($this->backends as $backend) {
+			$groupIds = $backend->getGroups($search, $limit, $offset);
+			if (!is_null($limit)) {
+				$limit -= count($groupIds);
+			}
+			if (!is_null($offset)) {
+				$offset -= count($groupIds);
+			}
+			foreach ($groupIds as $groupId) {
+				$groups[$groupId] = $this->getGroupObject($groupId);
+			}
+			if (!is_null($limit) and $limit <= 0) {
+				return array_values($groups);
+			}
+		}
+		return array_values($groups);
+	}
+
+	/**
+	 * @param \OC\User\User $user
+	 * @return \OC\Group\Group[]
+	 */
+	public function getUserGroups($user) {
+		$groups = array();
+		foreach ($this->backends as $backend) {
+			$groupIds = $backend->getUserGroups($user->getUID());
+			foreach ($groupIds as $groupId) {
+				$groups[$groupId] = $this->getGroupObject($groupId);
+			}
+		}
+		return array_values($groups);
+	}
+}
diff --git a/lib/template.php b/lib/template.php
index 339b30eb414cd0d83584825ee4e7d0d831165946..9b2c1211e61c8e2b3dbb21c02c2dabfe87a5399d 100644
--- a/lib/template.php
+++ b/lib/template.php
@@ -21,134 +21,20 @@
  *
  */
 
-/**
- * Prints an XSS escaped string
- * @param string $string the string which will be escaped and printed
- */
-function p($string) {
-	print(OC_Util::sanitizeHTML($string));
-}
-
-/**
- * Prints an unescaped string
- * @param string $string the string which will be printed as it is
- */
-function print_unescaped($string) {
-	print($string);
-}
+require_once __DIR__.'/template/functions.php';
 
 /**
- * @brief make OC_Helper::linkTo available as a simple function
- * @param string $app app
- * @param string $file file
- * @param array $args array with param=>value, will be appended to the returned url
- * @return string link to the file
- *
- * For further information have a look at OC_Helper::linkTo
+ * This class provides the templates for ownCloud.
  */
-function link_to( $app, $file, $args = array() ) {
-	return OC_Helper::linkTo( $app, $file, $args );
-}
-
-/**
- * @brief make OC_Helper::imagePath available as a simple function
- * @param string $app app
- * @param string $image image
- * @return string link to the image
- *
- * For further information have a look at OC_Helper::imagePath
- */
-function image_path( $app, $image ) {
-	return OC_Helper::imagePath( $app, $image );
-}
-
-/**
- * @brief make OC_Helper::mimetypeIcon available as a simple function
- * @param string $mimetype mimetype
- * @return string link to the image
- *
- * For further information have a look at OC_Helper::mimetypeIcon
- */
-function mimetype_icon( $mimetype ) {
-	return OC_Helper::mimetypeIcon( $mimetype );
-}
-
-/**
- * @brief make OC_Helper::humanFileSize available as a simple function
- * @param int $bytes size in bytes
- * @return string size as string
- *
- * For further information have a look at OC_Helper::humanFileSize
- */
-function human_file_size( $bytes ) {
-	return OC_Helper::humanFileSize( $bytes );
-}
-
-function relative_modified_date($timestamp) {
-	$l=OC_L10N::get('lib');
-	$timediff = time() - $timestamp;
-	$diffminutes = round($timediff/60);
-	$diffhours = round($diffminutes/60);
-	$diffdays = round($diffhours/24);
-	$diffmonths = round($diffdays/31);
-
-	if($timediff < 60) { return $l->t('seconds ago'); }
-	else if($timediff < 120) { return $l->t('1 minute ago'); }
-	else if($timediff < 3600) { return $l->t('%d minutes ago', $diffminutes); }
-	else if($timediff < 7200) { return $l->t('1 hour ago'); }
-	else if($timediff < 86400) { return $l->t('%d hours ago', $diffhours); }
-	else if((date('G')-$diffhours) > 0) { return $l->t('today'); }
-	else if((date('G')-$diffhours) > -24) { return $l->t('yesterday'); }
-	else if($timediff < 2678400) { return $l->t('%d days ago', $diffdays); }
-	else if($timediff < 5184000) { return $l->t('last month'); }
-	else if((date('n')-$diffmonths) > 0) { return $l->t('%d months ago', $diffmonths); }
-	else if($timediff < 63113852) { return $l->t('last year'); }
-	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="' . OC_Util::sanitizeHTML($value) . '"' . $select . '>' . OC_Util::sanitizeHTML($label) . '</option>'."\n";
-	}
-	return $html;
-}
-
-/**
- * This class provides the templates for owncloud.
- */
-class OC_Template{
+class OC_Template extends \OC\Template\Base {
 	private $renderas; // Create a full page?
-	private $application; // template Application
-	private $vars; // Vars
-	private $template; // The path to the template
-	private $l10n; // The l10n-Object
+	private $path; // The path to the template
 	private $headers=array(); //custom headers
 
 	/**
 	 * @brief Constructor
 	 * @param string $app app providing the template
-	 * @param string $file name of the template file (without suffix)
+	 * @param string $name of the template file (without suffix)
 	 * @param string $renderas = ""; produce a full page
 	 * @return OC_Template object
 	 *
@@ -159,13 +45,25 @@ class OC_Template{
 	 * "admin".
 	 */
 	public function __construct( $app, $name, $renderas = "" ) {
+		// Read the selected theme from the config file
+		$theme = OC_Util::getTheme();
+
+		// Read the detected formfactor and use the right file name.
+		$fext = self::getFormFactorExtension();
+
+		$requesttoken = OC::$session ? OC_Util::callRegister() : '';
+
+		$parts = explode('/', $app); // fix translation when app is something like core/lostpassword
+		$l10n = OC_L10N::get($parts[0]);
+		$themeDefaults = new OC_Defaults();
+
+		list($path, $template) = $this->findTemplate($theme, $app, $name, $fext);
+
 		// Set the private data
 		$this->renderas = $renderas;
-		$this->application = $app;
-		$this->vars = array();
-		$this->vars['requesttoken'] = OC::$session ? OC_Util::callRegister() : '';
-		$parts = explode('/', $app); // fix translation when app is something like core/lostpassword
-		$this->l10n = OC_L10N::get($parts[0]);
+		$this->path = $path;
+
+		parent::__construct($template, $requesttoken, $l10n, $themeDefaults);
 
 		// Some headers to enhance security
 		header('X-XSS-Protection: 1; mode=block'); // Enforce browser based XSS filters
@@ -189,7 +87,6 @@ class OC_Template{
 			.'media-src *');
 		header('Content-Security-Policy:'.$policy); // Standard
 
-		$this->findTemplate($name);
 	}
 
 	/**
@@ -239,13 +136,13 @@ class OC_Template{
 			\OC::$session->set('formfactor', $_GET['formfactor']);
 		}
 		$formfactor = \OC::$session->get('formfactor');
-		if($formfactor=='default') {
+		if($formfactor==='default') {
 			$fext='';
-		}elseif($formfactor=='mobile') {
+		}elseif($formfactor==='mobile') {
 			$fext='.mobile';
-		}elseif($formfactor=='tablet') {
+		}elseif($formfactor==='tablet') {
 			$fext='.tablet';
-		}elseif($formfactor=='standalone') {
+		}elseif($formfactor==='standalone') {
 			$fext='.standalone';
 		}else{
 			$fext='';
@@ -260,112 +157,23 @@ class OC_Template{
 	 * Will select the template file for the selected theme and formfactor.
 	 * Checking all the possible locations.
 	 */
-	protected function findTemplate($name)
-	{
-		// Read the selected theme from the config file
-		$theme = OC_Util::getTheme();
-
-		// Read the detected formfactor and use the right file name.
-		$fext = self::getFormFactorExtension();
-
-		$app = $this->application;
+	protected function findTemplate($theme, $app, $name, $fext) {
 		// Check if it is a app template or not.
-		if( $app != "" ) {
-			// Check if the app is in the app folder or in the root
-			if( file_exists(OC_App::getAppPath($app)."/templates/" )) {
-				// Check if the template is overwritten by the selected theme
-				if ($this->checkPathForTemplate(OC::$SERVERROOT."/themes/$theme/apps/$app/templates/", $name, $fext)) {
-				}elseif ($this->checkPathForTemplate(OC_App::getAppPath($app)."/templates/", $name, $fext)) {
-				}
-			}else{
-				// Check if the template is overwritten by the selected theme
-				if ($this->checkPathForTemplate(OC::$SERVERROOT."/themes/$theme/$app/templates/", $name, $fext)) {
-				}elseif ($this->checkPathForTemplate(OC::$SERVERROOT."/$app/templates/", $name, $fext)) {
-				}else{
-					echo('template not found: template:'.$name.' formfactor:'.$fext
-						.' webroot:'.OC::$WEBROOT.' serverroot:'.OC::$SERVERROOT);
-					die();
-				}
-
-			}
-		}else{
-			// Check if the template is overwritten by the selected theme
-			if ($this->checkPathForTemplate(OC::$SERVERROOT."/themes/$theme/core/templates/", $name, $fext)) {
-			} elseif ($this->checkPathForTemplate(OC::$SERVERROOT."/core/templates/", $name, $fext)) {
-			}else{
-				echo('template not found: template:'.$name.' formfactor:'.$fext
-					.' webroot:'.OC::$WEBROOT.' serverroot:'.OC::$SERVERROOT);
-				die();
-			}
-		}
-	}
-
-	/**
-	 * @brief check Path For Template with and without $fext
-	 * @param string $path to check
-	 * @param string $name of the template file (without suffix)
-	 * @param string $fext formfactor extension
-	 * @return bool true when found
-	 *
-	 * Will set $this->template and $this->path if there is a template at
-	 * the specific $path
-	 */
-	protected function checkPathForTemplate($path, $name, $fext)
-	{
-		if ($name =='') return false;
-		$template = null;
-		if( is_file( $path.$name.$fext.'.php' )) {
-			$template = $path.$name.$fext.'.php';
-		}elseif( is_file( $path.$name.'.php' )) {
-			$template = $path.$name.'.php';
-		}
-		if ($template) {
-			$this->template = $template;
-			$this->path = $path;
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * @brief Assign variables
-	 * @param string $key key
-	 * @param string $value value
-	 * @return bool
-	 *
-	 * This function assigns a variable. It can be accessed via $_[$key] in
-	 * the template.
-	 *
-	 * If the key existed before, it will be overwritten
-	 */
-	public function assign( $key, $value) {
-		$this->vars[$key] = $value;
-		return true;
-	}
-
-	/**
-	 * @brief Appends a variable
-	 * @param string $key key
-	 * @param string $value value
-	 * @return bool
-	 *
-	 * This function assigns a variable in an array context. If the key already
-	 * exists, the value will be appended. It can be accessed via
-	 * $_[$key][$position] in the template.
-	 */
-	public function append( $key, $value ) {
-		if( array_key_exists( $key, $this->vars )) {
-			$this->vars[$key][] = $value;
-		}
-		else{
-			$this->vars[$key] = array( $value );
+		if( $app !== '' ) {
+			$dirs = $this->getAppTemplateDirs($theme, $app, OC::$SERVERROOT, OC_App::getAppPath($app));
+		} else {
+			$dirs = $this->getCoreTemplateDirs($theme, OC::$SERVERROOT);
 		}
+		$locator = new \OC\Template\TemplateFileLocator( $fext, $dirs );
+		$template = $locator->find($name);
+		$path = $locator->getPath();
+		return array($path, $template);
 	}
 
 	/**
 	 * @brief Add a custom element to the header
 	 * @param string $tag tag name of the element
-	 * @param array $attributes array of attrobutes for the element
+	 * @param array $attributes array of attributes for the element
 	 * @param string $text the text content for the element
 	 */
 	public function addHeader( $tag, $attributes, $text='') {
@@ -373,31 +181,14 @@ class OC_Template{
 	}
 
 	/**
-	 * @brief Prints the proceeded template
-	 * @return bool
-	 *
-	 * This function proceeds the template and prints its output.
-	 */
-	public function printPage() {
-		$data = $this->fetchPage();
-		if( $data === false ) {
-			return false;
-		}
-		else{
-			print $data;
-			return true;
-		}
-	}
-
-	/**
-	 * @brief Proceeds the template
+	 * @brief Process the template
 	 * @return bool
 	 *
-	 * This function proceeds the template. If $this->renderas is set, it
+	 * This function process the template. If $this->renderas is set, it
 	 * will produce a full page.
 	 */
 	public function fetchPage() {
-		$data = $this->_fetch();
+		$data = parent::fetchPage();
 
 		if( $this->renderas ) {
 			$page = new OC_TemplateLayout($this->renderas);
@@ -416,27 +207,6 @@ class OC_Template{
 		}
 	}
 
-	/**
-	 * @brief doing the actual work
-	 * @return string content
-	 *
-	 * Includes the template file, fetches its output
-	 */
-	private function _fetch() {
-		// Register the variables
-		$_ = $this->vars;
-		$l = $this->l10n;
-
-		// Execute the template
-		ob_start();
-		include $this->template; // <-- we have to use include because we pass $_!
-		$data = ob_get_contents();
-		@ob_end_clean();
-
-		// return the data
-		return $data;
-	}
-
 	/**
 	 * @brief Include template
 	 * @return string returns content of included template
@@ -445,21 +215,7 @@ class OC_Template{
 	 * do this.
 	 */
 	public function inc( $file, $additionalparams = null ) {
-		$_ = $this->vars;
-		$l = $this->l10n;
-
-		if( !is_null($additionalparams)) {
-			$_ = array_merge( $additionalparams, $this->vars );
-		}
-
-		// Include
-		ob_start();
-		include $this->path.$file.'.php';
-		$data = ob_get_contents();
-		@ob_end_clean();
-
-		// Return data
-		return $data;
+		return $this->load($this->path.$file.'.php', $additionalparams);
 	}
 
 	/**
@@ -509,8 +265,8 @@ class OC_Template{
 
 	/**
 		* @brief Print a fatal error page and terminates the script
-		* @param string $error The error message to show
-		* @param string $hint An optional hint message 
+		* @param string $error_msg The error message to show
+		* @param string $hint An optional hint message
 		* Warning: All data passed to $hint needs to get sanitized using OC_Util::sanitizeHTML
 		*/
 	public static function printErrorPage( $error_msg, $hint = '' ) {
diff --git a/lib/template/base.php b/lib/template/base.php
new file mode 100644
index 0000000000000000000000000000000000000000..88941bc7132d7144ee05d7eaa9875c50f2809ee7
--- /dev/null
+++ b/lib/template/base.php
@@ -0,0 +1,134 @@
+<?php
+/**
+ * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Template;
+
+class Base {
+	private $template; // The template
+	private $vars; // Vars
+	private $l10n; // The l10n-Object
+	private $theme; // theme defaults
+
+	public function __construct( $template, $requesttoken, $l10n, $theme ) {
+		$this->vars = array();
+		$this->vars['requesttoken'] = $requesttoken;
+		$this->l10n = $l10n;
+		$this->template = $template;
+		$this->theme = $theme;
+	}
+
+	protected function getAppTemplateDirs($theme, $app, $serverroot, $app_dir) {
+		// Check if the app is in the app folder or in the root
+		if( file_exists($app_dir.'/templates/' )) {
+			return array(
+				$serverroot.'/themes/'.$theme.'/apps/'.$app.'/templates/',
+				$app_dir.'/templates/',
+			);
+		}
+		return array(
+			$serverroot.'/themes/'.$theme.'/'.$app.'/templates/',
+			$serverroot.'/'.$app.'/templates/',
+		);
+	}
+
+	protected function getCoreTemplateDirs($theme, $serverroot) {
+		return array(
+			$serverroot.'/themes/'.$theme.'/core/templates/',
+			$serverroot.'/core/templates/',
+		);
+	}
+
+	/**
+	 * @brief Assign variables
+	 * @param string $key key
+	 * @param string $value value
+	 * @return bool
+	 *
+	 * This function assigns a variable. It can be accessed via $_[$key] in
+	 * the template.
+	 *
+	 * If the key existed before, it will be overwritten
+	 */
+	public function assign( $key, $value) {
+		$this->vars[$key] = $value;
+		return true;
+	}
+
+	/**
+	 * @brief Appends a variable
+	 * @param string $key key
+	 * @param string $value value
+	 * @return bool
+	 *
+	 * This function assigns a variable in an array context. If the key already
+	 * exists, the value will be appended. It can be accessed via
+	 * $_[$key][$position] in the template.
+	 */
+	public function append( $key, $value ) {
+		if( array_key_exists( $key, $this->vars )) {
+			$this->vars[$key][] = $value;
+		}
+		else{
+			$this->vars[$key] = array( $value );
+		}
+	}
+
+	/**
+	 * @brief Prints the proceeded template
+	 * @return bool
+	 *
+	 * This function proceeds the template and prints its output.
+	 */
+	public function printPage() {
+		$data = $this->fetchPage();
+		if( $data === false ) {
+			return false;
+		}
+		else{
+			print $data;
+			return true;
+		}
+	}
+
+	/**
+	 * @brief Process the template
+	 * @return bool
+	 *
+	 * This function processes the template.
+	 */
+	public function fetchPage() {
+		return $this->load($this->template);
+	}
+
+	/**
+	 * @brief doing the actual work
+	 * @return string content
+	 *
+	 * Includes the template file, fetches its output
+	 */
+	protected function load( $file, $additionalparams = null ) {
+		// Register the variables
+		$_ = $this->vars;
+		$l = $this->l10n;
+		$theme = $this->theme;
+
+		if( !is_null($additionalparams)) {
+			$_ = array_merge( $additionalparams, $this->vars );
+		}
+
+		// Include
+		ob_start();
+		include $file;
+		$data = ob_get_contents();
+		@ob_end_clean();
+
+		// Return data
+		return $data;
+	}
+
+}
diff --git a/lib/template/cssresourcelocator.php b/lib/template/cssresourcelocator.php
new file mode 100644
index 0000000000000000000000000000000000000000..8e7831ca549fa615d87cbb4176d27a813d058d55
--- /dev/null
+++ b/lib/template/cssresourcelocator.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Template;
+
+class CSSResourceLocator extends ResourceLocator {
+	public function doFind( $style ) {
+		if (strpos($style, '3rdparty') === 0
+			&& $this->appendIfExist($this->thirdpartyroot, $style.'.css')
+			|| $this->appendIfExist($this->serverroot, $style.$this->form_factor.'.css')
+			|| $this->appendIfExist($this->serverroot, $style.'.css')
+			|| $this->appendIfExist($this->serverroot, 'core/'.$style.$this->form_factor.'.css')
+			|| $this->appendIfExist($this->serverroot, 'core/'.$style.'.css')
+		) {
+			return;
+		}
+		$app = substr($style, 0, strpos($style, '/'));
+		$style = substr($style, strpos($style, '/')+1);
+		$app_path = \OC_App::getAppPath($app);
+		$app_url = $this->webroot . '/index.php/apps/' . $app;
+		if ($this->appendIfExist($app_path, $style.$this->form_factor.'.css', $app_url)
+			|| $this->appendIfExist($app_path, $style.'.css', $app_url)
+		) {
+			return;
+		}
+		throw new \Exception('css file not found: style:'.$style);
+	}
+
+	public function doFindTheme( $style ) {
+		$theme_dir = 'themes/'.$this->theme.'/';
+		$this->appendIfExist($this->serverroot, $theme_dir.'apps/'.$style.$this->form_factor.'.css')
+			|| $this->appendIfExist($this->serverroot, $theme_dir.'apps/'.$style.'.css')
+			|| $this->appendIfExist($this->serverroot, $theme_dir.$style.$this->form_factor.'.css')
+			|| $this->appendIfExist($this->serverroot, $theme_dir.$style.'.css')
+			|| $this->appendIfExist($this->serverroot, $theme_dir.'core/'.$style.$this->form_factor.'.css')
+			|| $this->appendIfExist($this->serverroot, $theme_dir.'core/'.$style.'.css');
+	}
+}
diff --git a/lib/template/functions.php b/lib/template/functions.php
new file mode 100644
index 0000000000000000000000000000000000000000..2d43cae1c0cc2cfce87c6c610471eecc051ff124
--- /dev/null
+++ b/lib/template/functions.php
@@ -0,0 +1,120 @@
+<?php
+/**
+ * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+/**
+ * Prints an XSS escaped string
+ * @param string $string the string which will be escaped and printed
+ */
+function p($string) {
+	print(OC_Util::sanitizeHTML($string));
+}
+
+/**
+ * Prints an unescaped string
+ * @param string $string the string which will be printed as it is
+ */
+function print_unescaped($string) {
+	print($string);
+}
+
+/**
+ * @brief make OC_Helper::linkTo available as a simple function
+ * @param string $app app
+ * @param string $file file
+ * @param array $args array with param=>value, will be appended to the returned url
+ * @return string link to the file
+ *
+ * For further information have a look at OC_Helper::linkTo
+ */
+function link_to( $app, $file, $args = array() ) {
+	return OC_Helper::linkTo( $app, $file, $args );
+}
+
+/**
+ * @brief make OC_Helper::imagePath available as a simple function
+ * @param string $app app
+ * @param string $image image
+ * @return string link to the image
+ *
+ * For further information have a look at OC_Helper::imagePath
+ */
+function image_path( $app, $image ) {
+	return OC_Helper::imagePath( $app, $image );
+}
+
+/**
+ * @brief make OC_Helper::mimetypeIcon available as a simple function
+ * @param string $mimetype mimetype
+ * @return string link to the image
+ *
+ * For further information have a look at OC_Helper::mimetypeIcon
+ */
+function mimetype_icon( $mimetype ) {
+	return OC_Helper::mimetypeIcon( $mimetype );
+}
+
+/**
+ * @brief make OC_Helper::humanFileSize available as a simple function
+ * @param int $bytes size in bytes
+ * @return string size as string
+ *
+ * For further information have a look at OC_Helper::humanFileSize
+ */
+function human_file_size( $bytes ) {
+	return OC_Helper::humanFileSize( $bytes );
+}
+
+function relative_modified_date($timestamp) {
+	$l=OC_L10N::get('lib');
+	$timediff = time() - $timestamp;
+	$diffminutes = round($timediff/60);
+	$diffhours = round($diffminutes/60);
+	$diffdays = round($diffhours/24);
+	$diffmonths = round($diffdays/31);
+
+	if($timediff < 60) { return $l->t('seconds ago'); }
+	else if($timediff < 120) { return $l->t('1 minute ago'); }
+	else if($timediff < 3600) { return $l->t('%d minutes ago', $diffminutes); }
+	else if($timediff < 7200) { return $l->t('1 hour ago'); }
+	else if($timediff < 86400) { return $l->t('%d hours ago', $diffhours); }
+	else if((date('G')-$diffhours) > 0) { return $l->t('today'); }
+	else if((date('G')-$diffhours) > -24) { return $l->t('yesterday'); }
+	else if($timediff < 2678400) { return $l->t('%d days ago', $diffdays); }
+	else if($timediff < 5184000) { return $l->t('last month'); }
+	else if((date('n')-$diffmonths) > 0) { return $l->t('%d months ago', $diffmonths); }
+	else if($timediff < 63113852) { return $l->t('last year'); }
+	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="' . OC_Util::sanitizeHTML($value) . '"' . $select . '>' . OC_Util::sanitizeHTML($label) . '</option>'."\n";
+	}
+	return $html;
+}
diff --git a/lib/template/jsresourcelocator.php b/lib/template/jsresourcelocator.php
new file mode 100644
index 0000000000000000000000000000000000000000..f8fe3817ce60a4d40151d5516ae505d1f27f67a5
--- /dev/null
+++ b/lib/template/jsresourcelocator.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Template;
+
+class JSResourceLocator extends ResourceLocator {
+	public function doFind( $script ) {
+		$theme_dir = 'themes/'.$this->theme.'/';
+		if (strpos($script, '3rdparty') === 0
+			&& $this->appendIfExist($this->thirdpartyroot, $script.'.js')
+			|| $this->appendIfExist($this->serverroot, $theme_dir.'apps/'.$script.$this->form_factor.'.js')
+			|| $this->appendIfExist($this->serverroot, $theme_dir.'apps/'.$script.'.js')
+			|| $this->appendIfExist($this->serverroot, $theme_dir.$script.$this->form_factor.'.js')
+			|| $this->appendIfExist($this->serverroot, $theme_dir.$script.'.js')
+			|| $this->appendIfExist($this->serverroot, $script.$this->form_factor.'.js')
+			|| $this->appendIfExist($this->serverroot, $script.'.js')
+			|| $this->appendIfExist($this->serverroot, $theme_dir.'core/'.$script.$this->form_factor.'.js')
+			|| $this->appendIfExist($this->serverroot, $theme_dir.'core/'.$script.'.js')
+			|| $this->appendIfExist($this->serverroot, 'core/'.$script.$this->form_factor.'.js')
+			|| $this->appendIfExist($this->serverroot, 'core/'.$script.'.js')
+		) {
+			return;
+		}
+		$app = substr($script, 0, strpos($script, '/'));
+		$script = substr($script, strpos($script, '/')+1);
+		$app_path = \OC_App::getAppPath($app);
+		$app_url = \OC_App::getAppWebPath($app);
+		if ($this->appendIfExist($app_path, $script.$this->form_factor.'.js', $app_url)
+			|| $this->appendIfExist($app_path, $script.'.js', $app_url)
+		) {
+			return;
+		}
+		throw new \Exception('js file not found: script:'.$script);
+	}
+
+	public function doFindTheme( $script ) {
+	}
+}
diff --git a/lib/template/resourcelocator.php b/lib/template/resourcelocator.php
new file mode 100644
index 0000000000000000000000000000000000000000..9f83673664dfbe6d3923cf3d8aa0b9e8637cdb7c
--- /dev/null
+++ b/lib/template/resourcelocator.php
@@ -0,0 +1,70 @@
+<?php
+/**
+ * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Template;
+
+abstract class ResourceLocator {
+	protected $theme;
+	protected $form_factor;
+
+	protected $mapping;
+	protected $serverroot;
+	protected $thirdpartyroot;
+	protected $webroot;
+
+	protected $resources = array();
+
+	public function __construct( $theme, $form_factor, $core_map, $party_map ) {
+		$this->theme = $theme;
+		$this->form_factor = $form_factor;
+		$this->mapping = $core_map + $party_map;
+		$this->serverroot = key($core_map);
+		$this->thirdpartyroot = key($party_map);
+		$this->webroot = $this->mapping[$this->serverroot];
+	}
+
+	abstract public function doFind( $resource );
+	abstract public function doFindTheme( $resource );
+
+	public function find( $resources ) {
+		try {
+			foreach($resources as $resource) {
+				$this->doFind($resource);
+			}
+			if (!empty($this->theme)) {
+				foreach($resources as $resource) {
+					$this->doFindTheme($resource);
+				}
+			}
+		} catch (\Exception $e) {
+			throw new \Exception($e->getMessage().' formfactor:'.$this->form_factor
+						.' serverroot:'.$this->serverroot);
+		}
+	}
+
+	/*
+	 * @brief append the $file resource if exist at $root
+	 * @param $root path to check
+	 * @param $file the filename
+	 * @param $web base for path, default map $root to $webroot
+	 */
+	protected function appendIfExist($root, $file, $webroot = null) {
+		if (is_file($root.'/'.$file)) {
+			if (!$webroot) {
+				$webroot = $this->mapping[$root];
+			}
+			$this->resources[] = array($root, $webroot, $file);
+			return true;
+		}
+		return false;
+	}
+
+	public function getResources() {
+		return $this->resources;
+	}
+}
diff --git a/lib/template/templatefilelocator.php b/lib/template/templatefilelocator.php
new file mode 100644
index 0000000000000000000000000000000000000000..d5a484b1a1475bec7f15faa40b11ef6085f8671f
--- /dev/null
+++ b/lib/template/templatefilelocator.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Template;
+
+class TemplateFileLocator {
+	protected $form_factor;
+	protected $dirs;
+	private $path;
+
+	public function __construct( $form_factor, $dirs ) {
+		$this->form_factor = $form_factor;
+		$this->dirs = $dirs;
+	}
+
+	public function find( $template ) {
+		if ($template === '') {
+			throw new \InvalidArgumentException('Empty template name');
+		}
+
+		foreach($this->dirs as $dir) {
+			$file = $dir.$template.$this->form_factor.'.php';
+			if (is_file($file)) {
+				$this->path = $dir;
+				return $file;
+			}
+			$file = $dir.$template.'.php';
+			if (is_file($file)) {
+				$this->path = $dir;
+				return $file;
+			}
+		}
+		throw new \Exception('template file not found: template:'.$template.' formfactor:'.$this->form_factor);
+	}
+
+	public function getPath() {
+		return $this->path;
+	}
+}
diff --git a/lib/templatelayout.php b/lib/templatelayout.php
index 7115b8f03063092de620bf3646a72c7abde0ac8b..0024c9d4960dc5383ca5f2657a25e5ba2964d459 100644
--- a/lib/templatelayout.php
+++ b/lib/templatelayout.php
@@ -83,21 +83,6 @@ class OC_TemplateLayout extends OC_Template {
 		}
 	}
 
-	/*
-	 * @brief append the $file-url if exist at $root
-	 * @param $files array to append file info to
-	 * @param $root path to check
-	 * @param $web base for path
-	 * @param $file the filename
-	 */
-	static public function appendIfExist(&$files, $root, $webroot, $file) {
-		if (is_file($root.'/'.$file)) {
-			$files[] = array($root, $webroot, $file);
-			return true;
-		}
-		return false;
-	}
-
 	static public function findStylesheetFiles($styles) {
 		// Read the selected theme from the config file
 		$theme = OC_Util::getTheme();
@@ -105,51 +90,11 @@ class OC_TemplateLayout extends OC_Template {
 		// Read the detected formfactor and use the right file name.
 		$fext = self::getFormFactorExtension();
 
-		$files = array();
-		foreach($styles as $style) {
-			// is it in 3rdparty?
-			if(strpos($style, '3rdparty') === 0 &&
-				self::appendIfExist($files, OC::$THIRDPARTYROOT, OC::$THIRDPARTYWEBROOT, $style.'.css')) {
-
-			// or in the owncloud root?
-			}elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "$style$fext.css" )) {
-			}elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "$style.css" )) {
-
-			// or in core ?
-			}elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "core/$style$fext.css" )) {
-			}elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "core/$style.css" )) {
-
-			}else{
-				$app = substr($style, 0, strpos($style, '/'));
-				$style = substr($style, strpos($style, '/')+1);
-				$app_path = OC_App::getAppPath($app);
-				$app_url = OC::$WEBROOT . '/index.php/apps/' . $app;
-				if(self::appendIfExist($files, $app_path, $app_url, "$style$fext.css")) {
-				}
-				elseif(self::appendIfExist($files, $app_path, $app_url, "$style.css")) {
-				}
-				else {
-					echo('css file not found: style:'.$style.' formfactor:'.$fext
-						.' webroot:'.OC::$WEBROOT.' serverroot:'.OC::$SERVERROOT);
-					die();
-				}
-			}
-		}
-		// Add the theme css files. you can override the default values here
-		if(!empty($theme)) {
-			foreach($styles as $style) {
-				     if(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/apps/$style$fext.css" )) {
-				}elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/apps/$style.css" )) {
-
-				}elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/$style$fext.css" )) {
-				}elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/$style.css" )) {
-
-				}elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/core/$style$fext.css" )) {
-				}elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/core/$style.css" )) {
-				}
-			}
-		}
-		return $files;
+		$locator = new \OC\Template\CSSResourceLocator( $theme, $fext,
+			array( OC::$SERVERROOT => OC::$WEBROOT ),
+			array( OC::$THIRDPARTYROOT => OC::$THIRDPARTYWEBROOT ));
+		$locator->find($styles);
+		return $locator->getResources();
 	}
 
 	static public function findJavascriptFiles($scripts) {
@@ -159,49 +104,10 @@ class OC_TemplateLayout extends OC_Template {
 		// Read the detected formfactor and use the right file name.
 		$fext = self::getFormFactorExtension();
 
-		$files = array();
-		foreach($scripts as $script) {
-			// Is it in 3rd party?
-			if(strpos($script, '3rdparty') === 0 &&
-				self::appendIfExist($files, OC::$THIRDPARTYROOT, OC::$THIRDPARTYWEBROOT, $script.'.js')) {
-
-			// Is it in apps and overwritten by the theme?
-			}elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/apps/$script$fext.js" )) {
-			}elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/apps/$script.js" )) {
-
-			// Is it in the owncloud root but overwritten by the theme?
-			}elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/$script$fext.js" )) {
-			}elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/$script.js" )) {
-
-			// Is it in the owncloud root ?
-			}elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "$script$fext.js" )) {
-			}elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "$script.js" )) {
-
-			// Is in core but overwritten by a theme?
-			}elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/core/$script$fext.js" )) {
-			}elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/core/$script.js" )) {
-
-			// Is it in core?
-			}elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "core/$script$fext.js" )) {
-			}elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "core/$script.js" )) {
-
-			}else{
-				// Is it part of an app?
-				$app = substr($script, 0, strpos($script, '/'));
-				$script = substr($script, strpos($script, '/')+1);
-				$app_path = OC_App::getAppPath($app);
-				$app_url = OC_App::getAppWebPath($app);
-				if(self::appendIfExist($files, $app_path, $app_url, "$script$fext.js")) {
-				}
-				elseif(self::appendIfExist($files, $app_path, $app_url, "$script.js")) {
-				}
-				else {
-					echo('js file not found: script:'.$script.' formfactor:'.$fext
-						.' webroot:'.OC::$WEBROOT.' serverroot:'.OC::$SERVERROOT);
-					die();
-				}
-			}
-		}
-		return $files;
+		$locator = new \OC\Template\JSResourceLocator( $theme, $fext,
+			array( OC::$SERVERROOT => OC::$WEBROOT ),
+			array( OC::$THIRDPARTYROOT => OC::$THIRDPARTYWEBROOT ));
+		$locator->find($scripts);
+		return $locator->getResources();
 	}
 }
diff --git a/lib/user.php b/lib/user.php
index d93ab1a5f73802ec650bd4dc04a497061632a610..ee20f2e097197ff0ccda47a800abe9704b121375 100644
--- a/lib/user.php
+++ b/lib/user.php
@@ -39,7 +39,7 @@
 class OC_User {
 	public static $userSession = null;
 
-	private static function getUserSession() {
+	public static function getUserSession() {
 		if (!self::$userSession) {
 			$manager = new \OC\User\Manager();
 			self::$userSession = new \OC\User\Session($manager, \OC::$session);
@@ -83,7 +83,7 @@ class OC_User {
 	/**
 	 * @return \OC\User\Manager
 	 */
-	private static function getManager() {
+	public static function getManager() {
 		return self::getUserSession()->getManager();
 	}
 
diff --git a/lib/user/manager.php b/lib/user/manager.php
index d17cdf1a200790dcc815edfc1f231d1dcfd9e1d7..8dc9bfe27297a31cad756eeceaf3f74cd25ef095 100644
--- a/lib/user/manager.php
+++ b/lib/user/manager.php
@@ -30,6 +30,9 @@ class Manager extends PublicEmitter {
 	 */
 	private $backends = array();
 
+	/**
+	 * @var \OC\User\User[] $cachedUsers
+	 */
 	private $cachedUsers = array();
 
 	public function __construct() {
diff --git a/lib/user/user.php b/lib/user/user.php
index 55d7848a979c80e8b229cb41949e22f979709ad3..8115c43198cde309baac391334dca7ab1ef3ba56 100644
--- a/lib/user/user.php
+++ b/lib/user/user.php
@@ -44,7 +44,7 @@ class User {
 	 */
 	public function __construct($uid, $backend, $emitter = null) {
 		$this->uid = $uid;
-		if ($backend->implementsActions(OC_USER_BACKEND_GET_DISPLAYNAME)) {
+		if ($backend and $backend->implementsActions(OC_USER_BACKEND_GET_DISPLAYNAME)) {
 			$this->displayName = $backend->getDisplayName($uid);
 		} else {
 			$this->displayName = $uid;
diff --git a/settings/l10n/de.php b/settings/l10n/de.php
index d1b5ceb888a4930165f5eccc7759242a7e02dfd4..b32790f26e0de09488dab27dff6d8e9ddcc7dedf 100644
--- a/settings/l10n/de.php
+++ b/settings/l10n/de.php
@@ -56,6 +56,8 @@
 "Allow apps to use the Share API" => "Erlaubt Apps die Nutzung der Share-API",
 "Allow links" => "Erlaubt Links",
 "Allow users to share items to the public with links" => "Erlaubt Benutzern, Inhalte über öffentliche Links zu teilen",
+"Allow public uploads" => "Öffentliches Hochladen erlauben",
+"Allow users to enable others to upload into their publicly shared folders" => "Erlaubt Benutzern die Freigabe anderer Benutzer in ihren öffentlich freigegebene Ordner hochladen zu dürfen",
 "Allow resharing" => "Erlaubt erneutes Teilen",
 "Allow users to share items shared with them again" => "Erlaubt Benutzern, mit ihnen geteilte Inhalte erneut zu teilen",
 "Allow users to share with anyone" => "Erlaubt Benutzern, mit jedem zu teilen",
diff --git a/settings/l10n/de_DE.php b/settings/l10n/de_DE.php
index ff71cbdd0fa1ff4a5b95fae0c638c2ed996af0bb..07003169c3f20d2707ae1d894cc842d2047173ef 100644
--- a/settings/l10n/de_DE.php
+++ b/settings/l10n/de_DE.php
@@ -56,6 +56,8 @@
 "Allow apps to use the Share API" => "Anwendungen erlauben, die Share-API zu benutzen",
 "Allow links" => "Links erlauben",
 "Allow users to share items to the public with links" => "Benutzern erlauben, Inhalte per öffentlichem Link zu teilen",
+"Allow public uploads" => "Erlaube öffentliches hochladen",
+"Allow users to enable others to upload into their publicly shared folders" => "Erlaubt Benutzern die Freigabe anderer Benutzer in ihren öffentlich freigegebene Ordner hochladen zu dürfen",
 "Allow resharing" => "Erlaube Weiterverteilen",
 "Allow users to share items shared with them again" => "Erlaubt Benutzern, mit ihnen geteilte Inhalte erneut zu teilen",
 "Allow users to share with anyone" => "Erlaubt Benutzern, mit jedem zu teilen",
diff --git a/settings/l10n/el.php b/settings/l10n/el.php
index 7ef677bc746e5594833a024dd02c4be61b9110e6..a9f7f1fd18b7c9ee2fe5d4b4bda2983dd92cd016 100644
--- a/settings/l10n/el.php
+++ b/settings/l10n/el.php
@@ -98,6 +98,7 @@
 "Language" => "Γλώσσα",
 "Help translate" => "Βοηθήστε στη μετάφραση",
 "WebDAV" => "WebDAV",
+"Use this address to <a href=\"%s/server/5.0/user_manual/files/files.html\" target=\"_blank\">access your Files via WebDAV</a>" => "Χρήση αυτής της διεύθυνσης για <a href=\"%s/server/5.0/user_manual/files/files.html\" target=\"_blank\">πρόσβαση των αρχείων σας μέσω WebDAV</a>",
 "Login Name" => "Όνομα Σύνδεσης",
 "Create" => "Δημιουργία",
 "Admin Recovery Password" => "Κωδικός Επαναφοράς Διαχειριστή ",
diff --git a/settings/l10n/et_EE.php b/settings/l10n/et_EE.php
index 30d0956a7e9c3babc6639ab9825b259fde5c0f8c..1e5b35989b5f69be016a007d46c8481181be83c6 100644
--- a/settings/l10n/et_EE.php
+++ b/settings/l10n/et_EE.php
@@ -56,6 +56,8 @@
 "Allow apps to use the Share API" => "Luba rakendustel kasutada Share API-t",
 "Allow links" => "Luba lingid",
 "Allow users to share items to the public with links" => "Luba kasutajatel jagada kirjeid avalike linkidega",
+"Allow public uploads" => "Luba avalikud üleslaadimised",
+"Allow users to enable others to upload into their publicly shared folders" => "Luba kasutajatel üleslaadimine teiste poolt oma avalikult jagatud kataloogidesse ",
 "Allow resharing" => "Luba edasijagamine",
 "Allow users to share items shared with them again" => "Luba kasutajatel jagada edasi kirjeid, mida on neile jagatud",
 "Allow users to share with anyone" => "Luba kasutajatel kõigiga jagada",
diff --git a/settings/l10n/gl.php b/settings/l10n/gl.php
index 16b10158c8cab6bf3cb7492ab14b0f22b45106f0..e871ad2a099d02d14dc4be9fd9f7f8ad3d23ac56 100644
--- a/settings/l10n/gl.php
+++ b/settings/l10n/gl.php
@@ -56,6 +56,8 @@
 "Allow apps to use the Share API" => "Permitir que os aplicativos empreguen o API para compartir",
 "Allow links" => "Permitir ligazóns",
 "Allow users to share items to the public with links" => "Permitir que os usuarios compartan elementos ao público con ligazóns",
+"Allow public uploads" => "Permitir os envíos públicos",
+"Allow users to enable others to upload into their publicly shared folders" => "Permitir que os usuarios lle permitan a outros enviar aos seus cartafoles compartidos publicamente",
 "Allow resharing" => "Permitir compartir",
 "Allow users to share items shared with them again" => "Permitir que os usuarios compartan de novo os elementos compartidos con eles",
 "Allow users to share with anyone" => "Permitir que os usuarios compartan con calquera",
diff --git a/settings/l10n/it.php b/settings/l10n/it.php
index e95adbf3c71b268e62099b1187d28446303c9566..995be0e99800524930e06866437aed4d929f61b8 100644
--- a/settings/l10n/it.php
+++ b/settings/l10n/it.php
@@ -56,6 +56,8 @@
 "Allow apps to use the Share API" => "Consenti alle applicazioni di utilizzare le API di condivisione",
 "Allow links" => "Consenti collegamenti",
 "Allow users to share items to the public with links" => "Consenti agli utenti di condividere pubblicamente elementi tramite collegamenti",
+"Allow public uploads" => "Consenti caricamenti pubblici",
+"Allow users to enable others to upload into their publicly shared folders" => "Consenti agli utenti di abilitare altri al caricamento nelle loro cartelle pubbliche condivise",
 "Allow resharing" => "Consenti la ri-condivisione",
 "Allow users to share items shared with them again" => "Consenti agli utenti di condividere a loro volta elementi condivisi da altri",
 "Allow users to share with anyone" => "Consenti agli utenti di condividere con chiunque",
diff --git a/settings/l10n/pt_BR.php b/settings/l10n/pt_BR.php
index b33aa5ba50ce670c3d8f8a53132f65c2df402241..a728c26689aea463545fabc8a60a003196edf5a5 100644
--- a/settings/l10n/pt_BR.php
+++ b/settings/l10n/pt_BR.php
@@ -56,6 +56,8 @@
 "Allow apps to use the Share API" => "Permitir que aplicativos usem a API de Compartilhamento",
 "Allow links" => "Permitir links",
 "Allow users to share items to the public with links" => "Permitir que usuários compartilhem itens com o público usando links",
+"Allow public uploads" => "Permitir envio público",
+"Allow users to enable others to upload into their publicly shared folders" => "Permitir que usuários deem permissão a outros para enviarem arquivios para suas pastas compartilhadas publicamente",
 "Allow resharing" => "Permitir recompartilhamento",
 "Allow users to share items shared with them again" => "Permitir que usuários compartilhem novamente itens compartilhados com eles",
 "Allow users to share with anyone" => "Permitir que usuários compartilhem com qualquer um",
diff --git a/settings/templates/admin.php b/settings/templates/admin.php
index 057d527db738058c2484d1a5002bca071f0b0cf3..2b14c1460d6b538316c50dc9c98c170a1079dee0 100644
--- a/settings/templates/admin.php
+++ b/settings/templates/admin.php
@@ -4,8 +4,6 @@
  * See the COPYING-README file.
  */
 $levels = array('Debug', 'Info', 'Warning', 'Error', 'Fatal');
-
-$defaults = new OC_Defaults(); // initialize themable default strings and urls
 ?>
 
 <?php
@@ -17,7 +15,7 @@ if (!$_['htaccessworking']) {
 	<legend><strong><?php p($l->t('Security Warning'));?></strong></legend>
 
 	<span class="securitywarning">
-		<?php p($l->t('Your data directory and your files are probably accessible from the internet. The .htaccess file that ownCloud provides is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root.')); ?>
+		<?php p($l->t('Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root.')); ?>
 	</span>
 
 </fieldset>
@@ -32,7 +30,7 @@ if (!$_['isWebDavWorking']) {
 
 	<span class="securitywarning">
 		<?php p($l->t('Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken.')); ?>
-		<?php print_unescaped($l->t('Please double check the <a href=\'%s\'>installation guides</a>.', 'http://doc.owncloud.org/server/5.0/admin_manual/installation.html')); ?>
+		<?php print_unescaped($l->t('Please double check the <a href="%s">installation guides</a>.', $theme->getDocBaseUrl().'/server/5.0/admin_manual/installation.html')); ?>
 	</span>
 
 </fieldset>
@@ -62,7 +60,7 @@ if (!$_['islocaleworking']) {
 		<span class="connectionwarning">
 		<?php
 			$locales = 'en_US.UTF-8/en_US.UTF8';
-			p($l->t('This ownCloud server can\'t set system locale to %s. This means that there might be problems with certain characters in file names. We strongly suggest to install the required packages on your system to support %s.', array($locales, $locales)));
+			p($l->t('System locale can\'t be set to %s. This means that there might be problems with certain characters in file names. We strongly suggest to install the required packages on your system to support %s.', array($locales, $locales)));
 			?>
 	</span>
 
@@ -77,7 +75,7 @@ if (!$_['internetconnectionworking']) {
 	<legend><strong><?php p($l->t('Internet connection not working'));?></strong></legend>
 
 		<span class="connectionwarning">
-		<?php p($l->t('This ownCloud server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features of ownCloud.')); ?>
+		<?php p($l->t('This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features.')); ?>
 	</span>
 
 </fieldset>
@@ -110,7 +108,7 @@ if (!$_['internetconnectionworking']) {
 					print_unescaped('checked="checked"');
 				} ?>>
 				<label for="backgroundjobs_webcron">Webcron</label><br/>
-				<em><?php p($l->t("cron.php is registered at a webcron service. Call the cron.php page in the owncloud root once a minute over http.")); ?></em>
+				<em><?php p($l->t("cron.php is registered at a webcron service to call cron.php once a minute over http.")); ?></em>
 			</td>
 		</tr>
 		<tr>
@@ -120,7 +118,7 @@ if (!$_['internetconnectionworking']) {
 					print_unescaped('checked="checked"');
 				} ?>>
 				<label for="backgroundjobs_cron">Cron</label><br/>
-				<em><?php p($l->t("Use systems cron service. Call the cron.php file in the owncloud folder via a system cronjob once a minute.")); ?></em>
+				<em><?php p($l->t("Use systems cron service to call the cron.php file once a minute.")); ?></em>
 			</td>
 		</tr>
 	</table>
@@ -191,10 +189,16 @@ if (!$_['internetconnectionworking']) {
 					?>
 					<?php if (!$_['isConnectedViaHTTPS']) p('disabled'); ?> />
 				<label for="forcessl"><?php p($l->t('Enforce HTTPS'));?></label><br/>
-				<em><?php p($l->t('Enforces the clients to connect to ownCloud via an encrypted connection.')); ?></em>
+				<em><?php p($l->t(
+					'Forces the clients to connect to %s via an encrypted connection.',
+					$theme->getName()
+				)); ?></em>
 				<?php if (!$_['isConnectedViaHTTPS']) {
 					print_unescaped("<br/><em>");
-					p($l->t('Please connect to this ownCloud instance via HTTPS to enable or disable the SSL enforcement.'));
+					p($l->t(
+						'Please connect to your %s via HTTPS to enable or disable the SSL enforcement.',
+						$theme->getName()
+					));
 					print_unescaped("</em>");
 				}
 				?>
@@ -244,7 +248,7 @@ endfor;?>
 
 <fieldset class="personalblock">
 	<legend><strong><?php p($l->t('Version'));?></strong></legend>
-	<strong><?php p($defaults->getName()); ?></strong> <?php p(OC_Util::getVersionString()); ?>
+	<strong><?php p($theme->getTitle()); ?></strong> <?php p(OC_Util::getVersionString()); ?>
 <?php if (OC_Util::getEditionString() === ''): ?>
 	<p>
 		<?php print_unescaped($l->t('Developed by the <a href="http://ownCloud.org/contact" target="_blank">ownCloud community</a>, the <a href="https://github.com/owncloud" target="_blank">source code</a> is licensed under the <a href="http://www.gnu.org/licenses/agpl-3.0.html" target="_blank"><abbr title="Affero General Public License">AGPL</abbr></a>.')); ?>
@@ -253,6 +257,6 @@ endfor;?>
 </fieldset>
 <fieldset class="personalblock credits-footer">
 <p>
-	<?php print_unescaped($defaults->getShortFooter()); ?>
+	<?php print_unescaped($theme->getShortFooter()); ?>
 </p>
 </fieldset>
diff --git a/settings/templates/personal.php b/settings/templates/personal.php
index ee5ebae708ffa022755a61f3d151dff67444640c..b9d9b09f5d0149b7416a1eef743991a1a9cf346f 100644
--- a/settings/templates/personal.php
+++ b/settings/templates/personal.php
@@ -4,8 +4,6 @@
  * See the COPYING-README file.
  */?>
 
-<?php $defaults = new OC_Defaults(); // initialize themable default strings and urls ?>
-
 <div class="clientsbox">
 	<h2><?php p($l->t('Get the apps to sync your files'));?></h2>
 	<a href="<?php p($_['clients']['desktop']); ?>" target="_blank">
@@ -105,7 +103,7 @@ if($_['passwordChangeSupported']) {
 <fieldset class="personalblock">
 	<legend><strong><?php p($l->t('WebDAV'));?></strong></legend>
 	<code><?php print_unescaped(OC_Helper::linkToRemote('webdav')); ?></code><br />
-	<em><?php print_unescaped($l->t('Use this address to <a href="%s/server/5.0/user_manual/files/files.html" target="_blank">access your Files via WebDAV</a>', array($defaults->getDocBaseUrl())));?></em>
+	<em><?php print_unescaped($l->t('Use this address to <a href="%s/server/5.0/user_manual/files/files.html" target="_blank">access your Files via WebDAV</a>', array($theme->getDocBaseUrl())));?></em>
 </fieldset>
 
 <?php foreach($_['forms'] as $form) {
@@ -114,13 +112,13 @@ if($_['passwordChangeSupported']) {
 
 <fieldset class="personalblock">
 	<legend><strong><?php p($l->t('Version'));?></strong></legend>
-	<strong><?php p($defaults->getName()); ?></strong> <?php p(OC_Util::getVersionString()); ?><br/>
+	<strong><?php p($theme->getName()); ?></strong> <?php p(OC_Util::getVersionString()); ?><br/>
 <?php if (OC_Util::getEditionString() === ''): ?>
 	<?php print_unescaped($l->t('Developed by the <a href="http://ownCloud.org/contact" target="_blank">ownCloud community</a>, the <a href="https://github.com/owncloud" target="_blank">source code</a> is licensed under the <a href="http://www.gnu.org/licenses/agpl-3.0.html" target="_blank"><abbr title="Affero General Public License">AGPL</abbr></a>.')); ?>
 <?php endif; ?>
 </fieldset>
 <fieldset class="personalblock credits-footer">
 <p>
-	<?php print_unescaped($defaults->getShortFooter()); ?>
+	<?php print_unescaped($theme->getShortFooter()); ?>
 </p>
 </fieldset>
diff --git a/tests/lib/config.php b/tests/lib/config.php
index 1a1d062d6882626154f81c47c8540580425505fb..c67a66c832e4afd1fd96a3e69e87d7707e515275 100644
--- a/tests/lib/config.php
+++ b/tests/lib/config.php
@@ -80,17 +80,6 @@ class Test_Config extends PHPUnit_Framework_TestCase {
 	 */
 	public function testWriteData() {
 		$config = new OC\Config('/non-writable');
-		// TODO never get's called, because the previous call throws the exception
-		// maybe include some more logic to create a readable dir and then try to
-		// write to this dir
-		//
-		// console commands:
-		// $ sudo touch /non-writableconfig.php
-		// $ sudo chmod go-rwx /non-writableconfig.php
-		// ---- call the tests now -> above statemant throws the exception
-		//
-		// $ sudo chmod go+r /non-writableconfig.php
-		// ---- call the tests now -> bellow statemant throws the exception
 		$config->setValue('foo', 'bar');
 	}
 }
diff --git a/tests/lib/group.php b/tests/lib/group.php
index 9128bd7ddce741b3c6f4a5b6f31b5f90213c55e1..d2c9ce461483e53f57cdea49ad1b986016edd9d1 100644
--- a/tests/lib/group.php
+++ b/tests/lib/group.php
@@ -1,56 +1,61 @@
 <?php
 /**
-* ownCloud
-*
-* @author Robin Appelman
-* @author Bernhard Posselt
-* @copyright 2012 Robin Appelman icewind@owncloud.com
-* @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
-*
-* 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/>.
-*
-*/
+ * ownCloud
+ *
+ * @author Robin Appelman
+ * @author Bernhard Posselt
+ * @copyright 2012 Robin Appelman icewind@owncloud.com
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * 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/>.
+ *
+ */
 
 class Test_Group extends PHPUnit_Framework_TestCase {
 	function setUp() {
 		OC_Group::clearBackends();
+		OC_User::clearBackends();
 	}
 
 	function testSingleBackend() {
+		$userBackend = new \OC_User_Dummy();
+		\OC_User::getManager()->registerBackend($userBackend);
 		OC_Group::useBackend(new OC_Group_Dummy());
-		
-		$group1=uniqid();
-		$group2=uniqid();
+
+		$group1 = uniqid();
+		$group2 = uniqid();
 		OC_Group::createGroup($group1);
 		OC_Group::createGroup($group2);
 
-		$user1=uniqid();
-		$user2=uniqid();
+		$user1 = uniqid();
+		$user2 = uniqid();
+		$userBackend->createUser($user1, '');
+		$userBackend->createUser($user2, '');
 
 		$this->assertFalse(OC_Group::inGroup($user1, $group1));
 		$this->assertFalse(OC_Group::inGroup($user2, $group1));
 		$this->assertFalse(OC_Group::inGroup($user1, $group2));
 		$this->assertFalse(OC_Group::inGroup($user2, $group2));
 
-		$this->assertTrue((bool)OC_Group::addToGroup($user1, $group1));
+		$this->assertTrue(OC_Group::addToGroup($user1, $group1));
 
 		$this->assertTrue(OC_Group::inGroup($user1, $group1));
 		$this->assertFalse(OC_Group::inGroup($user2, $group1));
 		$this->assertFalse(OC_Group::inGroup($user1, $group2));
 		$this->assertFalse(OC_Group::inGroup($user2, $group2));
 
-		$this->assertFalse((bool)OC_Group::addToGroup($user1, $group1));
+		$this->assertTrue(OC_Group::addToGroup($user1, $group1));
 
 		$this->assertEquals(array($user1), OC_Group::usersInGroup($group1));
 		$this->assertEquals(array(), OC_Group::usersInGroup($group2));
@@ -65,37 +70,37 @@ class Test_Group extends PHPUnit_Framework_TestCase {
 	}
 
 
-	public function testNoEmptyGIDs(){
+	public function testNoEmptyGIDs() {
 		OC_Group::useBackend(new OC_Group_Dummy());
 		$emptyGroup = null;
 
-		$this->assertEquals(false, OC_Group::createGroup($emptyGroup));
+		$this->assertFalse(OC_Group::createGroup($emptyGroup));
 	}
 
 
-	public function testNoGroupsTwice(){
+	public function testNoGroupsTwice() {
 		OC_Group::useBackend(new OC_Group_Dummy());
 		$group = uniqid();
 		OC_Group::createGroup($group);
 
 		$groupCopy = $group;
 
-		$this->assertEquals(false, OC_Group::createGroup($groupCopy));
+		OC_Group::createGroup($groupCopy);
 		$this->assertEquals(array($group), OC_Group::getGroups());
 	}
 
 
-	public function testDontDeleteAdminGroup(){
+	public function testDontDeleteAdminGroup() {
 		OC_Group::useBackend(new OC_Group_Dummy());
 		$adminGroup = 'admin';
 		OC_Group::createGroup($adminGroup);
 
-		$this->assertEquals(false, OC_Group::deleteGroup($adminGroup));
+		$this->assertFalse(OC_Group::deleteGroup($adminGroup));
 		$this->assertEquals(array($adminGroup), OC_Group::getGroups());
 	}
 
 
-	public function testDontAddUserToNonexistentGroup(){
+	public function testDontAddUserToNonexistentGroup() {
 		OC_Group::useBackend(new OC_Group_Dummy());
 		$groupNonExistent = 'notExistent';
 		$user = uniqid();
@@ -105,8 +110,11 @@ class Test_Group extends PHPUnit_Framework_TestCase {
 	}
 
 
-	public function testUsersInGroup(){
+	public function testUsersInGroup() {
 		OC_Group::useBackend(new OC_Group_Dummy());
+		$userBackend = new \OC_User_Dummy();
+		\OC_User::getManager()->registerBackend($userBackend);
+
 		$group1 = uniqid();
 		$group2 = uniqid();
 		$group3 = uniqid();
@@ -117,27 +125,32 @@ class Test_Group extends PHPUnit_Framework_TestCase {
 		OC_Group::createGroup($group2);
 		OC_Group::createGroup($group3);
 
+		$userBackend->createUser($user1, '');
+		$userBackend->createUser($user2, '');
+		$userBackend->createUser($user3, '');
+
 		OC_Group::addToGroup($user1, $group1);
 		OC_Group::addToGroup($user2, $group1);
 		OC_Group::addToGroup($user3, $group1);
 		OC_Group::addToGroup($user3, $group2);
 
 		$this->assertEquals(array($user1, $user2, $user3),
-					OC_Group::usersInGroups(array($group1, $group2, $group3)));
+			OC_Group::usersInGroups(array($group1, $group2, $group3)));
 
 		// FIXME: needs more parameter variation
 	}
 
 
-
 	function testMultiBackend() {
-		$backend1=new OC_Group_Dummy();
-		$backend2=new OC_Group_Dummy();
+		$userBackend = new \OC_User_Dummy();
+		\OC_User::getManager()->registerBackend($userBackend);
+		$backend1 = new OC_Group_Dummy();
+		$backend2 = new OC_Group_Dummy();
 		OC_Group::useBackend($backend1);
 		OC_Group::useBackend($backend2);
 
-		$group1=uniqid();
-		$group2=uniqid();
+		$group1 = uniqid();
+		$group2 = uniqid();
 		OC_Group::createGroup($group1);
 
 		//groups should be added to the first registered backend
@@ -154,20 +167,23 @@ class Test_Group extends PHPUnit_Framework_TestCase {
 		$this->assertTrue(OC_Group::groupExists($group1));
 		$this->assertTrue(OC_Group::groupExists($group2));
 
-		$user1=uniqid();
-		$user2=uniqid();
+		$user1 = uniqid();
+		$user2 = uniqid();
+
+		$userBackend->createUser($user1, '');
+		$userBackend->createUser($user2, '');
 
 		$this->assertFalse(OC_Group::inGroup($user1, $group1));
 		$this->assertFalse(OC_Group::inGroup($user2, $group1));
 
 
-		$this->assertTrue((bool)OC_Group::addToGroup($user1, $group1));
+		$this->assertTrue(OC_Group::addToGroup($user1, $group1));
 
 		$this->assertTrue(OC_Group::inGroup($user1, $group1));
 		$this->assertFalse(OC_Group::inGroup($user2, $group1));
 		$this->assertFalse($backend2->inGroup($user1, $group1));
 
-		$this->assertFalse((bool)OC_Group::addToGroup($user1, $group1));
+		OC_Group::addToGroup($user1, $group1);
 
 		$this->assertEquals(array($user1), OC_Group::usersInGroup($group1));
 
diff --git a/tests/lib/group/group.php b/tests/lib/group/group.php
new file mode 100644
index 0000000000000000000000000000000000000000..75e975d9e6505bb60e3bb45248b545faac0afc94
--- /dev/null
+++ b/tests/lib/group/group.php
@@ -0,0 +1,316 @@
+<?php
+
+/**
+ * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\Group;
+
+use OC\User\User;
+
+class Group extends \PHPUnit_Framework_TestCase {
+	/**
+	 * @return \PHPUnit_Framework_MockObject_MockObject | \OC\User\Manager
+	 */
+	protected function getUserManager() {
+		$userManager = $this->getMock('\OC\User\Manager');
+		$user1 = new User('user1', null);
+		$user2 = new User('user2', null);
+		$user3 = new User('user3', null);
+		$userManager->expects($this->any())
+			->method('get')
+			->will($this->returnValueMap(array(
+				array('user1', $user1),
+				array('user2', $user2),
+				array('user3', $user3)
+			)));
+		return $userManager;
+	}
+
+	public function testGetUsersSingleBackend() {
+		$backend = $this->getMock('OC_Group_Database');
+		$userManager = $this->getUserManager();
+		$group = new \OC\Group\Group('group1', array($backend), $userManager);
+
+		$backend->expects($this->once())
+			->method('usersInGroup')
+			->with('group1')
+			->will($this->returnValue(array('user1', 'user2')));
+
+		$users = $group->getUsers();
+
+		$this->assertEquals(2, count($users));
+		$user1 = $users[0];
+		$user2 = $users[1];
+		$this->assertEquals('user1', $user1->getUID());
+		$this->assertEquals('user2', $user2->getUID());
+	}
+
+	public function testGetUsersMultipleBackends() {
+		$backend1 = $this->getMock('OC_Group_Database');
+		$backend2 = $this->getMock('OC_Group_Database');
+		$userManager = $this->getUserManager();
+		$group = new \OC\Group\Group('group1', array($backend1, $backend2), $userManager);
+
+		$backend1->expects($this->once())
+			->method('usersInGroup')
+			->with('group1')
+			->will($this->returnValue(array('user1', 'user2')));
+
+		$backend2->expects($this->once())
+			->method('usersInGroup')
+			->with('group1')
+			->will($this->returnValue(array('user2', 'user3')));
+
+		$users = $group->getUsers();
+
+		$this->assertEquals(3, count($users));
+		$user1 = $users[0];
+		$user2 = $users[1];
+		$user3 = $users[2];
+		$this->assertEquals('user1', $user1->getUID());
+		$this->assertEquals('user2', $user2->getUID());
+		$this->assertEquals('user3', $user3->getUID());
+	}
+
+	public function testInGroupSingleBackend() {
+		$backend = $this->getMock('OC_Group_Database');
+		$userManager = $this->getUserManager();
+		$group = new \OC\Group\Group('group1', array($backend), $userManager);
+
+		$backend->expects($this->once())
+			->method('inGroup')
+			->with('user1', 'group1')
+			->will($this->returnValue(true));
+
+		$this->assertTrue($group->inGroup(new User('user1', null)));
+	}
+
+	public function testInGroupMultipleBackends() {
+		$backend1 = $this->getMock('OC_Group_Database');
+		$backend2 = $this->getMock('OC_Group_Database');
+		$userManager = $this->getUserManager();
+		$group = new \OC\Group\Group('group1', array($backend1, $backend2), $userManager);
+
+		$backend1->expects($this->once())
+			->method('inGroup')
+			->with('user1', 'group1')
+			->will($this->returnValue(false));
+
+		$backend2->expects($this->once())
+			->method('inGroup')
+			->with('user1', 'group1')
+			->will($this->returnValue(true));
+
+		$this->assertTrue($group->inGroup(new User('user1', null)));
+	}
+
+	public function testAddUser() {
+		$backend = $this->getMock('OC_Group_Database');
+		$userManager = $this->getUserManager();
+		$group = new \OC\Group\Group('group1', array($backend), $userManager);
+
+		$backend->expects($this->once())
+			->method('inGroup')
+			->with('user1', 'group1')
+			->will($this->returnValue(false));
+		$backend->expects($this->any())
+			->method('implementsActions')
+			->will($this->returnValue(true));
+
+		$backend->expects($this->once())
+			->method('addToGroup')
+			->with('user1', 'group1');
+
+		$group->addUser(new User('user1', null));
+	}
+
+	public function testAddUserAlreadyInGroup() {
+		$backend = $this->getMock('OC_Group_Database');
+		$userManager = $this->getUserManager();
+		$group = new \OC\Group\Group('group1', array($backend), $userManager);
+
+		$backend->expects($this->once())
+			->method('inGroup')
+			->with('user1', 'group1')
+			->will($this->returnValue(true));
+		$backend->expects($this->any())
+			->method('implementsActions')
+			->will($this->returnValue(true));
+
+		$backend->expects($this->never())
+			->method('addToGroup');
+
+		$group->addUser(new User('user1', null));
+	}
+
+	public function testRemoveUser() {
+		$backend = $this->getMock('OC_Group_Database');
+		$userManager = $this->getUserManager();
+		$group = new \OC\Group\Group('group1', array($backend), $userManager);
+
+		$backend->expects($this->once())
+			->method('inGroup')
+			->with('user1', 'group1')
+			->will($this->returnValue(true));
+		$backend->expects($this->any())
+			->method('implementsActions')
+			->will($this->returnValue(true));
+
+		$backend->expects($this->once())
+			->method('removeFromGroup')
+			->with('user1', 'group1');
+
+		$group->removeUser(new User('user1', null));
+	}
+
+	public function testRemoveUserNotInGroup() {
+		$backend = $this->getMock('OC_Group_Database');
+		$userManager = $this->getUserManager();
+		$group = new \OC\Group\Group('group1', array($backend), $userManager);
+
+		$backend->expects($this->once())
+			->method('inGroup')
+			->with('user1', 'group1')
+			->will($this->returnValue(false));
+		$backend->expects($this->any())
+			->method('implementsActions')
+			->will($this->returnValue(true));
+
+		$backend->expects($this->never())
+			->method('removeFromGroup');
+
+		$group->removeUser(new User('user1', null));
+	}
+
+	public function testRemoveUserMultipleBackends() {
+		$backend1 = $this->getMock('OC_Group_Database');
+		$backend2 = $this->getMock('OC_Group_Database');
+		$userManager = $this->getUserManager();
+		$group = new \OC\Group\Group('group1', array($backend1, $backend2), $userManager);
+
+		$backend1->expects($this->once())
+			->method('inGroup')
+			->with('user1', 'group1')
+			->will($this->returnValue(true));
+		$backend1->expects($this->any())
+			->method('implementsActions')
+			->will($this->returnValue(true));
+
+		$backend1->expects($this->once())
+			->method('removeFromGroup')
+			->with('user1', 'group1');
+
+		$backend2->expects($this->once())
+			->method('inGroup')
+			->with('user1', 'group1')
+			->will($this->returnValue(true));
+		$backend2->expects($this->any())
+			->method('implementsActions')
+			->will($this->returnValue(true));
+
+		$backend2->expects($this->once())
+			->method('removeFromGroup')
+			->with('user1', 'group1');
+
+		$group->removeUser(new User('user1', null));
+	}
+
+	public function testSearchUsers() {
+		$backend = $this->getMock('OC_Group_Database');
+		$userManager = $this->getUserManager();
+		$group = new \OC\Group\Group('group1', array($backend), $userManager);
+
+		$backend->expects($this->once())
+			->method('usersInGroup')
+			->with('group1', '2')
+			->will($this->returnValue(array('user2')));
+
+		$users = $group->searchUsers('2');
+
+		$this->assertEquals(1, count($users));
+		$user2 = $users[0];
+		$this->assertEquals('user2', $user2->getUID());
+	}
+
+	public function testSearchUsersMultipleBackends() {
+		$backend1 = $this->getMock('OC_Group_Database');
+		$backend2 = $this->getMock('OC_Group_Database');
+		$userManager = $this->getUserManager();
+		$group = new \OC\Group\Group('group1', array($backend1, $backend2), $userManager);
+
+		$backend1->expects($this->once())
+			->method('usersInGroup')
+			->with('group1', '2')
+			->will($this->returnValue(array('user2')));
+		$backend2->expects($this->once())
+			->method('usersInGroup')
+			->with('group1', '2')
+			->will($this->returnValue(array('user2')));
+
+		$users = $group->searchUsers('2');
+
+		$this->assertEquals(1, count($users));
+		$user2 = $users[0];
+		$this->assertEquals('user2', $user2->getUID());
+	}
+
+	public function testSearchUsersLimitAndOffset() {
+		$backend = $this->getMock('OC_Group_Database');
+		$userManager = $this->getUserManager();
+		$group = new \OC\Group\Group('group1', array($backend), $userManager);
+
+		$backend->expects($this->once())
+			->method('usersInGroup')
+			->with('group1', 'user', 1, 1)
+			->will($this->returnValue(array('user2')));
+
+		$users = $group->searchUsers('user', 1, 1);
+
+		$this->assertEquals(1, count($users));
+		$user2 = $users[0];
+		$this->assertEquals('user2', $user2->getUID());
+	}
+
+	public function testSearchUsersMultipleBackendsLimitAndOffset() {
+		$backend1 = $this->getMock('OC_Group_Database');
+		$backend2 = $this->getMock('OC_Group_Database');
+		$userManager = $this->getUserManager();
+		$group = new \OC\Group\Group('group1', array($backend1, $backend2), $userManager);
+
+		$backend1->expects($this->once())
+			->method('usersInGroup')
+			->with('group1', 'user', 2, 1)
+			->will($this->returnValue(array('user2')));
+		$backend2->expects($this->once())
+			->method('usersInGroup')
+			->with('group1', 'user', 1, 0)
+			->will($this->returnValue(array('user1')));
+
+		$users = $group->searchUsers('user', 2, 1);
+
+		$this->assertEquals(2, count($users));
+		$user2 = $users[0];
+		$user1 = $users[1];
+		$this->assertEquals('user2', $user2->getUID());
+		$this->assertEquals('user1', $user1->getUID());
+	}
+
+	public function testDelete() {
+		$backend = $this->getMock('OC_Group_Database');
+		$userManager = $this->getUserManager();
+		$group = new \OC\Group\Group('group1', array($backend), $userManager);
+
+		$backend->expects($this->once())
+			->method('deleteGroup')
+			->with('group1');
+		$backend->expects($this->any())
+			->method('implementsActions')
+			->will($this->returnValue(true));
+
+		$group->delete();
+	}
+}
diff --git a/tests/lib/group/manager.php b/tests/lib/group/manager.php
new file mode 100644
index 0000000000000000000000000000000000000000..9d3adf51a0c8b9dff88b0c6d8ef35db2901a8173
--- /dev/null
+++ b/tests/lib/group/manager.php
@@ -0,0 +1,313 @@
+<?php
+
+/**
+ * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\Group;
+
+use OC\User\User;
+
+class Manager extends \PHPUnit_Framework_TestCase {
+	public function testGet() {
+		/**
+		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend
+		 */
+		$backend = $this->getMock('\OC_Group_Database');
+		$backend->expects($this->any())
+			->method('groupExists')
+			->with('group1')
+			->will($this->returnValue(true));
+
+		/**
+		 * @var \OC\User\Manager $userManager
+		 */
+		$userManager = $this->getMock('\OC\User\Manager');
+		$manager = new \OC\Group\Manager($userManager);
+		$manager->addBackend($backend);
+
+		$group = $manager->get('group1');
+		$this->assertNotNull($group);
+		$this->assertEquals('group1', $group->getGID());
+	}
+
+	public function testGetNoBackend() {
+		/**
+		 * @var \OC\User\Manager $userManager
+		 */
+		$userManager = $this->getMock('\OC\User\Manager');
+		$manager = new \OC\Group\Manager($userManager);
+
+		$this->assertNull($manager->get('group1'));
+	}
+
+	public function testGetNotExists() {
+		/**
+		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend
+		 */
+		$backend = $this->getMock('\OC_Group_Database');
+		$backend->expects($this->once())
+			->method('groupExists')
+			->with('group1')
+			->will($this->returnValue(false));
+
+		/**
+		 * @var \OC\User\Manager $userManager
+		 */
+		$userManager = $this->getMock('\OC\User\Manager');
+		$manager = new \OC\Group\Manager($userManager);
+		$manager->addBackend($backend);
+
+		$this->assertNull($manager->get('group1'));
+	}
+
+	public function testGetDeleted() {
+		$backend = new \OC_Group_Dummy();
+		$backend->createGroup('group1');
+
+		/**
+		 * @var \OC\User\Manager $userManager
+		 */
+		$userManager = $this->getMock('\OC\User\Manager');
+		$manager = new \OC\Group\Manager($userManager);
+		$manager->addBackend($backend);
+
+		$group = $manager->get('group1');
+		$group->delete();
+		$this->assertNull($manager->get('group1'));
+	}
+
+	public function testGetMultipleBackends() {
+		/**
+		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend1
+		 */
+		$backend1 = $this->getMock('\OC_Group_Database');
+		$backend1->expects($this->any())
+			->method('groupExists')
+			->with('group1')
+			->will($this->returnValue(false));
+
+		/**
+		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend2
+		 */
+		$backend2 = $this->getMock('\OC_Group_Database');
+		$backend2->expects($this->any())
+			->method('groupExists')
+			->with('group1')
+			->will($this->returnValue(true));
+
+		/**
+		 * @var \OC\User\Manager $userManager
+		 */
+		$userManager = $this->getMock('\OC\User\Manager');
+		$manager = new \OC\Group\Manager($userManager);
+		$manager->addBackend($backend1);
+		$manager->addBackend($backend2);
+
+		$group = $manager->get('group1');
+		$this->assertNotNull($group);
+		$this->assertEquals('group1', $group->getGID());
+	}
+
+	public function testCreate() {
+		/**
+		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend
+		 */
+		$backend = $this->getMock('\OC_Group_Database');
+		$backend->expects($this->any())
+			->method('groupExists')
+			->with('group1')
+			->will($this->returnValue(false));
+		$backend->expects($this->once())
+			->method('implementsActions')
+			->will($this->returnValue(true));
+		$backend->expects($this->once())
+			->method('createGroup');
+
+		/**
+		 * @var \OC\User\Manager $userManager
+		 */
+		$userManager = $this->getMock('\OC\User\Manager');
+		$manager = new \OC\Group\Manager($userManager);
+		$manager->addBackend($backend);
+
+		$group = $manager->createGroup('group1');
+		$this->assertEquals('group1', $group->getGID());
+	}
+
+	public function testCreateExists() {
+		/**
+		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend
+		 */
+		$backend = $this->getMock('\OC_Group_Database');
+		$backend->expects($this->any())
+			->method('groupExists')
+			->with('group1')
+			->will($this->returnValue(true));
+		$backend->expects($this->never())
+			->method('createGroup');
+
+		/**
+		 * @var \OC\User\Manager $userManager
+		 */
+		$userManager = $this->getMock('\OC\User\Manager');
+		$manager = new \OC\Group\Manager($userManager);
+		$manager->addBackend($backend);
+
+		$group = $manager->createGroup('group1');
+		$this->assertEquals('group1', $group->getGID());
+	}
+
+	public function testSearch() {
+		/**
+		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend
+		 */
+		$backend = $this->getMock('\OC_Group_Database');
+		$backend->expects($this->once())
+			->method('getGroups')
+			->with('1')
+			->will($this->returnValue(array('group1')));
+
+		/**
+		 * @var \OC\User\Manager $userManager
+		 */
+		$userManager = $this->getMock('\OC\User\Manager');
+		$manager = new \OC\Group\Manager($userManager);
+		$manager->addBackend($backend);
+
+		$groups = $manager->search('1');
+		$this->assertEquals(1, count($groups));
+		$group1 = $groups[0];
+		$this->assertEquals('group1', $group1->getGID());
+	}
+
+	public function testSearchMultipleBackends() {
+		/**
+		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend1
+		 */
+		$backend1 = $this->getMock('\OC_Group_Database');
+		$backend1->expects($this->once())
+			->method('getGroups')
+			->with('1')
+			->will($this->returnValue(array('group1')));
+
+		/**
+		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend2
+		 */
+		$backend2 = $this->getMock('\OC_Group_Database');
+		$backend2->expects($this->once())
+			->method('getGroups')
+			->with('1')
+			->will($this->returnValue(array('group12', 'group1')));
+
+		/**
+		 * @var \OC\User\Manager $userManager
+		 */
+		$userManager = $this->getMock('\OC\User\Manager');
+		$manager = new \OC\Group\Manager($userManager);
+		$manager->addBackend($backend1);
+		$manager->addBackend($backend2);
+
+		$groups = $manager->search('1');
+		$this->assertEquals(2, count($groups));
+		$group1 = $groups[0];
+		$group12 = $groups[1];
+		$this->assertEquals('group1', $group1->getGID());
+		$this->assertEquals('group12', $group12->getGID());
+	}
+
+	public function testSearchMultipleBackendsLimitAndOffset() {
+		/**
+		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend1
+		 */
+		$backend1 = $this->getMock('\OC_Group_Database');
+		$backend1->expects($this->once())
+			->method('getGroups')
+			->with('1', 2, 1)
+			->will($this->returnValue(array('group1')));
+
+		/**
+		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend2
+		 */
+		$backend2 = $this->getMock('\OC_Group_Database');
+		$backend2->expects($this->once())
+			->method('getGroups')
+			->with('1', 1, 0)
+			->will($this->returnValue(array('group12')));
+
+		/**
+		 * @var \OC\User\Manager $userManager
+		 */
+		$userManager = $this->getMock('\OC\User\Manager');
+		$manager = new \OC\Group\Manager($userManager);
+		$manager->addBackend($backend1);
+		$manager->addBackend($backend2);
+
+		$groups = $manager->search('1', 2, 1);
+		$this->assertEquals(2, count($groups));
+		$group1 = $groups[0];
+		$group12 = $groups[1];
+		$this->assertEquals('group1', $group1->getGID());
+		$this->assertEquals('group12', $group12->getGID());
+	}
+
+	public function testGetUserGroups() {
+		/**
+		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend
+		 */
+		$backend = $this->getMock('\OC_Group_Database');
+		$backend->expects($this->once())
+			->method('getUserGroups')
+			->with('user1')
+			->will($this->returnValue(array('group1')));
+
+		/**
+		 * @var \OC\User\Manager $userManager
+		 */
+		$userManager = $this->getMock('\OC\User\Manager');
+		$manager = new \OC\Group\Manager($userManager);
+		$manager->addBackend($backend);
+
+		$groups = $manager->getUserGroups(new User('user1', null));
+		$this->assertEquals(1, count($groups));
+		$group1 = $groups[0];
+		$this->assertEquals('group1', $group1->getGID());
+	}
+
+	public function testGetUserGroupsMultipleBackends() {
+		/**
+		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend1
+		 */
+		$backend1 = $this->getMock('\OC_Group_Database');
+		$backend1->expects($this->once())
+			->method('getUserGroups')
+			->with('user1')
+			->will($this->returnValue(array('group1')));
+		/**
+		 * @var \PHPUnit_Framework_MockObject_MockObject | \OC_Group_Backend $backend2
+		 */
+		$backend2 = $this->getMock('\OC_Group_Database');
+		$backend2->expects($this->once())
+			->method('getUserGroups')
+			->with('user1')
+			->will($this->returnValue(array('group1', 'group2')));
+
+		/**
+		 * @var \OC\User\Manager $userManager
+		 */
+		$userManager = $this->getMock('\OC\User\Manager');
+		$manager = new \OC\Group\Manager($userManager);
+		$manager->addBackend($backend1);
+		$manager->addBackend($backend2);
+
+		$groups = $manager->getUserGroups(new User('user1', null));
+		$this->assertEquals(2, count($groups));
+		$group1 = $groups[0];
+		$group2 = $groups[1];
+		$this->assertEquals('group1', $group1->getGID());
+		$this->assertEquals('group2', $group2->getGID());
+	}
+}
diff --git a/tests/lib/template/resourcelocator.php b/tests/lib/template/resourcelocator.php
new file mode 100644
index 0000000000000000000000000000000000000000..d80d222e2c96039d0a084858f5fe4a4bbab23244
--- /dev/null
+++ b/tests/lib/template/resourcelocator.php
@@ -0,0 +1,69 @@
+<?php
+/**
+ * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+class Test_ResourceLocator extends PHPUnit_Framework_TestCase {
+	public function getResourceLocator( $theme, $form_factor, $core_map, $party_map, $appsroots ) {
+		return $this->getMockForAbstractClass('OC\Template\ResourceLocator',
+			array( $theme, $form_factor, $core_map, $party_map, $appsroots ),
+			'', true, true, true, array());
+	}
+
+	public function testConstructor() {
+		$locator = $this->getResourceLocator('theme', 'form_factor',
+			array('core'=>'map'), array('3rd'=>'party'), array('foo'=>'bar'));
+		$this->assertAttributeEquals('theme', 'theme', $locator);
+		$this->assertAttributeEquals('form_factor', 'form_factor', $locator);
+		$this->assertAttributeEquals('core', 'serverroot', $locator);
+		$this->assertAttributeEquals(array('core'=>'map','3rd'=>'party'), 'mapping', $locator);
+		$this->assertAttributeEquals('3rd', 'thirdpartyroot', $locator);
+		$this->assertAttributeEquals('map', 'webroot', $locator);
+		$this->assertAttributeEquals(array(), 'resources', $locator);
+	}
+
+	public function testFind() {
+		$locator = $this->getResourceLocator('theme', 'form_factor',
+			array('core'=>'map'), array('3rd'=>'party'), array('foo'=>'bar'));
+		$locator->expects($this->once())
+			->method('doFind')
+			->with('foo');
+		$locator->expects($this->once())
+			->method('doFindTheme')
+			->with('foo');
+		$locator->find(array('foo'));
+
+		$locator = $this->getResourceLocator('theme', 'form_factor',
+			array('core'=>'map'), array('3rd'=>'party'), array('foo'=>'bar'));
+		$locator->expects($this->once())
+			->method('doFind')
+			->with('foo')
+			->will($this->throwException(new Exception('test')));
+		try {
+			$locator->find(array('foo'));
+		} catch (\Exception $e) {
+			$this->assertEquals('test formfactor:form_factor serverroot:core', $e->getMessage());
+		}
+	}
+
+	public function testAppendIfExist() {
+		$locator = $this->getResourceLocator('theme', 'form_factor',
+			array(__DIR__=>'map'), array('3rd'=>'party'), array('foo'=>'bar'));
+		$method = new ReflectionMethod($locator, 'appendIfExist');
+		$method->setAccessible(true);
+
+		$method->invoke($locator, __DIR__, basename(__FILE__), 'webroot');
+		$resource1 = array(__DIR__, 'webroot', basename(__FILE__));
+		$this->assertEquals(array($resource1), $locator->getResources());
+
+		$method->invoke($locator, __DIR__, basename(__FILE__));
+		$resource2 = array(__DIR__, 'map', basename(__FILE__));
+		$this->assertEquals(array($resource1, $resource2), $locator->getResources());
+
+		$method->invoke($locator, __DIR__, 'does-not-exist');
+		$this->assertEquals(array($resource1, $resource2), $locator->getResources());
+	}
+}