diff --git a/advpoll.module b/advpoll.module
index c518d5a..3283a7f 100644
--- advpoll.module
+++ advpoll.module
@@ -183,8 +183,16 @@ function advpoll_init() {
   }
 }
 
+function advpoll_node_types() {
+  static $node_types;
+  if (!isset($node_types)) {
+    $node_types = advpoll_node_info();
+    $node_types = array_keys($node_types);
+  }
+  return $node_types;
+}
 function _advpoll_results_access($node) {
-  return strstr($node->type, 'advpoll_') && _advpoll_is_active($node) && $node->votes > 0 && !$node->voted && _advpoll_can_view_results($node);
+  return in_array($node->type, advpoll_node_types()) && _advpoll_is_active($node) && $node->votes > 0 && !$node->voted && _advpoll_can_view_results($node);
 }
 
 function _advpoll_electoral_list_access($node) {
@@ -192,15 +200,15 @@ function _advpoll_electoral_list_access($node) {
 }
 
 function _advpoll_votes_access($node) {
-  return strstr($node->type, 'advpoll_') && $node->votes > 0 && ((user_access('inspect all votes') && $node->show_votes) || user_access('administer polls'));
+  return in_array($node->type, advpoll_node_types()) && $node->votes > 0 && ((user_access('inspect all votes') && $node->show_votes) || user_access('administer polls'));
 }
 
 function _advpoll_clear_votes_access($node) {
-  return strstr($node->type, 'advpoll_') && $node->votes > 0 && user_access('administer polls');
+  return in_array($node->type, advpoll_node_types()) && $node->votes > 0 && user_access('administer polls');
 }
 
 function _advpoll_writeins_access($node) {
-  if (!strstr($node->type, 'advpoll_') || !user_access('administer polls')) {
+  if (!in_array($node->type, advpoll_node_types()) || !user_access('administer polls')) {
     return FALSE;
   }
 
