diff --git a/question_answer.module b/question_answer.module
index f80a86a..d199f00 100644
--- a/question_answer.module
+++ b/question_answer.module
@@ -13,6 +13,16 @@ function question_answer_init() {
 }
 
 /**
+ * Implementation of hook_perm().
+ */
+function question_answer_perm() {
+  $perms = array(
+    'deselect best answer on any Q/A',
+  );
+  return $perms;
+}
+
+/**
  * Implementation of hook_menu().
  */
 function question_answer_menu() {
@@ -100,6 +110,21 @@ function question_answer_link($type, $object = NULL, $teaser = FALSE) {
       );
       ctools_add_js('ajax-responder');
     }
+
+    // here the author, admin or others with the right perm can deselect the best answer
+    // if there is one already. this has nothing to do with the top level comments
+    if (in_array($node->type, array_keys($qtype)) && ($node->uid == $user->uid || $user->uid == 0 || user_access('deselect best answer on any Q/A')) && $node->{$qtype[$node->type]['answer']}[0]['value'] == $object->cid) {
+      $links['question_answer_deselect'] = array(
+        'title' => t('deselect'),
+        'href' => 'question_answer/deselect/'. $object->cid .'/'. drupal_get_token('question_answer/deselect/'. $object->cid),
+        'attributes' => array(
+          'title' => t('Deselect this comment.'),
+          'class' => 'ctools-use-ajax',
+        ),
+      );
+      ctools_add_js('ajax-responder');
+    }
+
   }
   return $links;
 }
diff --git a/question_answer.pages.inc b/question_answer.pages.inc
index 407ec9a..4dccdcf 100644
--- a/question_answer.pages.inc
+++ b/question_answer.pages.inc
@@ -41,6 +41,49 @@ function question_answer_select($cid, $token) {
 }
 
 /**
+ * Menu callback; deselect a previous answer.
+ *
+ * @param $cid
+ *   The comment do be hidden.
+ */
+function question_answer_deselect($cid, $token) {
+  if (is_numeric($cid)) {
+    $nid = db_result(db_query('SELECT nid FROM {comments} WHERE cid=%d', $cid));
+    if (is_numeric($nid)) {
+      $node = node_load($nid);
+      $qtype = _question_answer_nodetypes();
+      if (!empty($node->{$qtype[$node->type]['answer']}[0]['value'])) {
+        $node->{$qtype[$node->type]['answer']}[0]['value'] = "";
+        node_save($node);
+        // let's add some feedback to the user
+        drupal_set_message(t("The previous <em>best answer</em> with id #!cid is now removed. You can choose an other comment as your new <em>best answer</em>.", array('!cid' => $cid)), 'status');
+      }
+    }
+  }
+
+  if (! $node) {
+    drupal_set_message(t("Oops! There was an error in deselecting your previous answer!"), 'warning');
+  }
+
+  if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
+    ctools_include('ajax');
+    $commands = array();
+    $commands[] = ctools_ajax_command_remove('a[href^='. url('question_answer/deselect') .']');
+    //should be some "addClass" command, not supported now, but will (at least will be D7)
+    //$commands[] = ctools_ajax_command_attr('#comment-'. $cid.' + div', 'class', 'question_answer-selected');
+    
+    // it looks like we need this to have the feedback displayed without the user having
+    // to relaod the page him/herself
+    $commands[] = ctools_ajax_command_reload();
+
+    ctools_ajax_render($commands);
+  }
+  else {
+    drupal_goto($_SERVER['HTTP_REFERER']);
+  }
+}
+
+/**
  * Settings form
  */
 function question_answer_settings() {
