diff --git a/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Document.java b/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Document.java
index 519d6b8..899baad 100644
--- a/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Document.java
+++ b/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Document.java
@@ -35,6 +35,28 @@
  */
 public interface Document extends FileableCmisObject, DocumentProperties {
 
+    /**
+     * Returns the object type as a document type.
+     * 
+     * @return the document type
+     * 
+     * @throws ClassCastException
+     *             if the object type is not a document type
+     * 
+     * @cmis 1.0
+     */
+    DocumentType getDocumentType();
+
+    /**
+     * Returns whether the document is versionable or not.
+     * 
+     * @return {@code true} if the document is versionable, {@code false} if the
+     *         document is not versionable or if it's unknown
+     * 
+     * @cmis 1.0
+     */
+    boolean isVersionable();
+
     // object service
 
     /**
diff --git a/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Folder.java b/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Folder.java
index 2a1bc9d..91881d4 100644
--- a/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Folder.java
+++ b/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Folder.java
@@ -33,6 +33,18 @@
  */
 public interface Folder extends FileableCmisObject, FolderProperties {
 
+    /**
+     * Returns the object type as a folder type.
+     * 
+     * @return the folder type
+     * 
+     * @throws ClassCastException
+     *             if the object type is not a folder type
+     * 
+     * @cmis 1.0
+     */
+    FolderType getFolderType();
+
     // object service
 
     /**
diff --git a/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Item.java b/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Item.java
index 7ce1cf2..e2aa6b2 100644
--- a/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Item.java
+++ b/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Item.java
@@ -25,4 +25,16 @@
  */
 public interface Item extends FileableCmisObject {
 
+    /**
+     * Returns the object type as an item type.
+     * 
+     * @return the item type
+     * 
+     * @throws ClassCastException
+     *             if the object type is not an item type
+     * 
+     * @cmis 1.1
+     */
+    ItemType getItemType();
+
 }
diff --git a/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Policy.java b/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Policy.java
index 09baa0a..5419922 100644
--- a/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Policy.java
+++ b/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Policy.java
@@ -25,4 +25,16 @@
  */
 public interface Policy extends FileableCmisObject, PolicyProperties {
 
+    /**
+     * Returns the object type as a policy type.
+     * 
+     * @return the policy type
+     * 
+     * @throws ClassCastException
+     *             if the object type is not a policy type
+     * 
+     * @cmis 1.0
+     */
+    PolicyType getPolicyType();
+
 }
diff --git a/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Relationship.java b/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Relationship.java
index 2c117e2..d472512 100644
--- a/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Relationship.java
+++ b/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Relationship.java
@@ -26,26 +26,46 @@
 public interface Relationship extends CmisObject, RelationshipProperties {
 
     /**
-     * Gets the source object. If the source object ID is invalid,
-     * {@code null} will be returned.
+     * Returns the object type as a relationship type.
+     * 
+     * @return the relationship type
+     * 
+     * @throws ClassCastException
+     *             if the object type is not a relationship type
+     * 
+     * @cmis 1.0
+     */
+    RelationshipType getRelationshipType();
+
+    /**
+     * Gets the source object. If the source object ID is invalid, {@code null}
+     * will be returned.
+     * 
+     * @cmis 1.0
      */
     CmisObject getSource();
 
     /**
      * Gets the source object using the given {@link OperationContext}. If the
      * source object ID is invalid, {@code null} will be returned.
+     * 
+     * @cmis 1.0
      */
     CmisObject getSource(OperationContext context);
 
     /**
-     * Gets the target object. If the target object ID is invalid,
-     * {@code null} will be returned.
+     * Gets the target object. If the target object ID is invalid, {@code null}
+     * will be returned.
+     * 
+     * @cmis 1.0
      */
     CmisObject getTarget();
 
     /**
      * Gets the target object using the given {@link OperationContext}. If the
      * target object ID is invalid, {@code null} will be returned.
+     * 
+     * @cmis 1.0
      */
     CmisObject getTarget(OperationContext context);
 }
diff --git a/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Session.java b/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Session.java
index 02fb9c7..e28e383 100644
--- a/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Session.java
+++ b/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Session.java
@@ -544,6 +544,10 @@
     /**
      * Returns the latest version in a version series.
      * 
+     * Some repositories throw an exception if the document is not versionable;
+     * others just return the unversioned document. To avoid surprises, check
+     * first whether the document is versionable or not.
+     * 
      * @param objectId
      *            the document ID of an arbitrary version in the version series
      * 
@@ -556,6 +560,10 @@
     /**
      * Returns the latest version in a version series.
      * 
+     * Some repositories throw an exception if the document is not versionable;
+     * others just return the unversioned document. To avoid surprises, check
+     * first whether the document is versionable or not.
+     * 
      * @param objectId
      *            the document ID of an arbitrary version in the version series
      * @param context
@@ -570,6 +578,14 @@
     /**
      * Returns the latest version in a version series.
      * 
+     * Some repositories throw an exception if the document is not versionable;
+     * others just return the unversioned document. To avoid surprises, check
+     * first whether the document is versionable or not.
+     * 
+     * If {@code major} == {@code true} and the version series doesn't contain a
+     * major version, the repository is supposed to throw a
+     * {@link CmisObjectNotFoundException}.
+     * 
      * @param objectId
      *            the document ID of an arbitrary version in the version series
      * @param major
@@ -585,7 +601,11 @@
     Document getLatestDocumentVersion(ObjectId objectId, boolean major, OperationContext context);
 
     /**
-     * /** Returns the latest version in a version series.
+     * Returns the latest version in a version series.
+     * 
+     * Some repositories throw an exception if the document is not versionable;
+     * others just return the unversioned document. To avoid surprises, check
+     * first whether the document is versionable or not.
      * 
      * @param objectId
      *            the document ID of an arbitrary version in the version series
@@ -599,6 +619,10 @@
     /**
      * Returns the latest version in a version series.
      * 
+     * Some repositories throw an exception if the document is not versionable;
+     * others just return the unversioned document. To avoid surprises, check
+     * first whether the document is versionable or not.
+     * 
      * @param objectId
      *            the document ID of an arbitrary version in the version series
      * @param context
@@ -613,6 +637,14 @@
     /**
      * Returns the latest version in a version series.
      * 
+     * Some repositories throw an exception if the document is not versionable;
+     * others just return the unversioned document. To avoid surprises, check
+     * first whether the document is versionable or not.
+     * 
+     * If {@code major} == {@code true} and the version series doesn't contain a
+     * major version, the repository is supposed to throw a
+     * {@link CmisObjectNotFoundException}.
+     * 
      * @param objectId
      *            the document ID of an arbitrary version in the version series
      * @param major
diff --git a/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/DocumentImpl.java b/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/DocumentImpl.java
index 0de73bd..491b5fd 100644
--- a/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/DocumentImpl.java
+++ b/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/DocumentImpl.java
@@ -33,6 +33,7 @@
 
 import org.apache.chemistry.opencmis.client.api.CmisObject;
 import org.apache.chemistry.opencmis.client.api.Document;
+import org.apache.chemistry.opencmis.client.api.DocumentType;
 import org.apache.chemistry.opencmis.client.api.ObjectFactory;
 import org.apache.chemistry.opencmis.client.api.ObjectId;
 import org.apache.chemistry.opencmis.client.api.ObjectType;
@@ -67,6 +68,21 @@
         initialize(session, objectType, objectData, context);
     }
 
+    @Override
+    public DocumentType getDocumentType() {
+        ObjectType objectType = super.getType();
+        if (objectType instanceof DocumentType) {
+            return (DocumentType) objectType;
+        } else {
+            throw new ClassCastException("Object type is not a document type.");
+        }
+    }
+
+    @Override
+    public boolean isVersionable() {
+        return Boolean.TRUE.equals(getDocumentType().isVersionable());
+    }
+
     // properties
 
     @Override
diff --git a/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/FolderImpl.java b/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/FolderImpl.java
index 790cbd1..f6bd578 100644
--- a/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/FolderImpl.java
+++ b/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/FolderImpl.java
@@ -30,6 +30,7 @@
 import org.apache.chemistry.opencmis.client.api.Document;
 import org.apache.chemistry.opencmis.client.api.FileableCmisObject;
 import org.apache.chemistry.opencmis.client.api.Folder;
+import org.apache.chemistry.opencmis.client.api.FolderType;
 import org.apache.chemistry.opencmis.client.api.Item;
 import org.apache.chemistry.opencmis.client.api.ItemIterable;
 import org.apache.chemistry.opencmis.client.api.ObjectFactory;
@@ -70,6 +71,16 @@
     }
 
     @Override
+    public FolderType getFolderType() {
+        ObjectType objectType = super.getType();
+        if (objectType instanceof FolderType) {
+            return (FolderType) objectType;
+        } else {
+            throw new ClassCastException("Object type is not a folder type.");
+        }
+    }
+
+    @Override
     public Document createDocument(Map<String, ?> properties, ContentStream contentStream,
             VersioningState versioningState, List<Policy> policies, List<Ace> addAces, List<Ace> removeAces,
             OperationContext context) {
diff --git a/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/ItemImpl.java b/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/ItemImpl.java
index f512628..0119e0f 100644
--- a/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/ItemImpl.java
+++ b/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/ItemImpl.java
@@ -19,6 +19,7 @@
 package org.apache.chemistry.opencmis.client.runtime;
 
 import org.apache.chemistry.opencmis.client.api.Item;
+import org.apache.chemistry.opencmis.client.api.ItemType;
 import org.apache.chemistry.opencmis.client.api.ObjectType;
 import org.apache.chemistry.opencmis.client.api.OperationContext;
 import org.apache.chemistry.opencmis.commons.data.ObjectData;
@@ -34,4 +35,14 @@
         initialize(session, objectType, objectData, context);
     }
 
+    @Override
+    public ItemType getItemType() {
+        ObjectType objectType = super.getType();
+        if (objectType instanceof ItemType) {
+            return (ItemType) objectType;
+        } else {
+            throw new ClassCastException("Object type is not an item type.");
+        }
+    }
+
 }
diff --git a/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PolicyImpl.java b/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PolicyImpl.java
index c4a0c32..a1df32a 100644
--- a/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PolicyImpl.java
+++ b/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PolicyImpl.java
@@ -21,6 +21,7 @@
 import org.apache.chemistry.opencmis.client.api.ObjectType;
 import org.apache.chemistry.opencmis.client.api.OperationContext;
 import org.apache.chemistry.opencmis.client.api.Policy;
+import org.apache.chemistry.opencmis.client.api.PolicyType;
 import org.apache.chemistry.opencmis.commons.PropertyIds;
 import org.apache.chemistry.opencmis.commons.data.ObjectData;
 
@@ -36,8 +37,17 @@
     }
 
     @Override
+    public PolicyType getPolicyType() {
+        ObjectType objectType = super.getType();
+        if (objectType instanceof PolicyType) {
+            return (PolicyType) objectType;
+        } else {
+            throw new ClassCastException("Object type is not a policy type.");
+        }
+    }
+
+    @Override
     public String getPolicyText() {
         return getPropertyValue(PropertyIds.POLICY_TEXT);
     }
-
 }
diff --git a/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/RelationshipImpl.java b/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/RelationshipImpl.java
index eea4fab..7fdde86 100644
--- a/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/RelationshipImpl.java
+++ b/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/RelationshipImpl.java
@@ -23,6 +23,7 @@
 import org.apache.chemistry.opencmis.client.api.ObjectType;
 import org.apache.chemistry.opencmis.client.api.OperationContext;
 import org.apache.chemistry.opencmis.client.api.Relationship;
+import org.apache.chemistry.opencmis.client.api.RelationshipType;
 import org.apache.chemistry.opencmis.commons.PropertyIds;
 import org.apache.chemistry.opencmis.commons.data.ObjectData;
 
@@ -38,6 +39,16 @@
     }
 
     @Override
+    public RelationshipType getRelationshipType() {
+        ObjectType objectType = super.getType();
+        if (objectType instanceof RelationshipType) {
+            return (RelationshipType) objectType;
+        } else {
+            throw new ClassCastException("Object type is not a relationship type.");
+        }
+    }
+
+    @Override
     public CmisObject getSource() {
         return getSource(getSession().getDefaultContext());
     }
diff --git a/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/SessionImpl.java b/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/SessionImpl.java
index db2bf54..5d3cfd2 100644
--- a/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/SessionImpl.java
+++ b/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/SessionImpl.java
@@ -37,6 +37,7 @@
 import org.apache.chemistry.opencmis.client.api.ChangeEvents;
 import org.apache.chemistry.opencmis.client.api.CmisObject;
 import org.apache.chemistry.opencmis.client.api.Document;
+import org.apache.chemistry.opencmis.client.api.DocumentType;
 import org.apache.chemistry.opencmis.client.api.Folder;
 import org.apache.chemistry.opencmis.client.api.ItemIterable;
 import org.apache.chemistry.opencmis.client.api.ObjectFactory;
@@ -646,16 +647,30 @@
         // first attempt: if we got a Document object, try getting the version
         // series ID from it
         if (objectId instanceof Document) {
-            versionSeriesId = ((Document) objectId).getVersionSeriesId();
+            Document sourceDoc = (Document) objectId;
+
+            if (!sourceDoc.isVersionable()) {
+                // if it is not versionable, a getObject() is sufficient
+                return (Document) getObject(sourceDoc, context);
+            }
+
+            versionSeriesId = sourceDoc.getVersionSeriesId();
         }
 
         // second attempt: if we have a Document object in the cache, retrieve
         // the version series ID form there
         if (versionSeriesId == null) {
             if (context.isCacheEnabled()) {
-                CmisObject sourceDoc = cache.getById(objectId.getId(), context.getCacheKey());
-                if (sourceDoc instanceof Document) {
-                    versionSeriesId = ((Document) sourceDoc).getVersionSeriesId();
+                CmisObject sourceObj = cache.getById(objectId.getId(), context.getCacheKey());
+                if (sourceObj instanceof Document) {
+                    Document sourceDoc = (Document) sourceObj;
+
+                    if (!sourceDoc.isVersionable()) {
+                        // if it is not versionable, a getObject() is sufficient
+                        return (Document) getObject(sourceDoc, context);
+                    }
+
+                    versionSeriesId = sourceDoc.getVersionSeriesId();
                 }
             }
         }
@@ -670,11 +685,20 @@
 
                 // get the document to find the version series ID
                 ObjectData sourceObjectData = binding.getObjectService().getObject(getRepositoryId(), objectId.getId(),
-                        PropertyIds.OBJECT_ID + "," + PropertyIds.VERSION_SERIES_ID, false, IncludeRelationships.NONE,
-                        "cmis:none", false, false, null);
+                        PropertyIds.OBJECT_ID + "," + PropertyIds.OBJECT_TYPE_ID + "," + PropertyIds.VERSION_SERIES_ID,
+                        false, IncludeRelationships.NONE, "cmis:none", false, false, null);
+
+                String objectTypeId = null;
 
                 if (sourceObjectData.getProperties() != null
                         && sourceObjectData.getProperties().getProperties() != null) {
+
+                    PropertyData<?> objectTypeIdProp = sourceObjectData.getProperties().getProperties()
+                            .get(PropertyIds.OBJECT_TYPE_ID);
+                    if (objectTypeIdProp != null && objectTypeIdProp.getFirstValue() instanceof String) {
+                        objectTypeId = (String) objectTypeIdProp.getFirstValue();
+                    }
+
                     PropertyData<?> verionsSeriesIdProp = sourceObjectData.getProperties().getProperties()
                             .get(PropertyIds.VERSION_SERIES_ID);
                     if (verionsSeriesIdProp != null && verionsSeriesIdProp.getFirstValue() instanceof String) {
@@ -682,8 +706,16 @@
                     }
                 }
 
-                // the Web Services binding needs the version series ID -> fail
+                // the Web Services binding needs the version series ID
                 if (versionSeriesId == null) {
+
+                    ObjectType type = getTypeDefinition(objectTypeId);
+                    if (type instanceof DocumentType && Boolean.FALSE.equals(((DocumentType) type).isVersionable())) {
+                        // if the document is not versionable, we don't need a
+                        // version series ID
+                        return (Document) getObject(objectId, context);
+                    }
+
                     throw new IllegalArgumentException("Object is not a document or not versionable!");
                 }
             }
