diff --git a/cck_private_fields.module b/cck_private_fields.module
index 7aac9e5..75f2d72 100644
--- a/cck_private_fields.module
+++ b/cck_private_fields.module
@@ -46,7 +46,7 @@ function cck_private_fields_theme($existing, $type, $theme, $path) {
 function cck_private_fields_perm() {
   module_load_include('inc', 'cck_private_fields', 'includes/common');
   $perms = array();
-  foreach (array_keys(cck_private_fields_get_private_fields()) as $field_name) {
+  foreach (cck_private_fields_get_private_fields() as $field_name) {
     foreach (array('view', 'edit') as $op) {
       $perms[] = cck_private_fields_build_permission_name($op, $field_name);
     }
diff --git a/includes/common.inc b/includes/common.inc
index 1b05f62..6ffcc13 100644
--- a/includes/common.inc
+++ b/includes/common.inc
@@ -42,15 +42,12 @@ function cck_private_fields_get_content_private_fields($type_name, $reset = FALS
   }
   if (!isset($private_fields[$type_name])) {
     $private_fields[$type_name] = array();
-    // Scan the list of fields defined in the given content type.
-    $result = db_query("SELECT nfi.field_name, nfi.label
-      FROM {". content_instance_tablename() ."} nfi
-        INNER JOIN {". content_field_tablename() ."} nf ON nfi.field_name = nf.field_name
-      WHERE nfi.type_name = '%s' AND nf.active = 1 AND nf.locked = 0", $type_name);
-    while ($instance = db_fetch_object($result)) {
-      $content_field_privacy = cck_private_fields_get_content_field_privacy($instance->field_name);
+    $info = content_types($type_name);
+    $fields = $info['fields'];
+    foreach($fields as $field_name => $field_info) {
+      $content_field_privacy = cck_private_fields_get_content_field_privacy($field_name);
       if ($content_field_privacy !== FALSE) {
-        $private_fields[$type_name][$instance->field_name] = $content_field_privacy;
+        $private_fields[$type_name][$field_name] = $content_field_privacy;
       }
     }
   }
@@ -64,11 +61,11 @@ function cck_private_fields_get_private_fields($reset = FALSE) {
   static $private_fields;
   if (!isset($private_fields) || $reset) {
     $private_fields = array();
-  }
-  $result = db_query("SELECT name FROM {variable} WHERE name LIKE 'cck\_private\_fields\_field\_%%'");
-  while ($row = db_fetch_object($result)) {
-    $field_name = preg_replace('`^cck_private_fields_(.*)$`', '\1', $row->name);
-    $private_fields[$field_name] = cck_private_fields_get_content_field_privacy($field_name);
+    foreach(content_fields() as $field_name => $field_info) {
+      if (cck_private_fields_get_content_field_privacy($field_name)) {
+        $private_fields[$field_name] = $field_name;
+      }
+    }
   }
   return $private_fields;
 }
