--- modules/node/node.module.orig	2008-08-13 20:28:56.000000000 +0200
+++ modules/node/node.module	2008-08-13 20:29:23.000000000 +0200
@@ -2065,10 +2065,6 @@
   if (empty($account)) {
     $account = $user;
   }
-  // If the node is in a restricted format, disallow editing.
-  if ($op == 'update' && !filter_access($node->format)) {
-    return FALSE;
-  }
 
   if (user_access('administer nodes', $account)) {
     return TRUE;
--- modules/filter/filter.module.orig	2008-08-11 20:01:51.000000000 +0200
+++ modules/filter/filter.module	2008-08-13 20:31:25.000000000 +0200
@@ -142,6 +142,23 @@
 }
 
 /**
+ * Implementation of hook_form_alter().
+ */
+function filter_form_alter(&$form, $form_state, $form_id) {
+  if (isset($form['type']) && $form['type']['#value'] .'_node_form' == $form_id && !empty($form['nid']['#value'])) {
+    foreach (element_children($form) as $key) {
+      if (isset($form[$key]['format'])) {
+        if (!filter_access($form['#node']->format)) {
+          $form[$key]['#access'] = false;
+          $form['disabled_'. $key]['format'] = array('#type' => 'value', '#value' => $form['#node']->format);
+          $form['disabled_'. $key]['#markup'] = t('%title has been disabled because you don\'t have the proper permissions to edit this field.', array('%title' => $form[$key]['body']['#title']));
+        }
+      }
+    }
+  }
+}
+
+/**
  * Implementation of hook_perm().
  */
 function filter_perm() {
