diff --git oak-core/src/main/resources/org/apache/jackrabbit/oak/plugins/nodetype/write/builtin_nodetypes.cnd oak-core/src/main/resources/org/apache/jackrabbit/oak/plugins/nodetype/write/builtin_nodetypes.cnd
index 1fe06f7..3a3d4ae 100644
--- oak-core/src/main/resources/org/apache/jackrabbit/oak/plugins/nodetype/write/builtin_nodetypes.cnd
+++ oak-core/src/main/resources/org/apache/jackrabbit/oak/plugins/nodetype/write/builtin_nodetypes.cnd
@@ -53,7 +53,7 @@
  * jcr:content. The jcr:content node is used to hold the actual content of the
  * file. This child node is mandatory, but not auto-created. Its node type will be
  * application-dependent and therefore it must be added by the user. A common
- * approach is to make the jcr:content a node of type nt:resource. The
+ * approach is to make the jcr:content a node of type oak:Resource. The
  * jcr:content child node is also designated as the primary child item of its parent.
  *
  * @since 1.0
@@ -98,6 +98,16 @@
   - jcr:data (BINARY) mandatory
 
 /**
+ * This node type may be used to represent the content of a file. This should be
+ * preferred over nt:resource if non referenceable nt:file nodes are required
+ *
+ * @since 1.5.6
+ */
+[oak:Resource] > mix:mimeType, mix:lastModified
+  primaryitem jcr:data
+  - jcr:data (BINARY) mandatory
+
+/**
  * This mixin node type can be used to add standardized title and description
  * properties to a node.
  *
diff --git oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/nodetype/write/NodeTypeRegistryTest.java oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/nodetype/write/NodeTypeRegistryTest.java
index 5e620c9..121e8ac 100644
--- oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/nodetype/write/NodeTypeRegistryTest.java
+++ oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/nodetype/write/NodeTypeRegistryTest.java
@@ -21,10 +21,15 @@ import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.collect.ImmutableList.of;
 import static org.apache.jackrabbit.JcrConstants.JCR_MIXINTYPES;
 import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE;
+import static org.apache.jackrabbit.JcrConstants.NT_FILE;
 import static org.apache.jackrabbit.JcrConstants.NT_FOLDER;
+import static org.apache.jackrabbit.JcrConstants.NT_RESOURCE;
 import static org.apache.jackrabbit.JcrConstants.NT_UNSTRUCTURED;
 import static org.apache.jackrabbit.oak.api.Type.NAME;
 import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.MIX_INDEXABLE;
+import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.NODE_TYPES_PATH;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 import java.io.Closeable;
 import java.io.IOException;
@@ -45,6 +50,7 @@ import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants;
 import org.apache.jackrabbit.oak.plugins.nodetype.TypeEditorProvider;
 import org.apache.jackrabbit.oak.spi.security.OpenSecurityProvider;
+import org.apache.jackrabbit.oak.util.TreeUtil;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -113,4 +119,33 @@ public class NodeTypeRegistryTest {
         test.addChild("oak:index").setProperty(JCR_PRIMARYTYPE, NT_UNSTRUCTURED, NAME);
         root.commit();
     }
+
+    @Test
+    public void oakResource() throws Exception{
+        registerNodeType(root, "builtin_nodetypes.cnd");
+        Tree typeRoot = root.getTree(NODE_TYPES_PATH);
+        Tree test1 = TreeUtil.addChild(root.getTree("/"), "test1", NT_FILE, typeRoot, "admin");
+        Tree content1 = TreeUtil.addChild(test1, "jcr:content", "oak:Resource", typeRoot, "admin");
+        content1.setProperty("jcr:data", "hello".getBytes());
+
+        Tree test2 = TreeUtil.addChild(root.getTree("/"), "test2", NT_FILE, typeRoot, "admin");
+        Tree content2 = TreeUtil.addChild(test2, "jcr:content", NT_RESOURCE, typeRoot, "admin");
+        content2.setProperty("jcr:data", "hello".getBytes());
+        root.commit();
+
+        test1 = root.getTree("/").addChild("test1");
+
+        assertTrue(test1.getChild("jcr:content").hasProperty("jcr:lastModifiedBy"));
+        assertTrue(test1.getChild("jcr:content").hasProperty("jcr:lastModified"));
+
+        //For oak:Resource the uuid property should not get generated
+        assertFalse(test1.getChild("jcr:content").hasProperty("jcr:uuid"));
+
+        test2 = root.getTree("/").addChild("test2");
+
+        assertTrue(test2.getChild("jcr:content").hasProperty("jcr:lastModifiedBy"));
+        assertTrue(test2.getChild("jcr:content").hasProperty("jcr:lastModified"));
+        assertTrue(test2.getChild("jcr:content").hasProperty("jcr:uuid"));
+
+    }
 }
