diff --git a/src/leap/soledad/server/_blobs.py b/src/leap/soledad/server/_blobs.py
index 5fe9c1b70dd529e8d6a460d2123dbed46c943c95..bfe95516abc1192dfb069d055f658103c4b08866 100644
--- a/src/leap/soledad/server/_blobs.py
+++ b/src/leap/soledad/server/_blobs.py
@@ -320,7 +320,8 @@ class BlobsResource(resource.Resource):
         def catchBlobNotFound(failure):
             failure.trap(BlobNotFound)
             request.setResponseCode(404)
-            return "Blob doesn't exists: %s" % blob_id
+            request.write("Blob doesn't exists: %s" % blob_id)
+            request.finish()
 
         d = self._handler.delete_blob(user, blob_id, namespace=namespace)
         d.addCallback(lambda _: request.finish())
@@ -357,17 +358,26 @@ class BlobsResource(resource.Resource):
         user, blob_id, namespace = self._validate(request)
         raw_flags = request.content.read()
         flags = json.loads(raw_flags)
-        try:
-            self._handler.set_flags(user, blob_id, flags, namespace=namespace)
-        except BlobNotFound:
-            # 404 - Not Found
+
+        def catchBlobNotFound(failure):
+            failure.trap(BlobNotFound)
             request.setResponseCode(404)
-            return "Blob doesn't exists: %s" % blob_id
-        except InvalidFlag as e:
+            request.write("Blob doesn't exists: %s" % blob_id)
+            request.finish()
+
+        def catchInvalidFlag(failure):
+            e = failure.trap(InvalidFlag)
             request.setResponseCode(406)
             flag = e.message
-            return "Invalid flag: %s" % str(flag)
-        return ''
+            request.write("Invalid flag: %s" % str(flag))
+            request.finish()
+
+        d = self._handler.set_flags(user, blob_id, flags, namespace=namespace)
+        d.addCallback(lambda _: request.write(''))
+        d.addCallback(lambda _: request.finish())
+        d.addErrback(catchBlobNotFound)
+        d.addErrback(catchInvalidFlag)
+        return NOT_DONE_YET
 
     def _error(self, e, request):
         logger.error('Error processing request: %s' % e.getErrorMessage())
diff --git a/src/leap/soledad/server/interfaces.py b/src/leap/soledad/server/interfaces.py
index bd804573d388c19b9e51945eec32d17e14adff1c..358a0d62c0631e3eeee4ac07f1a7e045c1ea20c0 100644
--- a/src/leap/soledad/server/interfaces.py
+++ b/src/leap/soledad/server/interfaces.py
@@ -189,4 +189,7 @@ class IBlobsBackend(Interface):
         :type flags: list of str
         :param namespace: An optional namespace for the blob.
         :type namespace: str
+
+        :return: A deferred that fires when the flags have been set.
+        :rtype: twisted.internet.defer.Deferred
         """