diff --git a/DotCMIS/binding/atompub/atompub.cs b/DotCMIS/binding/atompub/atompub.cs
index 35ff66f..4e3cd3d 100644
--- a/DotCMIS/binding/atompub/atompub.cs
+++ b/DotCMIS/binding/atompub/atompub.cs
@@ -1902,8 +1902,21 @@
         public IFailedToDeleteData DeleteTree(string repositoryId, string folderId, bool? allVersions, UnfileObject? unfileObjects,
             bool? continueOnFailure, ExtensionsData extension)
         {
-            // find the link
-            String link = LoadLink(repositoryId, folderId, AtomPubConstants.RelDown, AtomPubConstants.MediatypeDescendants);
+            // find the down link
+            String link = LoadLink(repositoryId, folderId, AtomPubConstants.RelDown, null);
+
+            if (link != null)
+            {
+                // found only a children link, but no descendants link
+                // -> try folder tree link
+                link = null;
+            }
+            else
+            {
+                // found no or two down links
+                // -> get only the descendants link
+                link = LoadLink(repositoryId, folderId, AtomPubConstants.RelDown, AtomPubConstants.MediatypeDescendants);
+            }
 
             if (link == null)
             {
@@ -1912,6 +1925,11 @@
 
             if (link == null)
             {
+                link = LoadLink(repositoryId, folderId, AtomPubConstants.RelFolderTree, AtomPubConstants.MediatypeFeed);
+            }
+
+            if (link == null)
+            {
                 ThrowLinkException(repositoryId, folderId, AtomPubConstants.RelDown, AtomPubConstants.MediatypeDescendants);
             }
 
diff --git a/DotCMIS/client/client-impl.cs b/DotCMIS/client/client-impl.cs
index cd0a89c..e28aa97 100644
--- a/DotCMIS/client/client-impl.cs
+++ b/DotCMIS/client/client-impl.cs
@@ -173,10 +173,14 @@
     public class Session : ISession
     {
         private static HashSet<Updatability> CreateUpdatability = new HashSet<Updatability>();
+        private static HashSet<Updatability> CreateAndCheckoutUpdatability = new HashSet<Updatability>();
         static Session()
         {
             CreateUpdatability.Add(Updatability.OnCreate);
             CreateUpdatability.Add(Updatability.ReadWrite);
+            CreateAndCheckoutUpdatability.Add(Updatability.OnCreate);
+            CreateAndCheckoutUpdatability.Add(Updatability.ReadWrite);
+            CreateAndCheckoutUpdatability.Add(Updatability.WhenCheckedOut);
         }
 
         protected static IOperationContext FallbackContext = new OperationContext(null, false, true, false, IncludeRelationshipsFlag.None, null, true, null, true, 100);
@@ -678,7 +682,8 @@
                 throw new ArgumentException("Properties must not be empty!");
             }
 
-            string newId = Binding.GetObjectService().CreateDocument(RepositoryId, ObjectFactory.ConvertProperties(properties, null, CreateUpdatability),
+            string newId = Binding.GetObjectService().CreateDocument(RepositoryId, ObjectFactory.ConvertProperties(properties, null,
+                (versioningState == VersioningState.CheckedOut ? CreateAndCheckoutUpdatability : CreateUpdatability)),
                 (folderId == null ? null : folderId.Id), contentStream, versioningState, ObjectFactory.ConvertPolicies(policies),
                 ObjectFactory.ConvertAces(addAces), ObjectFactory.ConvertAces(removeAces), null);
 
@@ -717,7 +722,9 @@
             }
 
             string newId = Binding.GetObjectService().CreateDocumentFromSource(RepositoryId, source.Id,
-                ObjectFactory.ConvertProperties(properties, type, CreateUpdatability), (folderId == null ? null : folderId.Id),
+                ObjectFactory.ConvertProperties(properties, type,
+                (versioningState == VersioningState.CheckedOut ? CreateAndCheckoutUpdatability : CreateUpdatability)),
+                (folderId == null ? null : folderId.Id),
                 versioningState, ObjectFactory.ConvertPolicies(policies), ObjectFactory.ConvertAces(addAces),
                 ObjectFactory.ConvertAces(removeAces), null);
 
@@ -838,6 +845,51 @@
             return new CollectionEnumerable<IRelationship>(new PageFetcher<IRelationship>(DefaultContext.MaxItemsPerPage, fetchPageDelegate));
         }
 
+        // delete
+        public void Delete(IObjectId objectId)
+        {
+            Delete(objectId, true);
+        }
+
+        public void Delete(IObjectId objectId, bool allVersions)
+        {
+            if (objectId == null || objectId.Id == null)
+            {
+                throw new ArgumentException("Invalid object id!");
+            }
+
+            Binding.GetObjectService().DeleteObject(RepositoryId, objectId.Id, allVersions, null);
+            RemoveObjectFromCache(objectId);
+        }
+
+        // content stream
+        public IContentStream GetContentStream(IObjectId docId)
+        {
+            return GetContentStream(docId, null, null, null);
+        }
+
+        public IContentStream GetContentStream(IObjectId docId, string streamId, long? offset, long? length)
+        {
+            if (docId == null || docId.Id == null)
+            {
+                throw new ArgumentException("Invalid document id!");
+            }
+
+            // get the content stream
+            IContentStream contentStream = null;
+            try
+            {
+                contentStream = Binding.GetObjectService().GetContentStream(RepositoryId, docId.Id, streamId, offset, length, null);
+            }
+            catch (CmisConstraintException)
+            {
+                // no content stream
+                return null;
+            }
+
+            return contentStream;
+        }
+
         // permissions
 
         public IAcl GetAcl(IObjectId objectId, bool onlyBasicPermissions)
diff --git a/DotCMIS/client/client-intf.cs b/DotCMIS/client/client-intf.cs
index 1254b44..7e56dda 100644
--- a/DotCMIS/client/client-intf.cs
+++ b/DotCMIS/client/client-intf.cs
@@ -259,8 +259,15 @@
         IItemEnumerable<IRelationship> GetRelationships(IObjectId objectId, bool includeSubRelationshipTypes,
                 RelationshipDirection? relationshipDirection, IObjectType type, IOperationContext context);
 
-        // permissions
+        // delete
+        void Delete(IObjectId objectId);
+        void Delete(IObjectId objectId, bool allVersions);
 
+        // content stream
+        IContentStream GetContentStream(IObjectId docId);
+        IContentStream GetContentStream(IObjectId docId, string streamId, long? offset, long? length);
+
+        // permissions
         IAcl GetAcl(IObjectId objectId, bool onlyBasicPermissions);
         IAcl ApplyAcl(IObjectId objectId, IList<IAce> addAces, IList<IAce> removeAces, AclPropagation? aclPropagation);
         void ApplyPolicy(IObjectId objectId, params IObjectId[] policyIds);
@@ -854,6 +861,12 @@
         IContentStream GetContentStream(string streamId);
 
         /// <summary>
+        /// Gets the content stream identified by the given stream id with the given offset and length.
+        /// </summary>
+        /// <returns>the content stream or <c>null</c> if the stream id is not associated with content</returns>
+        IContentStream GetContentStream(string streamId, long? offset, long? length);
+
+        /// <summary>
         /// Sets a new content stream for this document.
         /// </summary>
         /// <param name="contentStream">the content stream</param>
diff --git a/DotCMIS/client/client-objects.cs b/DotCMIS/client/client-objects.cs
index 2e9c9c0..53e5d3c 100644
--- a/DotCMIS/client/client-objects.cs
+++ b/DotCMIS/client/client-objects.cs
@@ -200,7 +200,7 @@
             Lock();
             try
             {
-                Binding.GetObjectService().DeleteObject(RepositoryId, ObjectId, allVersions, null);
+                Session.Delete(this, allVersions);
             }
             finally
             {
@@ -931,14 +931,15 @@
             return GetContentStream(null);
         }
 
-        public IContentStream GetContentStream(String streamId)
+        public IContentStream GetContentStream(string streamId)
         {
-            IContentStream contentStream;
-            try
-            {
-                contentStream = Binding.GetObjectService().GetContentStream(RepositoryId, ObjectId, streamId, null, null, null);
-            }
-            catch (CmisConstraintException)
+            return GetContentStream(streamId, null, null);
+        }
+
+        public IContentStream GetContentStream(string streamId, long? offset, long? length)
+        {
+            IContentStream contentStream = Session.GetContentStream(this, streamId, offset, length);
+            if (contentStream == null)
             {
                 // no content stream
                 return null;
