diff --git a/eck.entity.inc b/eck.entity.inc
index 65b4637..d8d460d 100644
--- a/eck.entity.inc
+++ b/eck.entity.inc
@@ -96,12 +96,17 @@ function eck__entity__menu($entity_type, $bundle) {
   $crud_info = get_bundle_crud_info($entity_type->name, $bundle->name);
   
   foreach($crud_info as $action => $info){
-      
+    
+    //arguments for our fancy access call
+    $access_args = array('entity_type' => $entity_type, 'bundle' => $bundle);
+    
     $action_label = ucfirst($action);
     $args = array();
     
     if(array_key_exists('entity_id', $info)){
       $args[] = $info['entity_id'];
+      $access_args['entity_id'] = $info['entity_id'];
+      $access_args['action'] = $action;
     }
     
     $args = array_merge(array($entity_type->name, $bundle->name), $args);
@@ -118,7 +123,7 @@ function eck__entity__menu($entity_type, $bundle) {
           "eck {$action} entities",
           "eck administer {$entity_type->name} {$bundle->name} entities",
           "eck {$action} {$entity_type->name} {$bundle->name} entities"
-        ), FALSE /*TODO: should auto-load entity author here. */ ),
+        ), (in_array($action, array('edit', 'view', 'delete'))?$access_args:array())),
        'file' => 'eck.entity.inc'
     );
     
@@ -149,6 +154,12 @@ function eck__entity__menu($entity_type, $bundle) {
         if($a != 'view' && $a != 'add' && $a !="list"){
           $al = ucfirst($a);
           
+          if(array_key_exists('entity_id', $i)){
+            $args[] = $i['entity_id'];
+            $access_args['entity_id'] = $info['entity_id'];
+            $access_args['action'] = $a;
+          }
+          
           $view_path = $info['path']."/{$a}";
           
           $menu[$view_path] = array(
@@ -163,7 +174,7 @@ function eck__entity__menu($entity_type, $bundle) {
                 "eck {$a} entities",
                 "eck administer {$entity_type->name} {$bundle->name} entities",
                 "eck {$a} {$entity_type->name} {$bundle->name} entities"
-              ), FALSE /*TODO: should auto-load entity author here. */ ),
+              ), (in_array($action, array('edit', 'view', 'delete'))?$access_args:array())),
             'file' => 'eck.entity.inc',
             'type' => MENU_LOCAL_TASK,
             'context' => (MENU_CONTEXT_PAGE|MENU_CONTEXT_INLINE), 
diff --git a/eck.module b/eck.module
index 41eea23..b55b878 100644
--- a/eck.module
+++ b/eck.module
@@ -528,6 +528,15 @@ function eck_permission() {
         'title' => "{$op_label} {$entity_type->label} Bundles"
       );
     }
+    
+    //if this entity type has a property that is implementing the permissions
+    //hook, let let them do their thing
+    $property_perms = eck_property_behavior_invoke_plugin($entity_type, 'permission',
+    array('entity_type' => $entity_type));
+    
+    foreach($property_perms as $property => $p){
+      $perms = array_merge($perms, $p);
+    }
 
     foreach (Bundle::loadByEntityType($entity_type) as $bundle) {
 
@@ -547,20 +556,43 @@ function eck_permission() {
 + * Callback for checking multiple permissions
 + * @param $perms
 + *  An array of permissions to be checked against.
-+ * @param $b_own
-+ *  Flag to indicate if we should also check ownership permissions which
-+ *  are the same as the usual permissions, but will be postfixed with ' own'.
 + */
-function eck__multiple_access_check($perms, $b_own = FALSE) {
-  foreach($perms as $perm) {
-    if(user_access($perm)) return TRUE;
+function eck__multiple_access_check($perms, $vars = array()) {
+  if(!$vars){
+    $vars = array();  
+  }
+  
+  if(array_key_exists('entity_type', $vars)){
+    $entity_type = $vars['entity_type'];
+    
+    $property_perms = eck_property_behavior_invoke_plugin($entity_type, 'access',
+    $vars); 
+  
+    foreach($property_perms as $property => $p){
+      $perms = array_merge($perms, $p);
+    }
   }
-  if (!$b_own) return FALSE;
-  //check for entity author field and user ownership permissions.
+  
+  if(!$vars){
+    $vars = array();
+  }
+  
+  //lets give properties a chance to enhance our $perms array
+  if(array_key_exists('entity_type', $vars)){
+    $entity_type = $vars['entity_type'];
+    
+    $property_perms = eck_property_behavior_invoke_plugin($entity_type, 'access',
+      $vars);
+    
+    foreach($property_perms as $property => $p){
+      $perms = array_merge($perms, $p);
+    }
+  }
+  
   foreach($perms as $perm) {
-    if(user_access($perm.' own')) return TRUE;
+    if(user_access($perm)) return TRUE;
   }
-  //the user does not have any of the supplied permissions.
+  
   return FALSE;
 }
 
diff --git a/plugins/property_behavior/author.inc b/plugins/property_behavior/author.inc
index 5f01a8e..c896cb1 100644
--- a/plugins/property_behavior/author.inc
+++ b/plugins/property_behavior/author.inc
@@ -3,7 +3,9 @@
 $plugin = array(
   'label' => "Author",
   'entity_save' => 'eck_author_property_entity_save',
-  'property_info' => 'eck_author_property_property_info'
+  'property_info' => 'eck_author_property_property_info',
+  'permission' => 'eck_author_property_permission',
+  'access' => 'eck_author_property_access'
 );
 
 function eck_author_property_entity_save($property, $vars){
@@ -18,3 +20,43 @@ function eck_author_property_property_info($property, $vars){
   $vars['properties'][$property]['type'] = 'user';
   return $vars;
 }
+
+function eck_author_property_permission($property, $vars){
+  $entity_type = $vars['entity_type'];
+  
+  $actions = array('view', 'edit', 'delete');
+  
+  $perms = array();
+  
+  foreach($actions as $action){
+    $label = ucfirst($action);
+    $perms["eck {$action} own {$entity_type->name}"] = array(
+      'title' => "{$label} Own {$entity_type->label}"
+    );
+  }
+  
+  return $perms;
+}
+
+function eck_author_property_access($property, $vars){
+  global $user;
+  
+  $entity_type = $vars['entity_type'];
+  $action = $vars['action'];
+  
+  $entity = entity_load_single($entity_type->name, arg($vars['entity_id']));
+  
+  $uid = $entity->{$property};
+  
+  $perms = array();
+  
+  if($user->uid == $uid){
+  
+    $perms = array();
+
+    $perms[] ="eck {$action} own {$entity_type->name}";
+    
+  }
+  
+  return $perms;
+}
