diff --git a/DotCMIS/binding/atompub/atompub.cs b/DotCMIS/binding/atompub/atompub.cs
index f2de6bc..96acdf1 100644
--- a/DotCMIS/binding/atompub/atompub.cs
+++ b/DotCMIS/binding/atompub/atompub.cs
@@ -495,6 +495,37 @@
 
         // ---- common methods ----
 
+        protected cmisObjectType CreateObject(IProperties properties, string changeToken, IList<string> policies)
+        {
+            cmisObjectType cmisObject = new cmisObjectType();
+            IProperties newProps = properties;
+
+            if (changeToken != null)
+            {
+                newProps = new Properties();
+                if (properties != null)
+                {
+                    foreach (IPropertyData prop in properties.PropertyList)
+                    {
+                        ((Properties)newProps).AddProperty(prop);
+                    }
+                }
+
+                if (newProps[PropertyIds.ChangeToken] == null)
+                {
+                    PropertyData changeTokenProperty = new PropertyData(PropertyType.String);
+                    changeTokenProperty.Id = PropertyIds.ChangeToken;
+                    changeTokenProperty.AddValue(changeToken);
+                    ((Properties)newProps).AddProperty(changeTokenProperty);
+                }
+            }
+
+            cmisObject.properties = Converter.Convert(newProps);
+            cmisObject.policyIds = Converter.ConvertPolicies(policies);
+
+            return cmisObject;
+        }
+
         protected cmisObjectType CreateIdObject(string objectId)
         {
             cmisObjectType cmisObject = new cmisObjectType();
@@ -1546,9 +1577,7 @@
             url.AddParameter(AtomPubConstants.ParamVersioningState, versioningState);
 
             // set up object and writer
-            cmisObjectType cmisObject = new cmisObjectType();
-            cmisObject.properties = Converter.Convert(properties);
-            cmisObject.policyIds = Converter.ConvertPolicies(policies);
+            cmisObjectType cmisObject = CreateObject(properties, null, policies);
 
             string mediaType = null;
             Stream stream = null;
@@ -1598,9 +1627,7 @@
 
 
             // set up object and writer
-            cmisObjectType cmisObject = new cmisObjectType();
-            cmisObject.properties = Converter.Convert(properties);
-            cmisObject.policyIds = Converter.ConvertPolicies(policies);
+            cmisObjectType cmisObject = CreateObject(properties, null, policies);
 
             AtomEntryWriter entryWriter = new AtomEntryWriter(cmisObject);
 
@@ -1645,9 +1672,7 @@
             UrlBuilder url = new UrlBuilder(link);
 
             // set up object and writer
-            cmisObjectType cmisObject = new cmisObjectType();
-            cmisObject.properties = Converter.Convert(properties);
-            cmisObject.policyIds = Converter.ConvertPolicies(policies);
+            cmisObjectType cmisObject = CreateObject(properties, null, policies);
 
             AtomEntryWriter entryWriter = new AtomEntryWriter(cmisObject);
 
@@ -1694,9 +1719,7 @@
 
 
             // set up object and writer
-            cmisObjectType cmisObject = new cmisObjectType();
-            cmisObject.properties = Converter.Convert(properties);
-            cmisObject.policyIds = Converter.ConvertPolicies(policies);
+            cmisObjectType cmisObject = CreateObject(properties, null, policies);
 
             AtomEntryWriter entryWriter = new AtomEntryWriter(cmisObject);
 
@@ -1832,9 +1855,7 @@
             url.AddParameter(AtomPubConstants.ParamChangeToken, changeToken);
 
             // set up object and writer
-            cmisObjectType cmisObject = new cmisObjectType();
-            cmisObject.properties = Converter.Convert(properties);
-
+            cmisObjectType cmisObject = CreateObject(properties, changeToken, null);
             AtomEntryWriter entryWriter = new AtomEntryWriter(cmisObject);
 
             // update
@@ -2283,9 +2304,7 @@
             url.AddParameter(AtomPubConstants.ParamCheckIn, "true");
 
             // set up object and writer
-            cmisObjectType cmisObject = new cmisObjectType();
-            cmisObject.properties = Converter.Convert(properties);
-            cmisObject.policyIds = Converter.ConvertPolicies(policies);
+            cmisObjectType cmisObject = CreateObject(properties, null, policies);
 
             if (cmisObject.properties == null)
             {
