diff --git a/src/main/java/org/apache/sling/servlets/post/impl/helper/JCRSupport.java b/src/main/java/org/apache/sling/servlets/post/impl/helper/JCRSupport.java
index f844087..bba35da 100644
--- a/src/main/java/org/apache/sling/servlets/post/impl/helper/JCRSupport.java
+++ b/src/main/java/org/apache/sling/servlets/post/impl/helper/JCRSupport.java
@@ -187,4 +187,13 @@
         }
         return null;
     }
+
+    public void setPrimaryNodeType(final Object node, final String type)
+    throws PersistenceException {
+        if ( node != null && supportImpl != null ) {
+            ((JCRSupportImpl)supportImpl).setPrimaryNodeType(node, type);
+        } else {
+            throw new PersistenceException("Node type should be set but JCR support is not available");
+        }
+    }
 }
diff --git a/src/main/java/org/apache/sling/servlets/post/impl/helper/JCRSupportImpl.java b/src/main/java/org/apache/sling/servlets/post/impl/helper/JCRSupportImpl.java
index 9e09928..9aa9cd0 100644
--- a/src/main/java/org/apache/sling/servlets/post/impl/helper/JCRSupportImpl.java
+++ b/src/main/java/org/apache/sling/servlets/post/impl/helper/JCRSupportImpl.java
@@ -394,4 +394,13 @@
     public Object getNode(final Resource rsrc) {
         return rsrc.adaptTo(Node.class);
     }
+
+    public void setPrimaryNodeType(final Object node, final String type)
+    throws PersistenceException {
+        try {
+            ((Node)node).setPrimaryType(type);
+        } catch ( final RepositoryException re) {
+            throw new PersistenceException(re.getMessage(), re);
+        }
+    }
 }
diff --git a/src/main/java/org/apache/sling/servlets/post/impl/operations/AbstractCreateOperation.java b/src/main/java/org/apache/sling/servlets/post/impl/operations/AbstractCreateOperation.java
index 95f503f..036de5b 100644
--- a/src/main/java/org/apache/sling/servlets/post/impl/operations/AbstractCreateOperation.java
+++ b/src/main/java/org/apache/sling/servlets/post/impl/operations/AbstractCreateOperation.java
@@ -25,10 +25,6 @@
 import java.util.Random;
 import java.util.regex.Pattern;
 
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.servlet.ServletException;
-
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.request.RequestParameter;
@@ -141,7 +137,7 @@
             final PostResponse response,
             final List<Modification> changes,
             final VersioningConfiguration versioningConfiguration)
-    throws PersistenceException, RepositoryException {
+    throws PersistenceException {
 
         final String path = response.getPath();
         final Resource resource = resolver.getResource(path);
@@ -161,18 +157,18 @@
                     final Map<String, RequestProperty> reqProperties,
                     final List<Modification> changes,
                     final VersioningConfiguration versioningConfiguration)
-    throws PersistenceException, RepositoryException {
+    throws PersistenceException {
         final String nodeType = getPrimaryType(reqProperties, path);
         if (nodeType != null) {
             final Resource rsrc = resolver.getResource(path);
             final ModifiableValueMap mvm = rsrc.adaptTo(ModifiableValueMap.class);
             if ( mvm != null ) {
-                final Node node = rsrc.adaptTo(Node.class);
+                final Object node = this.jcrSsupport.getNode(rsrc);
                 final boolean wasVersionable = (node == null ? false : this.jcrSsupport.isVersionable(rsrc));
 
                 if ( node != null ) {
                     this.jcrSsupport.checkoutIfNecessary(rsrc, changes, versioningConfiguration);
-                    node.setPrimaryType(nodeType);
+                    this.jcrSsupport.setPrimaryNodeType(node, nodeType);
                 } else {
                     mvm.put(JcrConstants.JCR_PRIMARYTYPE, nodeType);
                 }
@@ -220,9 +216,6 @@
     /**
      * Collects the properties that form the content to be written back to the
      * resource tree.
-     *
-     * @throws RepositoryException if a repository error occurs
-     * @throws ServletException if an internal error occurs
      */
     protected Map<String, RequestProperty> collectContent(
             final SlingHttpServletRequest request,
@@ -530,7 +523,7 @@
                     final Map<String, RequestProperty> reqProperties,
                     final List<Modification> changes,
                     final VersioningConfiguration versioningConfiguration)
-    throws PersistenceException, RepositoryException {
+    throws PersistenceException {
         if (log.isDebugEnabled()) {
             log.debug("Deep-creating resource '{}'", path);
         }
@@ -642,7 +635,7 @@
 
 
     protected String generateName(SlingHttpServletRequest request, String basePath)
-    	throws RepositoryException {
+    	throws PersistenceException {
 
 		// SLING-1091: If a :name parameter is supplied, the (first) value of this parameter is used unmodified as the name
 		//    for the new node. If the name is illegally formed with respect to JCR name requirements, an exception will be
@@ -658,7 +651,7 @@
 
 		        // if the resulting path already exists then report an error
 	            if (request.getResourceResolver().getResource(basePath) != null) {
-	    		    throw new RepositoryException(
+	    		    throw new PersistenceException(
 	    			        "Collision in node names for path=" + basePath);
 	            }
 
@@ -692,7 +685,7 @@
     }
 
     /** Generate a unique path in case the node name generator didn't */
-    private String ensureUniquePath(SlingHttpServletRequest request, String basePath) throws RepositoryException {
+    private String ensureUniquePath(SlingHttpServletRequest request, String basePath) throws PersistenceException {
 		// if resulting path exists, add a suffix until it's not the case
 		// anymore
         final ResourceResolver resolver = request.getResourceResolver();
@@ -713,7 +706,7 @@
 
 	        // Give up after MAX_TRIES
 	        if (resolver.getResource(basePath) != null ) {
-	            throw new RepositoryException(
+	            throw new PersistenceException(
 	                "Collision in generated node names under " + basePath + ", generated path " + basePath + " already exists");
 	        }
 		}
diff --git a/src/main/java/org/apache/sling/servlets/post/impl/operations/ModifyOperation.java b/src/main/java/org/apache/sling/servlets/post/impl/operations/ModifyOperation.java
index 1dd29e7..1ded8c7 100644
--- a/src/main/java/org/apache/sling/servlets/post/impl/operations/ModifyOperation.java
+++ b/src/main/java/org/apache/sling/servlets/post/impl/operations/ModifyOperation.java
@@ -164,7 +164,7 @@
         if (doGenerateName) {
             try {
                 path = generateName(request, path);
-            } catch (RepositoryException re) {
+            } catch (PersistenceException re) {
                 throw new SlingException("Failed to generate name", re);
             }
         }
