+    /**\r
+     * Tries to log in to the current URI, with the current credentials\r
+     * \r
+     * @return A {@link HttpStatus}-Code of the result. SC_OK is good.\r
+     */\r
+    public int tryToLogin() {\r
+        int status = 0;\r
+        HeadMethod head = new HeadMethod(mUri.toString());\r
+        try {\r
+            status = executeMethod(head);\r
+            boolean result = status == HttpStatus.SC_OK;\r
+            Log.d(TAG, "HEAD for " + mUri + " finished with HTTP status " + status + (!result?"(FAIL)":""));\r
+            exhaustResponse(head.getResponseBodyAsStream());\r
+            \r
+        } catch (Exception e) {\r
+            logException(e, "trying to login at " + mUri.toString());\r
+            \r
+        } finally {\r
+            head.releaseConnection();\r
+        }\r
+        return status;\r
+    }\r
+\r
+    /**\r
+     * Creates a remote directory with the received path.\r
+     * \r
+     * @param path      Path of the directory to create, URL DECODED\r
+     * @return          'True' when the directory is successfully created\r
+     */\r
+    public boolean createDirectory(String path) {\r
+        boolean result = false;\r
+        int status = -1;\r
+        MkColMethod mkcol = new MkColMethod(mUri.toString() + WebdavUtils.encodePath(path));\r
+        try {\r
+            Log.d(TAG, "Creating directory " + path);\r
+            status = executeMethod(mkcol);\r
+            Log.d(TAG, "Status returned: " + status);\r
+            result = mkcol.succeeded();\r
+            \r
+            Log.d(TAG, "MKCOL to " + path + " finished with HTTP status " + status + (!result?"(FAIL)":""));\r
+            exhaustResponse(mkcol.getResponseBodyAsStream());\r
+            \r
+        } catch (Exception e) {\r
+            logException(e, "creating directory " + path);\r
+            \r
+        } finally {\r
+            mkcol.releaseConnection();    // let the connection available for other methods\r
+        }\r
+        return result;\r
+    }\r
+    \r
+    \r
+    /**\r
+     * Check if a file exists in the OC server\r
+     * \r
+     * @return              'true' if the file exists; 'false' it doesn't exist\r
+     * @throws  Exception   When the existence could not be determined\r
+     */\r
+    public boolean existsFile(String path) throws IOException, HttpException {\r
+        HeadMethod head = new HeadMethod(mUri.toString() + WebdavUtils.encodePath(path));\r
+        try {\r
+            int status = executeMethod(head);\r
+            Log.d(TAG, "HEAD to " + path + " finished with HTTP status " + status + ((status != HttpStatus.SC_OK)?"(FAIL)":""));\r
+            exhaustResponse(head.getResponseBodyAsStream());\r
+            return (status == HttpStatus.SC_OK);\r
+            \r
+        } finally {\r
+            head.releaseConnection();    // let the connection available for other methods\r
+        }\r
+    }\r
+\r
+\r
+    /**\r
+     * Requests the received method with the received timeout (milliseconds).\r
+     * \r
+     * Executes the method through the inherited HttpClient.executedMethod(method).\r
+     * \r
+     * Sets the socket and connection timeouts only for the method received.\r
+     * \r
+     * The timeouts are both in milliseconds; 0 means 'infinite'; < 0 means 'do not change the default'\r
+     * \r
+     * @param method            HTTP method request.\r
+     * @param readTimeout       Timeout to set for data reception\r
+     * @param conntionTimout    Timeout to set for connection establishment\r
+     */\r
+    public int executeMethod(HttpMethodBase method, int readTimeout, int connectionTimeout) throws HttpException, IOException {\r
+        int oldSoTimeout = getParams().getSoTimeout();\r
+        int oldConnectionTimeout = getHttpConnectionManager().getParams().getConnectionTimeout();\r
+        try {\r
+            if (readTimeout >= 0) { \r
+                method.getParams().setSoTimeout(readTimeout);   // this should be enough...\r
+                getParams().setSoTimeout(readTimeout);          // ... but this looks like necessary for HTTPS\r
+            }\r
+            if (connectionTimeout >= 0) {\r
+                getHttpConnectionManager().getParams().setConnectionTimeout(connectionTimeout);\r
+            }\r
+            return executeMethod(method);\r
+        } finally {\r
+            getParams().setSoTimeout(oldSoTimeout);\r
+            getHttpConnectionManager().getParams().setConnectionTimeout(oldConnectionTimeout);\r
+        }\r
+    }\r
+\r
+    /**\r
+     * Exhausts a not interesting HTTP response. Encouraged by HttpClient documentation.\r
+     * \r
+     * @param responseBodyAsStream      InputStream with the HTTP response to exhaust.\r
+     */\r
+    public void exhaustResponse(InputStream responseBodyAsStream) {\r
+        if (responseBodyAsStream != null) {\r
+            try {\r
+                while (responseBodyAsStream.read(sExhaustBuffer) >= 0);\r
+                responseBodyAsStream.close();\r
+            \r
+            } catch (IOException io) {\r
+                Log.e(TAG, "Unexpected exception while exhausting not interesting HTTP response; will be IGNORED", io);\r
+            }\r
+        }\r
+    }\r
+\r
+\r
+    /**\r
+     * Logs an exception triggered in a HTTP request. \r
+     * \r
+     * @param e         Caught exception.\r
+     * @param doing     Suffix to add at the end of the logged message.\r
+     */\r
+    private void logException(Exception e, String doing) {\r
+        if (e instanceof HttpException) {\r
+            Log.e(TAG, "HTTP violation while " + doing, e);\r
+\r
+        } else if (e instanceof IOException) {\r
+            Log.e(TAG, "Unrecovered transport exception while " + doing, e);\r
+\r
+        } else {\r
+            Log.e(TAG, "Unexpected exception while " + doing, e);\r
+        }\r
+    }\r
+\r
+    \r
+    /**\r
+     * Sets the connection and wait-for-data timeouts to be applied by default to the methods performed by this client.\r
+     */\r
+    public void setDefaultTimeouts(int defaultDataTimeout, int defaultConnectionTimeout) {\r
+            getParams().setSoTimeout(defaultDataTimeout);\r
+            getHttpConnectionManager().getParams().setConnectionTimeout(defaultConnectionTimeout);\r
+    }\r
+\r
+    /**\r
+     * Sets the base URI for the helper methods that receive paths as parameters, instead of full URLs\r
+     * @param uri\r
+     */\r
+    public void setBaseUri(Uri uri) {\r
+        mUri = uri;\r
+    }\r
+\r
+    public Uri getBaseUri() {\r
+        return mUri;\r
+    }\r
+\r