--- translation.module	2008-02-06 16:37:30.000000000 +0200
+++ translation_new.module	2008-02-06 16:37:20.000000000 +0200
@@ -79,7 +79,7 @@ function translation_menu($may_cache) {
   }
   else {
     if (arg(0) == 'node' && is_numeric(arg(1)) && variable_get('i18n_node_'.translation_get_node_type(arg(1)), 0)) {
-      $access = user_access('translate nodes');
+      $access = translation_access(node_load(array('nid' => arg(1))));
       $type = MENU_LOCAL_TASK;      
       $items[] = array(
         'path' => 'node/'. arg(1) .'/translation', 
@@ -113,13 +113,22 @@ function translation_menu($may_cache) {
 }
 
 /**
- * Implementation of hook_perm
+ * Implementation of hook_perm().
  */
 function translation_perm(){
-  return array('translate nodes');
+  return array('translate nodes', 'translate own nodes');
 }
 
 /**
+ * Implementation of hook_access().
+ */
+function translation_access($node) {
+        global $user;
+        return user_access('translate nodes') || $node->uid == $user->uid && user_access('translate own nodes');
+}
+
+
+/**
  * Form builder function: settings form
  */
 function translation_admin_settings(){
@@ -180,7 +189,7 @@ function translation_form_alter($form_id
     if ($node->nid && $node->translation) {
       $translations = $node->translation;
     }
-    elseif (isset($_GET['translation']) && user_access('translate nodes')) {
+    elseif (isset($_GET['translation']) && translation_access(node_load(array('nid' => $_GET['translation'])))) {
       // We are translating a node: node/add/type/translation/nid/lang
       $translation_nid = $_GET['translation'];
       $language = $_GET['language'];
