diff --git a/src/com/owncloud/android/lib/resources/files/ChunkedUploadRemoteFileOperation.java b/src/com/owncloud/android/lib/resources/files/ChunkedUploadRemoteFileOperation.java
index f8c19d3e..281745ad 100644
--- a/src/com/owncloud/android/lib/resources/files/ChunkedUploadRemoteFileOperation.java
+++ b/src/com/owncloud/android/lib/resources/files/ChunkedUploadRemoteFileOperation.java
@@ -32,7 +32,6 @@ import java.io.RandomAccessFile;
 import java.nio.channels.FileChannel;
 import java.util.Random;
 
-import org.apache.commons.httpclient.HttpException;
 import org.apache.commons.httpclient.methods.PutMethod;
 
 import com.owncloud.android.lib.common.OwnCloudClient;
@@ -85,6 +84,10 @@ public class ChunkedUploadRemoteFileOperation extends UploadRemoteFileOperation
                 mPutMethod.addRequestHeader(OC_TOTAL_LENGTH_HEADER, String.valueOf(file.length()));
                 ((ChunkFromFileChannelRequestEntity) mEntity).setOffset(offset);
                 mPutMethod.setRequestEntity(mEntity);
+                if (mCancellationRequested.get()) {
+                    mPutMethod.abort();
+                    // next method will throw an exception
+                }
                 status = client.executeMethod(mPutMethod);
 
                 if (status == 400) {
diff --git a/src/com/owncloud/android/lib/resources/files/UploadRemoteFileOperation.java b/src/com/owncloud/android/lib/resources/files/UploadRemoteFileOperation.java
index d6e90922..7e4ad499 100644
--- a/src/com/owncloud/android/lib/resources/files/UploadRemoteFileOperation.java
+++ b/src/com/owncloud/android/lib/resources/files/UploadRemoteFileOperation.java
@@ -67,7 +67,7 @@ public class UploadRemoteFileOperation extends RemoteOperation {
 	protected PutMethod mPutMethod = null;
 	protected boolean mForbiddenCharsInServer = false;
 	
-	private final AtomicBoolean mCancellationRequested = new AtomicBoolean(false);
+	protected final AtomicBoolean mCancellationRequested = new AtomicBoolean(false);
 	protected Set<OnDatatransferProgressListener> mDataTransferListeners = new HashSet<OnDatatransferProgressListener>();
 
 	protected RequestEntity mEntity = null;
@@ -83,27 +83,28 @@ public class UploadRemoteFileOperation extends RemoteOperation {
 		RemoteOperationResult result = null;
 
 		try {
-			// / perform the upload
-			synchronized (mCancellationRequested) {
-				if (mCancellationRequested.get()) {
-					throw new OperationCancelledException();
+			mPutMethod = new PutMethod(client.getWebdavUri() + WebdavUtils.encodePath(mRemotePath));
+
+			if (mCancellationRequested.get()) {
+				// the operation was cancelled before getting it's turn to be executed in the queue of uploads
+				result = new RemoteOperationResult(new OperationCancelledException());
+
+			} else {
+				// perform the upload
+				int status = uploadFile(client);
+				if (mForbiddenCharsInServer){
+					result = new RemoteOperationResult(
+							RemoteOperationResult.ResultCode.INVALID_CHARACTER_DETECT_IN_SERVER);
 				} else {
-					mPutMethod = new PutMethod(client.getWebdavUri() +
-                            WebdavUtils.encodePath(mRemotePath));
+					result = new RemoteOperationResult(isSuccess(status), status,
+							(mPutMethod != null ? mPutMethod.getResponseHeaders() : null));
 				}
 			}
 
-			int status = uploadFile(client);
-			if (mForbiddenCharsInServer){
-				result = new RemoteOperationResult(
-						RemoteOperationResult.ResultCode.INVALID_CHARACTER_DETECT_IN_SERVER);
-			} else {
-				result = new RemoteOperationResult(isSuccess(status), status,
-						(mPutMethod != null ? mPutMethod.getResponseHeaders() : null));
-			}
 		} catch (Exception e) {
-			if (mCancellationRequested.get() && !(e instanceof OperationCancelledException)) {
+			if (mPutMethod != null && mPutMethod.isAborted()) {
 				result = new RemoteOperationResult(new OperationCancelledException());
+
 			} else {
 				result = new RemoteOperationResult(e);
 			}