diff --git a/taxonomy_access.module b/taxonomy_access.module
index 7e482bd..b09e00a 100644
--- a/taxonomy_access.module
+++ b/taxonomy_access.module
@@ -1729,3 +1729,20 @@ function _taxonomy_access_grant_help_table() {
 
   return theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('class' => array('grant_help'))));
 }
+
+/**
+ * Implements hook_disable().
+ * 
+ * Removes all options_list callbacks during disabling of the module which where set in the taxonomy_access_field_info_alter()
+ */
+function taxonomy_access_disable() {
+  $fields = field_read_fields();
+  foreach ($fields as $field_name => $field) {
+    if ($field['type'] == 'taxonomy_term_reference') {
+      if ($field['settings']['options_list_callback'] == '_taxonomy_access_term_options') {
+        $field['settings']['options_list_callback'] = '';
+        field_update_field($field);
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/taxonomy_access.test b/taxonomy_access.test
index b0b67f5..219822b 100644
--- a/taxonomy_access.test
+++ b/taxonomy_access.test
@@ -1491,3 +1491,53 @@ class TaxonomyAccessWeightTest extends DrupalWebTestCase {
     );
   }
 }
+
+
+class TaxonomyAccessCallbackCleanupTest extends DrupalWebTestCase {
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Callback Cleanup',
+      'description' => 'Test callback cleanup during disabling of module works.',
+      'group' => 'Taxonomy Access Control',
+    );
+  }
+
+  public function setUp() {
+    parent::setUp('taxonomy_access');
+  }
+
+  /**
+  * Verifies that the module successfully cleans up the callbacks during disabling
+  */
+  public function testCallbackCleanup() {
+    
+    // the problem only happens on new fields after the module is installed
+    // create a random ContentType
+    $contenttype = $this->drupalCreateContentType();
+    
+    // create a new Field with type taxonomy_term_reference
+    $field_name = drupal_strtolower($this->randomName() . '_field_name');
+    $field = array('field_name' => $field_name, 'type' => 'taxonomy_term_reference', 'cardinality' => 1);
+    $field = field_create_field($field);
+    
+    // add field to content type
+    $field_instance = array(
+      'field_name' => $field_name,
+      'entity_type' => 'node',
+      'bundle' => $contenttype->name
+    );
+    $field_instance = field_create_instance($field_instance);
+    
+    // disable module, so the disable hook which cleans up the callbacks is called
+    module_disable(array('taxonomy_access'), TRUE);
+    
+    // User creation so that we can check if we can access the node add pages
+    $this->privileged_user = $this->drupalCreateUser(array('bypass node access'));
+    $this->drupalLogin($this->privileged_user);
+    
+    // if the callbacks are not cleaned up we would get a fatal error
+    $this->drupalGet("node/add/".$contenttype->name);
+    $this->assertText(t('Create @name', array('@name' => $contenttype->name)), t('New Content can be added'));
+  }
+}
\ No newline at end of file
