diff --git a/taxotouch.module b/taxotouch.module
index 4410844..410d665 100644
--- a/taxotouch.module
+++ b/taxotouch.module
@@ -16,7 +16,7 @@ function taxotouch_menu() {
     'description' => 'Advanced navigation in terms.',
     'page callback' => 'drupal_get_form',
     'page arguments' => array('taxotouch_admin_settings'),
-    'access arguments' => array('administer site configuration'),
+    'access arguments' => array('administer taxotouch'),
     'type' => MENU_NORMAL_ITEM,
   );
   $items['taxotouch'] = array(
@@ -38,6 +38,13 @@ function taxotouch_menu() {
 }
 
 /**
+ * Implementation of hook_perm().
+ */
+function taxotouch_perm() {
+  return array('administer taxotouch');
+}
+
+/**
  * Get all terms from enabled vocabulary.
  *
  * @param $vocs
@@ -80,7 +87,7 @@ function taxotouch_get_attendant_terms($arg_terms) {
 
 /**
  * Get title for taxotouch page
- * 
+ *
  * @param $tids
  *    Array of tid selected terms
  * @return
@@ -94,7 +101,7 @@ function taxotouch_get_title($tids) {
     $title[] = $term->name;
   }
 
-  return implode(', ', $title);
+  return check_plain(implode(', ', $title));
 }
 
 /**
@@ -108,7 +115,7 @@ function taxotouch_block($op = 'list', $delta = 0, $edit = array()) {
 
     return $blocks;
   }
-  else if ($op == 'view') {
+  elseif ($op == 'view') {
     $enable_vocs = variable_get('taxotouch_enable_vocs', array(0));
     $taxonomy_terms = taxotouch_get_terms($enable_vocs);
 
@@ -130,12 +137,12 @@ function taxotouch_page($terms = '') {
   $enable_vocs = variable_get('taxotouch_enable_vocs', array(0));
   $show_term_list = variable_get('taxotouch_show_term_list', TRUE);
 
-  $arg_terms = explode(',', $terms);
+  $arg_terms = explode('-', $terms);
 
   if ($show_term_list) {
     $attendant_terms = taxotouch_get_attendant_terms($arg_terms);
     $taxonomy_terms = taxotouch_get_terms($enable_vocs);
-    
+
     $output .= theme('taxotouch_term_list', $arg_terms, $attendant_terms, $taxonomy_terms);
   }
 
@@ -145,8 +152,6 @@ function taxotouch_page($terms = '') {
     $output .= taxonomy_render_nodes($select_nodes);
   }
 
-  drupal_set_title(taxotouch_get_title($arg_terms));
-
   return $output;
 }
 
@@ -170,7 +175,7 @@ function taxotouch_get_maxmin_nodes(&$max_nodes, &$min_nodes, $taxonomy_terms) {
     if ($max_nodes < $term->node_count) {
       $max_nodes = $term->node_count;
     }
-    else if ($min_nodes > $term->node_count && $term->node_count != 0) {
+    elseif ($min_nodes > $term->node_count && $term->node_count != 0) {
       $min_nodes = $term->node_count;
     }
   }
@@ -212,17 +217,17 @@ function theme_taxotouch_term_link($term, $arg_terms, $attendant_terms, $max_nod
   if (in_array($term->tid, $arg_terms)) {
     $link_term = array_diff($arg_terms, array($term->tid));
     $class = 'selected';
-    $url = url('taxotouch/') . implode(',', $link_term);
+    $url = 'taxotouch/' . implode('-', $link_term);
     $title = $term->name;
   }
-  else if (in_array($term->tid, $attendant_terms)) {
+  elseif (in_array($term->tid, $attendant_terms)) {
     $class = 'attendant';
-    $url = url('taxotouch/') . implode(',', $arg_terms) .','. $term->tid;
+    $url = 'taxotouch/' . implode('-', $arg_terms) .'-'. $term->tid;
     $title = $term->name;
   }
   else {
     $class = 'free';
-    $url = url('taxotouch/') . $term->tid;
+    $url = 'taxotouch/' . $term->tid;
     $title = $term->name;
   }
 
@@ -242,10 +247,10 @@ function theme_taxotouch_term_link($term, $arg_terms, $attendant_terms, $max_nod
     $class .= ' cloud-'. ($cloud != 0 ? $cloud : 1);
   }
 
-  $output = '<a class="'. $class .'" href="'. $url .'">'. $title .'</a> ';
+  $output = l($title, $url, array('attributes' => array('class' => $class)));
 
   if ($empty_terms_as_text && $term->node_count == 0) {
-    $output = '<span class="empty">'. $title .'</span> ';
+    $output = '<span class="empty">'. check_plain($title) .'</span> ';
   }
 
   return $output;
@@ -346,7 +351,7 @@ function taxotouch_admin_settings() {
   $options = array();
   $vocabularies = taxonomy_get_vocabularies();
   foreach ($vocabularies as $vocabulary) {
-    $options[$vocabulary->vid] = $vocabulary->name;
+    $options[$vocabulary->vid] = check_plain($vocabulary->name);
   }
   if (!empty($vocabularies)) {
     $form['taxotouch_vocabulary']['taxotouch_enable_vocs'] =  array(
