diff --git a/modules/callbacks.inc b/modules/callbacks.inc
index dca9e1d..501b09f 100644
--- a/modules/callbacks.inc
+++ b/modules/callbacks.inc
@@ -610,16 +610,19 @@ function entity_metadata_field_file_validate_item($items, $context) {
  * called entity_metadata_node_access().
  */
 function entity_metadata_no_hook_node_access($op, $node = NULL, $account = NULL) {
-  if (isset($node)) {
+  // Standard case: There is a normal node object to check access for.
+  if (isset($node) && isset($node->nid)) {
     // If a non-default revision is given, incorporate revision access.
     $default_revision = node_load($node->nid);
     if ($node->vid != $default_revision->vid) {
       return _node_revision_access($node, $op);
     }
+    // Otherwise, use the standard node access.
     else {
       return node_access($op, $node, $account);
     }
   }
+
   // Is access to all nodes allowed?
   if (!user_access('access content', $account)) {
     return FALSE;
@@ -627,6 +630,17 @@ function entity_metadata_no_hook_node_access($op, $node = NULL, $account = NULL)
   if (user_access('bypass node access', $account) || (!isset($account) && $op == 'view' && node_access_view_all_nodes())) {
     return TRUE;
   }
+
+  // Is this a create operation?
+  if ($op == 'create') {
+    if (is_string($node)) {
+      $bundle = $node;
+    }
+    elseif (isset($node->type)) {
+      $bundle = $node->type;
+    }
+    return node_access($op, $bundle, $account);
+  }
   return FALSE;
 }
 
