diff --git cck_private_fields.install cck_private_fields.install
index 5363f15..17bc71b 100644
--- cck_private_fields.install
+++ cck_private_fields.install
@@ -71,10 +71,10 @@ function cck_private_fields_schema() {
         'description' => 'The {node_type}.type of this node.',
       ),
       'privacy_status' => array(
-        'type'        => 'int',
-        'unsigned'    => TRUE,
+        'type'        => 'varchar',
+        'length'      => 32,
         'not null'    => TRUE,
-        'default'     => 0,
+        'default'     => '0',
         'description' => 'The privacy status defined for this field on this particular node.',
       ),
     ),
@@ -272,3 +272,15 @@ function cck_private_fields_update_6005() {
 
   return $ret;
 }
+
+/**
+ * Change the fieldtype of privacy_status from number to string.
+ * TODO Update all statuses, thats the hard part.
+ */
+function cck_private_fields_update_6006() {
+  $ret = array();
+  db_change_field($ret, 'cck_private_fields', 'privacy_status', 'privacy_status', array('type' => 'varchar', 'length' => 32, 'not null' => TRUE, 'default' => '0'));
+
+  return $ret;
+}
+
diff --git cck_private_fields.module cck_private_fields.module
index d57aab7..31ef9d4 100644
--- cck_private_fields.module
+++ cck_private_fields.module
@@ -90,7 +90,7 @@ function cck_private_fields_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
         $private_fields = cck_private_fields_get_content_private_fields($node->type);
         foreach ($node->cck_private_fields as $field_name => $privacy_status) {
           if ($private_fields[$field_name] !== FALSE) {
-            db_query("INSERT INTO {cck_private_fields} (nid, vid, content_type, field_name, privacy_status) VALUES (%d, %d, '%s', '%s', %d)", array(
+            db_query("INSERT INTO {cck_private_fields} (nid, vid, content_type, field_name, privacy_status) VALUES (%d, %d, '%s', '%s', '%s')", array(
               $node->nid, $node->vid, $node->type, $field_name, $privacy_status
             ));
           }
@@ -178,3 +178,48 @@ function cck_private_fields_check_install_requirements($module) {
   module_load_include('inc', 'cck_private_fields', 'includes/admin');
   return _cck_private_fields_check_install_requirements($module);
 }
+
+/**
+ * Implementation of hook_private_fields_options().
+ */
+function cck_private_fields_private_fields_options() {
+  $privacy_status_options = array(
+    'cck_private_fields_'. CCK_FIELDS_PRIVACY_STATUS_PUBLIC => array(
+      'name' => t('Public'),
+      'class' => 'cck-private-field-status-icon-public',
+      'label' => t('Public - visible to everyone.'),
+      'admin_text' => t('Enabled and %status by default', array('%status' => t('Public'))),
+    ),
+    'cck_private_fields_'. CCK_FIELDS_PRIVACY_STATUS_HIDDEN => array(
+      'name' => t('Hidden'),
+      'class' => 'cck-private-field-status-icon-hidden',
+      'label' => t('Hidden - visible to you, hidden from everyone else.'),
+      'admin_text' => t('Enabled and %status by default', array('%status' => t('Hidden'))),
+    ),
+  );
+
+  // Enable 'Private' option, only if supported.
+  if (cck_private_fields_get_private_field_access_module()) {
+    'cck_private_fields_'. $privacy_status_options[CCK_FIELDS_PRIVACY_STATUS_PRIVATE] = array(
+      'name' => t('Private'),
+      'class' => 'cck-private-field-status-icon-private',
+      'label' => t('Private - visible to you and your friends.'),
+      'admin_text' => t('Enabled and %status by default', array('%status' => t('Private'))),
+    );
+  }
+
+  return $privacy_status_options;
+}
+
+function cck_private_fields_0_field_access($field, $account, $node) {
+  return TRUE;
+}
+
+function cck_private_fields_1_field_access($field, $account, $node) {
+  return FALSE;
+}
+
+function cck_private_fields_2_field_access($field, $account, $node) {
+  return cck_private_fields_invoke_view_access($field, $node, $account);
+}
+
diff --git includes/admin.inc includes/admin.inc
index b7b5fa9..fc2780d 100644
--- includes/admin.inc
+++ includes/admin.inc
@@ -13,13 +13,13 @@ function _cck_private_fields_content_field_edit_form_alter(&$form) {
   $field_name = $form['#field']['field_name'];
   $content_field_privacy = cck_private_fields_get_content_field_privacy($field_name);
 
+  $options = module_invoke_all('private_fields_options');
+  drupal_alter('private_fields_options', $options);
   $privacy_status_options = array(
     '' => t('Disabled'),
-    CCK_FIELDS_PRIVACY_STATUS_PUBLIC => t('Enabled and %status by default', array('%status' => t('Public'))),
-    CCK_FIELDS_PRIVACY_STATUS_HIDDEN => t('Enabled and %status by default', array('%status' => t('Hidden'))),
   );
-  if (cck_private_fields_get_private_field_access_module()) {
-    $privacy_status_options[CCK_FIELDS_PRIVACY_STATUS_PRIVATE] = t('Enabled and %status by default', array('%status' => t('Private')));
+  foreach ($options as $key => $option) {
+    $privacy_status_options[$key] = $option['admin_text'];
   }
 
   $form['field']['cck_private_fields'] = array(
@@ -56,7 +56,7 @@ function _cck_private_fields_content_field_edit_form_alter(&$form) {
  */
 function _cck_private_fields_content_field_edit_form_submit($form, &$form_state) {
   // Set the privacy option for the given field.
-  $content_field_privacy = (is_numeric($form_state['values']['content_privacy_status']) ? $form_state['values']['content_privacy_status'] : FALSE);
+  $content_field_privacy = (($form_state['values']['content_privacy_status'] != '') ? $form_state['values']['content_privacy_status'] : FALSE);
   cck_private_fields_set_content_field_privacy($form_state['values']['field_name'], $content_field_privacy);
 }
 
diff --git includes/common.inc includes/common.inc
index 02d4aa5..3ad393f 100644
--- includes/common.inc
+++ includes/common.inc
@@ -85,7 +85,7 @@ function cck_private_fields_get_field_usage_count($field_name) {
  */
 function cck_private_fields_get_field_privacy_status($vid, $field_name) {
   $field_privacy_status = db_result(db_query("SELECT privacy_status FROM {cck_private_fields} WHERE vid = %d AND field_name = '%s'", $vid, $field_name));
-  return is_numeric($field_privacy_status) ? (int)$field_privacy_status : (int)cck_private_fields_get_content_field_privacy($field_name);
+  return ($field_privacy_status != '') ? $field_privacy_status : cck_private_fields_get_content_field_privacy($field_name);
 }
 
 /**
diff --git includes/field_access.inc includes/field_access.inc
index 19458e5..9b6f1fa 100644
--- includes/field_access.inc
+++ includes/field_access.inc
@@ -55,11 +55,9 @@ function _cck_private_fields_field_view_access($field, $account, $node) {
   // Get the privacy status of the field.
   $field_privacy_status = cck_private_fields_get_field_privacy_status($node->vid, $field['field_name']);
 
-  if ($field_privacy_status == CCK_FIELDS_PRIVACY_STATUS_HIDDEN) {
-    return FALSE;
-  }
-  elseif ($field_privacy_status == CCK_FIELDS_PRIVACY_STATUS_PRIVATE) {
-    return cck_private_fields_invoke_view_access($field, $node, $account);
+  $function = $field_privacy_status .'_field_access';
+  if (function_exists($function)) {
+    return $function($field, $account, $node);
   }
 
   // Reached this point, field is public.
diff --git includes/node_form.inc includes/node_form.inc
index f0ae042..0a4d69b 100644
--- includes/node_form.inc
+++ includes/node_form.inc
@@ -23,27 +23,8 @@ function _cck_private_fields_node_form_alter(&$form, &$form_state, $private_fiel
   static $js_settings_processed;
 
   // Configure privacy options for fields in this node form.
-  $privacy_status_options = array(
-    CCK_FIELDS_PRIVACY_STATUS_PUBLIC => array(
-      'name' => t('Public'),
-      'class' => 'cck-private-field-status-icon-public',
-      'label' => t('Public - visible to everyone.'),
-    ),
-    CCK_FIELDS_PRIVACY_STATUS_HIDDEN => array(
-      'name' => t('Hidden'),
-      'class' => 'cck-private-field-status-icon-hidden',
-      'label' => t('Hidden - visible to you, hidden from everyone else.'),
-    ),
-  );
-
-  // Enable 'Private' option, only if supported.
-  if (cck_private_fields_get_private_field_access_module()) {
-    $privacy_status_options[CCK_FIELDS_PRIVACY_STATUS_PRIVATE] = array(
-      'name' => t('Private'),
-      'class' => 'cck-private-field-status-icon-private',
-      'label' => t('Private - visible to you and your friends.'),
-    );
-  }
+  $privacy_status_options = module_invoke_all('private_fields_options');
+  drupal_alter('private_fields_options', $privacy_status_options);
 
   // Make sure Drupal settings are not sent more than once per page.
   if (!isset($js_settings_processed)) {
