diff --git a/sample_client/src/com/owncloud/android/lib/sampleclient/MainActivity.java b/sample_client/src/com/owncloud/android/lib/sampleclient/MainActivity.java
index 6ac5efd8..5b7d1b13 100644
--- a/sample_client/src/com/owncloud/android/lib/sampleclient/MainActivity.java
+++ b/sample_client/src/com/owncloud/android/lib/sampleclient/MainActivity.java
@@ -35,8 +35,10 @@ import java.util.List;
 import com.owncloud.android.lib.common.network.OnDatatransferProgressListener;
 import com.owncloud.android.lib.common.OwnCloudClientFactory;
 import com.owncloud.android.lib.common.OwnCloudClient;
-import com.owncloud.android.lib.common.authentication.OwnCloudCredentialsFactory;
+import com.owncloud.android.lib.refactor.authentication.credentials.OwnCloudCredentialsFactory;
 import com.owncloud.android.lib.common.operations.OnRemoteOperationListener;
+import com.owncloud.android.lib.refactor.OwnCloudContext;
+import com.owncloud.android.lib.refactor.operations.PropfindOperation;
 import com.owncloud.android.lib.resources.files.RemoteFile;
 import com.owncloud.android.lib.common.operations.RemoteOperation;
 import com.owncloud.android.lib.common.operations.RemoteOperationResult;
@@ -64,7 +66,9 @@ public class MainActivity extends Activity implements OnRemoteOperationListener,
 	
 	private Handler mHandler;
 	
-	private OwnCloudClient mClient; 
+	private OwnCloudClient mClient;
+
+	private OwnCloudContext mOCContext;
 	
 	private FilesArrayAdapter mFilesAdapter;
 	
@@ -79,13 +83,21 @@ public class MainActivity extends Activity implements OnRemoteOperationListener,
         mHandler = new Handler();
         
     	Uri serverUri = Uri.parse(getString(R.string.server_base_url));
-    	mClient = OwnCloudClientFactory.createOwnCloudClient(serverUri, this, true);
-    	mClient.setCredentials(
-    			OwnCloudCredentialsFactory.newBasicCredentials(
-    					getString(R.string.username), 
-    					getString(R.string.password)
-				)
-		);
+//    	mClient = OwnCloudClientFactory.createOwnCloudClient(serverUri, this, true);
+//    	mClient.setCredentials(
+//    			OwnCloudCredentialsFactory.newBasicCredentials(
+//    					getString(R.string.username),
+//    					getString(R.string.password)
+//				)
+//		);
+
+    	mOCContext = new OwnCloudContext.Builder()
+                .setBaseUri(serverUri)
+                .setCredentials(OwnCloudCredentialsFactory.newBasicCredentials(
+                        getString(R.string.username),
+                        getString(R.string.password)
+                ))
+                .build();
     	
     	mFilesAdapter = new FilesArrayAdapter(this, R.layout.file_in_list);
     	((ListView)findViewById(R.id.list_view)).setAdapter(mFilesAdapter);
@@ -148,8 +160,12 @@ public class MainActivity extends Activity implements OnRemoteOperationListener,
     }
 
     private void startRefresh() {
-    	ReadRemoteFolderOperation refreshOperation = new ReadRemoteFolderOperation(FileUtils.PATH_SEPARATOR);
-    	refreshOperation.execute(mClient, this, mHandler);
+
+		PropfindOperation propfindOperation = new PropfindOperation(mOCContext, FileUtils.PATH_SEPARATOR);
+
+		propfindOperation.exec();
+//    	ReadRemoteFolderOperation refreshOperation = new ReadRemoteFolderOperation(FileUtils.PATH_SEPARATOR);
+//    	refreshOperation.execute(mClient, this, mHandler);
     }
     
     private void startUpload() {
diff --git a/src/com/owncloud/android/lib/refactor/OCContext.java b/src/com/owncloud/android/lib/refactor/OCContext.java
index d8d0054c..f3cc216b 100644
--- a/src/com/owncloud/android/lib/refactor/OCContext.java
+++ b/src/com/owncloud/android/lib/refactor/OCContext.java
@@ -1,9 +1,6 @@
 package com.owncloud.android.lib.refactor;
 
-import android.net.Uri;
-
 import com.owncloud.android.lib.refactor.account.OCAccount;
-import com.owncloud.android.lib.refactor.authentication.OCCredentials;
 
 
 public class OCContext {
diff --git a/src/com/owncloud/android/lib/refactor/OwnCloudContext.java b/src/com/owncloud/android/lib/refactor/OwnCloudContext.java
new file mode 100644
index 00000000..008b10e0
--- /dev/null
+++ b/src/com/owncloud/android/lib/refactor/OwnCloudContext.java
@@ -0,0 +1,53 @@
+package com.owncloud.android.lib.refactor;
+
+import android.net.Uri;
+
+import com.owncloud.android.lib.refactor.authentication.credentials.OCCredentials;
+
+
+public class OwnCloudContext {
+    private static final String TAG = OwnCloudContext.class.toString();
+
+    public static final String WEBDAV_PATH_4_0 = "/remote.php/dav";
+    public static final String STATUS_PATH = "/status.php";
+    public static final String FILES_WEB_PATH = "/index.php/apps/files";
+
+    private static final int MAX_REDIRECTIONS_COUNT = 3;
+    private static final int MAX_REPEAT_COUNT_WITH_FRESH_CREDENTIALS = 1;
+    private static final String PARAM_SINGLE_COOKIE_HEADER = "http.protocol.single-cookie-header";
+    private static final boolean PARAM_SINGLE_COOKIE_HEADER_VALUE = true;
+    private static final String PARAM_PROTOCOL_VERSION = "http.protocol.version";
+
+    private OCCredentials mCredentials = null;
+    private Uri mBaseUri;
+
+    public static final class Builder {
+        OwnCloudContext ocContext = new OwnCloudContext();
+
+        public Builder setCredentials(OCCredentials credentials) {
+            ocContext.mCredentials = credentials;
+            return this;
+        }
+
+        public Builder setBaseUri(Uri baseUri) {
+            ocContext.mBaseUri = baseUri;
+            return this;
+        }
+
+        public OwnCloudContext build() {
+            return ocContext;
+        }
+    }
+
+    public OCCredentials getCredentials() {
+        return mCredentials;
+    }
+
+    public Uri getBaseUri() {
+        return mBaseUri;
+    }
+
+    public Uri getWebdavUri() {
+        return Uri.parse(mBaseUri + WEBDAV_PATH_4_0);
+    }
+}
\ No newline at end of file
diff --git a/src/com/owncloud/android/lib/refactor/RemoteOperation.java b/src/com/owncloud/android/lib/refactor/RemoteOperation.java
index 4dff64e3..18504069 100644
--- a/src/com/owncloud/android/lib/refactor/RemoteOperation.java
+++ b/src/com/owncloud/android/lib/refactor/RemoteOperation.java
@@ -1,7 +1,6 @@
 package com.owncloud.android.lib.refactor;
 
 import android.net.Uri;
-
 import java.util.Map;
 
 import okhttp3.OkHttpClient;
@@ -57,4 +56,4 @@ public abstract class RemoteOperation {
 
         return builder;
     }
-}
+}
\ No newline at end of file
diff --git a/src/com/owncloud/android/lib/refactor/account/AccountUtils.java b/src/com/owncloud/android/lib/refactor/account/AccountUtils.java
index 833a9bd9..26e2e21e 100644
--- a/src/com/owncloud/android/lib/refactor/account/AccountUtils.java
+++ b/src/com/owncloud/android/lib/refactor/account/AccountUtils.java
@@ -33,12 +33,11 @@ import android.accounts.OperationCanceledException;
 import android.content.Context;
 import android.net.Uri;
 
-import com.owncloud.android.lib.common.authentication.OwnCloudCredentialsFactory;
 import com.owncloud.android.lib.refactor.Log_OC;
 import com.owncloud.android.lib.refactor.OCContext;
-import com.owncloud.android.lib.refactor.authentication.OCCredentials;
 import com.owncloud.android.lib.refactor.authentication.credentials.OCBasicCredentials;
 import com.owncloud.android.lib.refactor.authentication.credentials.OCBearerCredentials;
+import com.owncloud.android.lib.refactor.authentication.credentials.OCCredentials;
 import com.owncloud.android.lib.refactor.authentication.credentials.OCSamlSsoCredentials;
 import com.owncloud.android.lib.refactor.exceptions.AccountNotFoundException;
 import com.owncloud.android.lib.resources.status.OwnCloudVersion;
diff --git a/src/com/owncloud/android/lib/refactor/account/OCAccount.java b/src/com/owncloud/android/lib/refactor/account/OCAccount.java
index 4349547d..bd40521c 100644
--- a/src/com/owncloud/android/lib/refactor/account/OCAccount.java
+++ b/src/com/owncloud/android/lib/refactor/account/OCAccount.java
@@ -24,7 +24,6 @@
 
 package com.owncloud.android.lib.refactor.account;
 
-
 import android.accounts.Account;
 import android.accounts.AccountManager;
 import android.accounts.AuthenticatorException;
@@ -32,8 +31,8 @@ import android.accounts.OperationCanceledException;
 import android.content.Context;
 import android.net.Uri;
 
-import com.owncloud.android.lib.refactor.authentication.OCCredentials;
 import com.owncloud.android.lib.refactor.authentication.credentials.OCAnonymousCredentials;
+import com.owncloud.android.lib.refactor.authentication.credentials.OCCredentials;
 import com.owncloud.android.lib.refactor.exceptions.AccountNotFoundException;
 
 import java.io.IOException;
diff --git a/src/com/owncloud/android/lib/refactor/authentication/credentials/OCAnonymousCredentials.java b/src/com/owncloud/android/lib/refactor/authentication/credentials/OCAnonymousCredentials.java
index 990415ba..fa0d04c5 100644
--- a/src/com/owncloud/android/lib/refactor/authentication/credentials/OCAnonymousCredentials.java
+++ b/src/com/owncloud/android/lib/refactor/authentication/credentials/OCAnonymousCredentials.java
@@ -1,8 +1,5 @@
 package com.owncloud.android.lib.refactor.authentication.credentials;
 
-
-import com.owncloud.android.lib.refactor.authentication.OCCredentials;
-
 import java.util.HashMap;
 import java.util.Map;
 public class OCAnonymousCredentials implements OCCredentials {
@@ -12,6 +9,11 @@ public class OCAnonymousCredentials implements OCCredentials {
         return new HashMap<>(0);
     }
 
+    @Override
+    public String getCredentialCookie() {
+        return null;
+    }
+
     @Override
     public String getUsername() {
         return "";
@@ -26,4 +28,4 @@ public class OCAnonymousCredentials implements OCCredentials {
     public boolean authTokenCanBeRefreshed() {
         return false;
     }
-}
+}
\ No newline at end of file
diff --git a/src/com/owncloud/android/lib/refactor/authentication/credentials/OCBasicCredentials.java b/src/com/owncloud/android/lib/refactor/authentication/credentials/OCBasicCredentials.java
index ea00d184..abb2b27b 100644
--- a/src/com/owncloud/android/lib/refactor/authentication/credentials/OCBasicCredentials.java
+++ b/src/com/owncloud/android/lib/refactor/authentication/credentials/OCBasicCredentials.java
@@ -23,8 +23,6 @@
  */
 package com.owncloud.android.lib.refactor.authentication.credentials;
 
-import com.owncloud.android.lib.refactor.authentication.OCCredentials;
-
 import java.util.HashMap;
 import java.util.Map;
 
@@ -47,6 +45,11 @@ public class OCBasicCredentials implements OCCredentials {
         return header;
     }
 
+    @Override
+    public String getCredentialCookie() {
+        return null;
+    }
+
     @Override
     public String getUsername() {
         return mUsername;
@@ -61,5 +64,4 @@ public class OCBasicCredentials implements OCCredentials {
     public boolean authTokenCanBeRefreshed() {
         return false;
     }
-
-}
+}
\ No newline at end of file
diff --git a/src/com/owncloud/android/lib/refactor/authentication/credentials/OCBearerCredentials.java b/src/com/owncloud/android/lib/refactor/authentication/credentials/OCBearerCredentials.java
index bd427738..92f35689 100644
--- a/src/com/owncloud/android/lib/refactor/authentication/credentials/OCBearerCredentials.java
+++ b/src/com/owncloud/android/lib/refactor/authentication/credentials/OCBearerCredentials.java
@@ -23,17 +23,12 @@
  */
 package com.owncloud.android.lib.refactor.authentication.credentials;
 
-
-
-import com.owncloud.android.lib.refactor.authentication.OCCredentials;
-
 import java.util.HashMap;
 import java.util.Map;
 
 public class OCBearerCredentials implements OCCredentials {
 
     private String mUsername;
-
     private String mAccessToken;
 
     public OCBearerCredentials(String username, String accessToken) {
@@ -48,6 +43,11 @@ public class OCBearerCredentials implements OCCredentials {
         return header;
     }
 
+    @Override
+    public String getCredentialCookie() {
+        return null;
+    }
+
     @Override
     public String getUsername() {
         // not relevant for authentication, but relevant for informational purposes
diff --git a/src/com/owncloud/android/lib/refactor/authentication/OCCredentials.java b/src/com/owncloud/android/lib/refactor/authentication/credentials/OCCredentials.java
similarity index 90%
rename from src/com/owncloud/android/lib/refactor/authentication/OCCredentials.java
rename to src/com/owncloud/android/lib/refactor/authentication/credentials/OCCredentials.java
index e4411b76..63ff805b 100644
--- a/src/com/owncloud/android/lib/refactor/authentication/OCCredentials.java
+++ b/src/com/owncloud/android/lib/refactor/authentication/credentials/OCCredentials.java
@@ -22,23 +22,20 @@
  *
  */
 
-package com.owncloud.android.lib.refactor.authentication;
+package com.owncloud.android.lib.refactor.authentication.credentials;
 
-
-import java.util.HashMap;
 import java.util.Map;
 
-
 public interface OCCredentials {
 
     Map<String, String> getCredentialHeaders();
 
     //TODO: Remove this once SAML is obsolet
-    default String getCredentialCookie() {
-        return null;
-    }
+    String getCredentialCookie();
 
     String getUsername();
+
     String getAuthToken();
+
     boolean authTokenCanBeRefreshed();
-}
+}
\ No newline at end of file
diff --git a/src/com/owncloud/android/lib/refactor/authentication/credentials/OCSamlSsoCredentials.java b/src/com/owncloud/android/lib/refactor/authentication/credentials/OCSamlSsoCredentials.java
index 47ca012a..b974a79c 100644
--- a/src/com/owncloud/android/lib/refactor/authentication/credentials/OCSamlSsoCredentials.java
+++ b/src/com/owncloud/android/lib/refactor/authentication/credentials/OCSamlSsoCredentials.java
@@ -25,10 +25,7 @@ package com.owncloud.android.lib.refactor.authentication.credentials;
 
 import android.net.Uri;
 
-import com.owncloud.android.lib.refactor.authentication.OCCredentials;
-
 import org.apache.commons.httpclient.Cookie;
-
 import java.util.HashMap;
 import java.util.Map;
 
@@ -85,4 +82,4 @@ public class OCSamlSsoCredentials implements OCCredentials {
         return false;
     }
 
-}
+}
\ No newline at end of file
diff --git a/src/com/owncloud/android/lib/refactor/authentication/credentials/OwnCloudCredentialsFactory.java b/src/com/owncloud/android/lib/refactor/authentication/credentials/OwnCloudCredentialsFactory.java
new file mode 100644
index 00000000..3bcc1ef6
--- /dev/null
+++ b/src/com/owncloud/android/lib/refactor/authentication/credentials/OwnCloudCredentialsFactory.java
@@ -0,0 +1,85 @@
+/* ownCloud Android Library is available under MIT license
+ *   Copyright (C) 2016 ownCloud GmbH.
+ *
+ *   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.
+ *
+ */
+
+package com.owncloud.android.lib.refactor.authentication.credentials;
+
+import java.util.Map;
+
+public class OwnCloudCredentialsFactory {
+
+    public static final String CREDENTIAL_CHARSET = "UTF-8";
+
+    private static OCAnonymousCredentials sAnonymousCredentials;
+
+    public static OCCredentials newBasicCredentials(String username, String password) {
+        return new OCBasicCredentials(username, password);
+    }
+
+    public static OCCredentials newBearerCredentials(String username, String authToken) {
+        return new OCBearerCredentials(username, authToken);
+    }
+
+    public static OCCredentials newSamlSsoCredentials(String username, String sessionCookie) {
+        return new OCSamlSsoCredentials(username, sessionCookie, null);
+    }
+
+    public static final OCCredentials getAnonymousCredentials() {
+        if (sAnonymousCredentials == null) {
+            sAnonymousCredentials = new OCAnonymousCredentials();
+        }
+        return sAnonymousCredentials;
+    }
+
+    public static final class OCAnonymousCredentials implements OCCredentials {
+
+        protected OCAnonymousCredentials() {
+        }
+
+        @Override
+        public String getAuthToken() {
+            return "";
+        }
+
+        @Override
+        public boolean authTokenCanBeRefreshed() {
+            return false;
+        }
+
+        @Override
+        public Map<String, String> getCredentialHeaders() {
+            return null;
+        }
+
+        @Override
+        public String getCredentialCookie() {
+            return null;
+        }
+
+        @Override
+        public String getUsername() {
+            // no user name
+            return null;
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/com/owncloud/android/lib/refactor/authentication/oauth/operations/OAuth2RefreshAccessTokenOperation.java b/src/com/owncloud/android/lib/refactor/authentication/oauth/operations/OAuth2RefreshAccessTokenOperation.java
index 780ec71d..78e67e47 100644
--- a/src/com/owncloud/android/lib/refactor/authentication/oauth/operations/OAuth2RefreshAccessTokenOperation.java
+++ b/src/com/owncloud/android/lib/refactor/authentication/oauth/operations/OAuth2RefreshAccessTokenOperation.java
@@ -25,8 +25,6 @@ import com.owncloud.android.lib.refactor.OCContext;
 import com.owncloud.android.lib.refactor.RemoteOperationResult;
 import com.owncloud.android.lib.refactor.Log_OC;
 import com.owncloud.android.lib.refactor.RemoteOperation;
-import com.owncloud.android.lib.refactor.authentication.credentials.OCBasicCredentials;
-import com.owncloud.android.lib.refactor.authentication.OCCredentials;
 import com.owncloud.android.lib.refactor.authentication.oauth.OAuth2Constants;
 import com.owncloud.android.lib.refactor.authentication.oauth.OAuth2GrantType;
 import com.owncloud.android.lib.refactor.authentication.oauth.OAuth2ResponseParser;
diff --git a/src/com/owncloud/android/lib/refactor/operations/PropfindOperation.java b/src/com/owncloud/android/lib/refactor/operations/PropfindOperation.java
index 5a48b76b..f07f1337 100644
--- a/src/com/owncloud/android/lib/refactor/operations/PropfindOperation.java
+++ b/src/com/owncloud/android/lib/refactor/operations/PropfindOperation.java
@@ -1,19 +1,46 @@
 package com.owncloud.android.lib.refactor.operations;
 
 import com.owncloud.android.lib.refactor.OCContext;
+import com.owncloud.android.lib.common.network.WebdavUtils;
 import com.owncloud.android.lib.refactor.RemoteOperation;
 import com.owncloud.android.lib.refactor.RemoteOperationResult;
+import java.io.IOException;
+
+import at.bitfire.dav4android.DavResource;
+import at.bitfire.dav4android.exception.DavException;
+import at.bitfire.dav4android.exception.HttpException;
+import at.bitfire.dav4android.property.DisplayName;
+import okhttp3.HttpUrl;
 
 public class PropfindOperation extends RemoteOperation {
 
-    public PropfindOperation(OCContext context) {
+    private String mRemotePath;
+
+    public PropfindOperation(OCContext context, String remotePath) {
         super(context);
+
+        mRemotePath = remotePath;
     }
 
     @Override
     public RemoteOperationResult exec() {
+        DavResource davResource = new DavResource(
+                getClient(),
+                HttpUrl.parse(getOCContext().getWebdavUri() + WebdavUtils.encodePath(mRemotePath)),
+                null);
 
+        try {
+            davResource.propfind(1, DisplayName.NAME);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (HttpException e) {
+            e.printStackTrace();
+        } catch (DavException e) {
+            e.printStackTrace();
+        }
+
+        davResource.getProperties();
 
         return null;
     }
-}
+}
\ No newline at end of file