diff --git a/annotation.css b/annotation.css
index 70acc02..c769b24 100644
--- a/annotation.css
+++ b/annotation.css
@@ -11,6 +11,18 @@
   margin: 0;
 }
 
+.annotation-comment {
+  margin-top: 1em;
+  border-top: 1px solid #E9EFF3;
+  padding-top: 1em;
+}
+
+.annotation-comment:first-child {
+  margin-top: 0em;
+  border-top: 0px none;
+  padding-top: 0em;
+}
+
 .annotation-comment .info {
   color: #666;
   font-size: 0.8em;
diff --git a/annotation.js b/annotation.js
index ac0180e..cb48109 100644
--- a/annotation.js
+++ b/annotation.js
@@ -1,5 +1,4 @@
-
-// Set default annotation style, overridable with drupal_add_js().
+// Set default beauty tips style for annotations, overridable with drupal_add_js().
 Drupal.settings.annotationBtStyle = jQuery.extend({
   width: 250,
   fill: '#fff',
@@ -50,16 +49,6 @@ Drupal.settings.annotationBtStyle = jQuery.extend({
       return false;
     });
 
-    // Highlight clicked comment.
-    $('a[href*=#comment-]', source.annotationBox).click(function () {
-      $('.annotation-active').removeClass('annotation-active');
-      var $comment = $('' + $(this).attr('href').match(/#comment-\d*/));
-      if ($comment.is('a')) {
-        $comment = $comment.next();
-      }
-      $comment.addClass('annotation-active');
-    });
-
     // Edit annotation link.
     $('a[href*=#annotation-]', source.annotationBox).click(function () {
       var match = $(this).attr('href').match(/#annotation-(edit|reply)-(\d+)\b/);
@@ -86,10 +75,10 @@ Drupal.settings.annotationBtStyle = jQuery.extend({
 }, Drupal.settings.annotationBtStyle);
 
 $(document).ready(function () {
-  // If the URL contains a fragment starting with annotation-cid we define the cid of the note to highlight/show
-  var url = document.location.toString().match(/#annotation-cid-(\d+)$/);
+  // If the URL contains a fragment starting with comment- we define the cid of the note to highlight/show
+  var url = document.location.toString().match(/#comment-(\d+)$/);
   if (url !== null) {
-    Drupal.showAnnotation(url[1]);
+    Drupal.showAnnotation('annotation-cid-' + url[1]);
   }
 });
 
@@ -97,6 +86,10 @@ Drupal.behaviors.annotation = function (context) {
   var annotationRegExp = /\bannotation-(cid-\d+)\b/g,
     annotation;
 
+  $('#comments:not(.comments-processed)', context).addClass('comments-processed').mousedown(function () {
+    Drupal.unhighlightAllComments();
+  });
+
   $('.annotation:not(.annontation-processed)', context).addClass('annotation-processed').each(function () {
     var $this = $(this),
       content = '';
@@ -106,30 +99,92 @@ Drupal.behaviors.annotation = function (context) {
       content = content + Drupal.settings.annotationComments[annotation[1]];
     }
 
+    this.highlightComment = function(cids) {
+      if (cids != null) {
+        for (var i = 0; i < cids.length; i++) {
+          // Highlight text spans
+          $('.content .' + cids[i]).each(function() {
+            $(this).addClass('annotation-active');
+          });
+
+          // Highlight comments
+          if (Drupal.settings.annotationSettings.highlightComments) {
+            $('#comments .' + cids[i]).each(function() {
+              $(this).addClass('annotation-active');
+              $('+ .indented', this).addClass('annotation-active');
+
+              $('.content', this).showComment();
+              $('+ .indented', this).showComment();
+              $('+ .indented > *', this).showComment();
+            });
+          }
+        }
+      }
+    };
+
+    this.unhighlightComment = function(cids) {
+      if (cids != null) {
+        for (var i = 0; i < cids.length; i++) {
+          $('.content .' + cids[i]).each(function() {
+            $(this).removeClass('annotation-active');
+          });
+
+          if (Drupal.settings.annotationSettings.highlightComments) {
+            $('#comments .' + cids[i]).each(function() {
+              $(this).removeClass('annotation-active');
+              $('+ .indented', this).removeClass('annotation-active');
+
+              $('.content', this).hideComment();
+              $('+ .indented', this).hideComment();
+            });
+          }
+        }
+      }
+    };
+
     // Count over & out for both annotation and beautytip for linked hovering.
     this.annotationOver = function (event) {
-      var box = $this.data('bt-box');
-      if (box === undefined) {
-        this.btOn();
-        box = $this.data('bt-box');
-        box.annotationOverCount = 0;
-        box.annotationOff = function () {
-          $this.btOff();
-        };
-        box.hoverIntent({
-          timeout: 500,
-          over: this.annotationOver,
-          out: this.annotationOut
-        });
+      if (jQuery.annotation.overActive) {
+        var box = $this.data('bt-box');
+        if (box === undefined) {
+          if (Drupal.settings.annotationSettings.showBubble) {
+            this.btOn();
+            box = $this.data('bt-box');
+            box.annotationOverCount = 0;
+            box.annotationOff = function () {
+              $this.btOff();
+              $this[0].unhighlightComment(cids);
+            };
+            box.hoverIntent({
+              timeout: 500,
+              over: this.annotationOver,
+              out: this.annotationOut
+            });
+          }
+          else {
+            $this.bind('mouseout', function() {
+              $this[0].unhighlightComment(cids);
+            });
+          }
+
+          Drupal.unhighlightAllComments();
+          // Highlight all comments for the span over which the event happened.
+          var cids = $(this).attr('class').match(/annotation-cid-\d+/g);
+          this.highlightComment(cids);
+        }
+        else {
+          box.annotationOverCount += 1;
+        }
       }
-      box.annotationOverCount += 1;
     };
     this.annotationOut = function (event) {
-      var box = $this.data('bt-box');
-      if (box !== undefined) {
-        box.annotationOverCount -= 1;
-        if (box.annotationOverCount === 0) {
-          box.annotationOff();
+      if (jQuery.annotation.overActive) {
+        var box = $this.data('bt-box');
+        if (box !== undefined) {
+          box.annotationOverCount -= 1;
+          if (box.annotationOverCount === 0) {
+            box.annotationOff();
+          }
         }
       }
     };
@@ -142,20 +197,32 @@ Drupal.behaviors.annotation = function (context) {
       out: this.annotationOut
     });
 
-    this.showAnnotation = function () {
-      $this.parents().show();
-      this.annotationOver();
-      $this.data('bt-box').annotationOverCount = 0;
+    this.showAnnotation = function (cid) {
+      if (Drupal.settings.annotationSettings.showBubble) {
+        $this.parents().show();
+      }
+
+      var cids = Array(cid);
+      this.highlightComment(cids);
+
       // Hack with html & body scrolling so that it works in Safari
       $('html, body').scrollTop(Math.min($this.offset().top, $('html, body').scrollTop()));
     };
   });
 
-  // Replace the target of the comment links.
-  $('a.annotation-link:not(.annotation-processed)', context).addClass('annotation-processed').click(function () {
-    Drupal.showAnnotation($(this).attr('href').split(/#annotation-cid-(\d+)$/)[1]);
-    return false;
+  $('#comments .comment:not(.annotation-comment-toggle-processed)', context).each(function() {
+    $(this).addClass('annotation-comment-toggle-processed')
+
+    $(this).click(function () {
+      var commentId = $(this).attr('class').match(/annotation-cid-\d+/g);
+      if (commentId) {
+        Drupal.showAnnotation(commentId[0]);
+      }
+    });
   });
+
+  // Initially hide all comment content and replies.
+  Drupal.unhighlightAllComments();
 };
 
 jQuery.fn.annotate = function (options) {
@@ -211,16 +278,43 @@ jQuery.fn.submitAnnotate = function () {
   });
 };
 
-jQuery.fn.showAnnotation = function () {
+jQuery.fn.showAnnotation = function (cid) {
   return this.each(function () {
     if ($.isFunction(this.showAnnotation)) {
-      this.showAnnotation();
+      this.showAnnotation(cid);
     }
   });
 };
 
+jQuery.fn.showComment = function () {
+  this.slideDown();
+}
+
+jQuery.fn.hideComment = function () {
+  this.slideUp();
+}
+
+Drupal.unhighlightAllComments = function() {
+  $('.annotation-active').removeClass('annotation-active');
+  if (Drupal.settings.annotationSettings.highlightComments) {
+    $('#comments > .comment .content').hideComment();
+    $('#comments > .indented').hideComment();
+  }
+};
+
 Drupal.showAnnotation = function (cid) {
-  $('.annotation-cid-' + cid).showAnnotation();
+  // Spans for text annotations
+  var spans = $('.annotation-text-body span.' + cid);
+  if (spans && spans.get(0)) {
+    Drupal.unhighlightAllComments();
+    spans.get(0).showAnnotation(cid);
+  }
+  // Divs for image annotations
+  var divs = $('.image-annotate-view div.' + cid);
+  if (divs && divs.get(0)) {
+    Drupal.unhighlightAllComments();
+    divs.get(0).showAnnotation(cid);
+  }
 };
 
 Drupal.saveAnnotationState = function () {
@@ -239,6 +333,7 @@ Drupal.restoreAnnotationState = function () {
 };
 
 jQuery.annotation = {
+  overActive: true, // Do we highlight text and display bubble on mouse over?
   active: false, // Is there is an active annotation?
   defaults: {
     submit:   function () { // Run on submit.
diff --git a/annotation.module b/annotation.module
index 08f5ff9..463c12e 100644
--- a/annotation.module
+++ b/annotation.module
@@ -1,5 +1,35 @@
 <?php
 
+function annotation_menu() {
+  $items['admin/settings/annotation'] = array(
+    'title' => 'Annotation',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('annotation_settings_form'),
+    'access arguments' => array('administer site configuration'),
+    'description' => t('Adjust the annotation settings.'),
+  );
+
+  return $items;
+}
+
+function annotation_settings_form() {
+  $form['annotation_show_bubble'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Show annotation text in bubble.'),
+    '#default_value' => variable_get('annotation_show_bubble', 1),
+    '#description' => t('If enabled, show the annotation in a bubble when the user places its mouse over annotated content.'),
+  );
+
+  $form['annotation_highlight_comments'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Highlight comments.'),
+    '#default_value' => variable_get('annotation_highlight_comments', 1),
+    '#description' => t('If enabled, highlight the associated comment block when the user places its mouse over annotated content.'),
+  );
+
+  return system_settings_form($form);
+}
+
 /**
  * Add JS common to annotation modules.
  *
@@ -22,6 +52,11 @@ function annotation_add_js($node, $type, $fields = array()) {
     )), 'setting');  
   }
 
+  drupal_add_js(array('annotationSettings' => array(
+    'showBubble' => variable_get('annotation_show_bubble', 1),
+    'highlightComments' => variable_get('annotation_highlight_comments', 1),
+  )), 'setting');
+
   foreach (annotation_get_annotations($node) as $annotation) {
     $comment = _comment_load($annotation->cid);
     $comment->annotation = $annotation;
@@ -162,12 +197,6 @@ function annotation_form_submit($form, &$form_state) {
   $account = user_load($form_state['values']['uid']);
   $form_state['values']['name'] = $account->name;
   comment_form_submit($form, $form_state);
-  if (empty($form_state['values']['pid'])) {
-    $form_state['redirect'][2] = str_replace('comment-', 'annotation-cid-', $form_state['redirect'][2]);
-  }
-  else {
-    $form_state['redirect'][2] = 'annotation-cid-'. $form_state['values']['pid'];
-  }
 }
 
 function annotation_get_annotations($node) {
@@ -197,9 +226,9 @@ function annotation_link($type, $object, $teaser = FALSE) {
     if (!is_null(annotation_get_comment_annotation($object))) {
       return array(
         'annotation_link' => array(
-          'title' => t('View annotation'),
+          'title' => t('view'),
           'href' => $_GET['q'],
-          'fragment' => 'annotation-cid-'. $object->cid,
+          'fragment' => 'comment-'. $object->cid,
           'attributes' => array(
             'class' => 'annotation-link',
           ),
diff --git a/annotation_image/annotation_image.css b/annotation_image/annotation_image.css
index 7ecd1e2..9fb8108 100644
--- a/annotation_image/annotation_image.css
+++ b/annotation_image/annotation_image.css
@@ -134,3 +134,9 @@
   display: block;
   position: absolute;
 }
+
+/* Style for active annotations */
+#comments .comment.annotation-active,
+#comments .indented.annotation-active {
+  background:#99FF66 none repeat scroll 0 0;
+}
diff --git a/annotation_image/annotation_image.module b/annotation_image/annotation_image.module
index b23e48b..589146a 100644
--- a/annotation_image/annotation_image.module
+++ b/annotation_image/annotation_image.module
@@ -114,22 +114,49 @@ function annotation_image_theme($existing, $type, $theme, $path) {
   );
 }
 
+function annotation_image_preprocess_node(&$variables) {
+  $node = $variables['node'];
+  $comments = db_result(db_query("SELECT COUNT(c.cid) FROM {comments} c INNER JOIN {annotation_image} a ON c.cid = a.cid WHERE nid = %d", $node->nid));
+  if ($comments > 0) {
+      $variables['annotation_context'] = TRUE;
+      $variables['annotation_image_context'] = TRUE;
+  }
+}
+
+function annotation_image_preprocess_comment_wrapper(&$variables) {
+  $node = $variables['node'];
+  $comments = db_result(db_query("SELECT COUNT(c.cid) FROM {comments} c INNER JOIN {annotation_image} a ON c.cid = a.cid WHERE nid = %d", $node->nid));
+  if ($comments > 0) {
+    $variables['annotation_context'] = TRUE;
+    $variables['annotation_image_context'] = TRUE;
+  }
+}
+
+function annotation_image_preprocess_comment(&$variables) {
+  $comment = $variables['comment'];
+  if (!is_null(annotation_get_comment_annotation($comment))) {
+    $variables['annotation_title'] = $comment->subject;
+  }
+}
+
 function annotation_image_preprocess_annotation_image_thumbnail(&$variables) {
   $annotation = $variables['annotation'];
   $comment = $variables['comment'];
   $node = node_load($comment->nid);
 
-  list($image_width, $image_height) = getimagesize($node->{$annotation->field_name}[0]['filepath']);
-  list($thumb_width, $thumb_height) = explode('x', variable_get('imagefield_thumb_size', '100x100'));
-  $ratio = min($thumb_width / $image_width, $thumb_height / $image_height);
-
-  $variables['width'] = $image_width * $ratio;
-  $variables['height'] = $image_height * $ratio;
-  $variables['annotation_width'] = $annotation->size_width * $ratio;
-  $variables['annotation_height'] = $annotation->size_height * $ratio;
-  $variables['annotation_top'] = $annotation->position_top * $ratio;
-  $variables['annotation_left'] = $annotation->position_left * $ratio;
-  $variables['thumbnail'] = base_path() . imagefield_file_admin_thumb_path($node->{$annotation->field_name}[0]);
+  if (isset($annotation->field_name)) {
+    list($image_width, $image_height) = getimagesize($node->{$annotation->field_name}[0]['filepath']);
+    list($thumb_width, $thumb_height) = explode('x', variable_get('imagefield_thumb_size', '100x100'));
+    $ratio = min($thumb_width / $image_width, $thumb_height / $image_height);
+
+    $variables['width'] = $image_width * $ratio;
+    $variables['height'] = $image_height * $ratio;
+    $variables['annotation_width'] = $annotation->size_width * $ratio;
+    $variables['annotation_height'] = $annotation->size_height * $ratio;
+    $variables['annotation_top'] = $annotation->position_top * $ratio;
+    $variables['annotation_left'] = $annotation->position_left * $ratio;
+    $variables['thumbnail'] = base_path() . imagefield_file_admin_thumb_path($node->{$annotation->field_name}[0]);
+  }
 }
 
 /**
diff --git a/annotation_text/README.txt b/annotation_text/README.txt
index b8955ab..ad88471 100644
--- a/annotation_text/README.txt
+++ b/annotation_text/README.txt
@@ -10,3 +10,7 @@ jquery.wrapSelection.js:
 
     For annotations to show up, you must enable the Annotation filter, and set it to run before any other filter.
     Make sure the <span> element is not filtered out by the Filtered HTML filter.
+
+    To take full advantage of the Annotation Text functionnality, use node.tpl.php,
+    comment.tpl.php and comment-wrapper.tpl.php provided with this module, or reproduce
+    the Annotation specific changes in your own tpl.php files.
diff --git a/annotation_text/annotation_text.css b/annotation_text/annotation_text.css
index cb09e9d..73198c5 100644
--- a/annotation_text/annotation_text.css
+++ b/annotation_text/annotation_text.css
@@ -1,42 +1,48 @@
-/* Largest comes first as it is the default */
-.annotation-text,
-.annotation-text-12 {
+.annotation-text {
+  position: relative;
+}
+
+.annotation-text-highlight {
   cursor: pointer;
-  background:#FF6500 none repeat scroll 0 0;
 }
-.annotation-text-1 {
+
+/* Styles for annotated spans */
+.annotation-text-highlight.annotation-text-1 {
   background:#FFFDC5 none repeat scroll 0 0;
 }
-.annotation-text-2 {
+.annotation-text-highlight.annotation-text-2 {
   background:#FFF09A none repeat scroll 0 0;
 }
-.annotation-text-3 {
+.annotation-text-highlight.annotation-text-3 {
   background:#FFFF66 none repeat scroll 0 0;
 }
-.annotation-text-4 {
+.annotation-text-highlight.annotation-text-4 {
   background:#FFE26F none repeat scroll 0 0;
 }
-.annotation-text-5 {
+.annotation-text-highlight.annotation-text-5 {
   background:#FFD441 none repeat scroll 0 0;
 }
-.annotation-text-6 {
+.annotation-text-highlight.annotation-text-6 {
   background:#FFC614 none repeat scroll 0 0;
 }
-.annotation-text-7 {
+.annotation-text-highlight.annotation-text-7 {
   background:#FFB600 none repeat scroll 0 0;
 }
-.annotation-text-8 {
+.annotation-text-highlight.annotation-text-8 {
   background:#FFA800 none repeat scroll 0 0;
 }
-.annotation-text-9 {
+.annotation-text-highlight.annotation-text-9 {
   background:#FF9900 none repeat scroll 0 0;
 }
-.annotation-text-10 {
+.annotation-text-highlight.annotation-text-10 {
   background:#FF8B00 none repeat scroll 0 0;
 }
-.annotation-text-11 {
+.annotation-text-highlight.annotation-text-11 {
   background:#FF7B00 none repeat scroll 0 0;
 }
+.annotation-text-highlight.annotation-text-12 {
+  background:#FF6500 none repeat scroll 0 0;
+}
 
 .annotation-text-selected {
   border: 1px solid #777;
@@ -46,3 +52,30 @@
   display: block;
   text-align: center;
 }
+
+/* Style for active annotated spans */
+.annotation.annotation-active,
+#comments .comment.annotation-active,
+#comments .indented.annotation-active {
+  background-color: #99ff66;
+}
+
+/* Put node content and comments side to side. */
+.node.annotated-node {
+  border-bottom: 1px solid #e9eff3;
+  float: left;
+  margin: 0;
+  padding: 0 25px 1.5em 0;
+  width: 50%;
+}
+#comments.annotated-node {
+  border-bottom: 1px solid #e9eff3;
+  float: left;
+  margin: 0;
+  padding: 0 25px;
+  position: relative;
+  width: 35%;
+}
+#comments.annotated-node .comment {
+  cursor: pointer;
+}
diff --git a/annotation_text/annotation_text.js b/annotation_text/annotation_text.js
index 73adc45..cb229d1 100644
--- a/annotation_text/annotation_text.js
+++ b/annotation_text/annotation_text.js
@@ -20,6 +20,28 @@ Drupal.behaviors.annotationText = function (context) {
       });
     }
   }
+
+  // Turn on highlighting of annotated text
+  $('.annotation-text:not(.annotation-text-highlight-processed)').addClass('annotation-text-highlight-processed').addClass('annotation-text-highlight');
+  $('a.annotation-toggle-highlight-text .on').hide();
+  $('a.annotation-toggle-highlight-text .off').show();
+
+  // Activate link for toggling highlighted text
+  $('a.annotation-toggle-highlight-text:not(.annotation-toggle-highlight-text-processed)').addClass('annotation-toggle-highlight-text-processed').click(function() {
+    if (jQuery.annotation.overActive) {
+      $('.annotation-text').removeClass('annotation-text-highlight');
+      $('a.annotation-toggle-highlight-text .on').show();
+      $('a.annotation-toggle-highlight-text .off').hide();
+      jQuery.annotation.overActive = false;
+    }
+    else {
+      $('.annotation-text').addClass('annotation-text-highlight');
+      $('a.annotation-toggle-highlight-text .on').hide();
+      $('a.annotation-toggle-highlight-text .off').show();
+      jQuery.annotation.overActive = true;
+    }
+    return false;
+  });
 };
 
 Drupal.textAnnotationOptions = {
@@ -43,9 +65,6 @@ function annotationTextAttachMouseup(e) {
       return;
     }
 
-    // Remove previous selections
-    $('.annotation-text-selected').btOff();
-
     // Wrap selection in span, so it is selectable with jQuery.
     var $sel = $(this).wrapSelection().addClass('annotation-text-selected');
 
@@ -54,15 +73,17 @@ function annotationTextAttachMouseup(e) {
       return;
     }
 
-    // Create a BT with annotate link we have to set it on a timer due
-    // to timing issues.
-    setTimeout(function () {
-      $('.annotation-text-selected:last').bt(Drupal.settings.annotation_text.prompt, jQuery.extend({
-        trigger: 'none',
-        closeWhenOthersOpen: true,
-        postHide: annotationTextRemove
-      }, Drupal.settings.annotationBtStyle, {width: 70})).btOn();
-    }, 5);
+    if (Drupal.settings.annotationSettings.showBubble) {
+      // Create a BT with annotate link we have to set it on a timer due
+      // to timing issues.
+      setTimeout(function () {
+        $('.annotation-text-selected:last').bt(Drupal.settings.annotation_text.prompt, jQuery.extend({
+          trigger: 'none',
+          closeWhenOthersOpen: true,
+          postHide: annotationTextRemove
+        }, Drupal.settings.annotationBtStyle, {width: 70})).btOn();
+      }, 5);
+    }
 
     // If the new selection cross the spans from an old selection the new spans
     // could be broken up into small pieces, so we collapse split selections.
diff --git a/annotation_text/annotation_text.module b/annotation_text/annotation_text.module
index cb43c88..4e01e6b 100644
--- a/annotation_text/annotation_text.module
+++ b/annotation_text/annotation_text.module
@@ -1,5 +1,12 @@
 <?php
 
+/**
+ * Implements hook_perm().
+ */
+function annotation_text_perm() {
+  return array('control text highlighting visibility');
+}
+
 function annotation_text_form_node_type_form_alter(&$form, &$form_state) {
   $form['submission']['body_annotation_text'] = array(
     '#type' => 'checkbox',
@@ -286,6 +293,7 @@ function annotation_text_add_markup($text, $node, $teaser = FALSE) {
       }
 
       // Add class that specifies number of overlapping annotations.
+      $classes[] = 'annotation-text';
       $classes[] = 'annotation-text-'. count($corrected_annotation['cids']);
 
       // Generate new string, and replace old string.
@@ -375,3 +383,41 @@ function _annotation_text_closest_match($haystack, $needle, $target, $length) {
 
   return $bestPos;
 }
+
+function annotation_text_preprocess_node(&$variables) {
+  $node = $variables['node'];
+  if (variable_get('annotation_text_body_'. $node->type, FALSE)) {
+    $variables['annotation_context'] = TRUE;
+    $variables['annotation_text_context'] = TRUE;
+  }
+}
+
+function annotation_text_preprocess_comment_wrapper(&$variables) {
+  $node = $variables['node'];
+  if (variable_get('annotation_text_body_'. $node->type, FALSE)) {
+    $variables['annotation_context'] = TRUE;
+    $variables['annotation_text_context'] = TRUE;
+  }
+}
+
+function annotation_text_preprocess_comment(&$variables) {
+  $comment = $variables['comment'];
+  if (!is_null(annotation_get_comment_annotation($comment))) {
+    $variables['annotation_title'] = $comment->subject;
+  }
+}
+
+function annotation_text_theme($existing, $type, $theme, $path) {
+  return array(
+    'highlight_text_toggle' => array('arguments' => '')
+  );
+}
+
+function theme_highlight_text_toggle() {
+  if (user_access('control text highlighting visibility')) {
+    return l('<span class="on">'.t('Highlight text').'</span><span class="off">'.t('Don\'t highlight text')."</span>", $_GET["q"], array('html' => TRUE, 'attributes' => array('class' => 'annotation-toggle-highlight-text')));
+  }
+  else {
+    return '';
+  }
+}
diff --git a/templates/comment-wrapper.tpl.php b/templates/comment-wrapper.tpl.php
new file mode 100644
index 0000000..06a0729
--- /dev/null
+++ b/templates/comment-wrapper.tpl.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * @file comment-wrapper.tpl.php
+ * Default theme implementation to wrap comments.
+ *
+ * Available variables:
+ * - $content: All comments for a given page. Also contains sorting controls
+ *   and comment forms if the site is configured for it.
+ *
+ * The following variables are provided for contextual information.
+ * - $node: Node object the comments are attached to.
+ * The constants below the variables show the possible values and should be
+ * used for comparison.
+ * - $display_mode
+ *   - COMMENT_MODE_FLAT_COLLAPSED
+ *   - COMMENT_MODE_FLAT_EXPANDED
+ *   - COMMENT_MODE_THREADED_COLLAPSED
+ *   - COMMENT_MODE_THREADED_EXPANDED
+ * - $display_order
+ *   - COMMENT_ORDER_NEWEST_FIRST
+ *   - COMMENT_ORDER_OLDEST_FIRST
+ * - $comment_controls_state
+ *   - COMMENT_CONTROLS_ABOVE
+ *   - COMMENT_CONTROLS_BELOW
+ *   - COMMENT_CONTROLS_ABOVE_BELOW
+ *   - COMMENT_CONTROLS_HIDDEN
+ *
+ * @see template_preprocess_comment_wrapper()
+ * @see theme_comment_wrapper()
+ *
+ * Annotation module specific:
+ * - If $annotation_context is TRUE, add a specific title and UI to toggle text highlighting on and off.
+ */
+?>
+<?php
+  if (!$content || $node->type == 'forum') {
+    print '<div id="comments">'. $content .'</div>';
+  }
+  else if ($annotation_context == TRUE) {
+    print '<div id="comments" class="annotated-node"><h2 class="comments">'. t('Annotations and comments') .'</h2>';
+    if ($annotation_text_context) {
+      print theme('highlight_text_toggle');
+    }
+    print $content .'</div>';
+  }
+  else {
+    print '<div id="comments"><h2 class="comments">'. t('Comments') .'</h2>'. $content .'</div>';
+  }
+?>
diff --git a/templates/comment.tpl.php b/templates/comment.tpl.php
new file mode 100644
index 0000000..92d92e3
--- /dev/null
+++ b/templates/comment.tpl.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * @file comment.tpl.php
+ * Default theme implementation for comments.
+ *
+ * Available variables:
+ * - $author: Comment author. Can be link or plain text.
+ * - $content: Body of the post.
+ * - $date: Date and time of posting.
+ * - $links: Various operational links.
+ * - $new: New comment marker.
+ * - $picture: Authors picture.
+ * - $signature: Authors signature.
+ * - $status: Comment status. Possible values are:
+ *   comment-unpublished, comment-published or comment-preview.
+ * - $submitted: By line with date and time.
+ * - $title: Linked title.
+ *
+ * These two variables are provided for context.
+ * - $comment: Full comment object.
+ * - $node: Node object the comments are attached to.
+ *
+ * @see template_preprocess_comment()
+ * @see theme_comment()
+ *
+ * Annotation module changes:
+ * - Add a class 'annotation-cid-NNN' to the comment outer div.
+ * - Use $annotation_title if availaible ($title without link to comment)
+ */
+?>
+<div class="comment<?php print ($comment->new) ? ' comment-new' : ''; print ' '. $status ?> clear-block <?php print ' annotation-cid-' . $comment->cid; ?>">
+  <?php print $picture ?>
+
+  <?php if ($comment->new): ?>
+    <span class="new"><?php print $new ?></span>
+  <?php endif; ?>
+
+  <h3><?php print (isset($annotation_title) ? $annotation_title : $title); ?></h3>
+
+  <div class="submitted">
+    <?php print $submitted ?>
+  </div>
+
+  <div class="content">
+    <?php print $content ?>
+    <?php if ($signature): ?>
+    <div class="user-signature clear-block">
+      <?php print $signature ?>
+    </div>
+    <?php endif; ?>
+  </div>
+
+  <?php print $links ?>
+</div>
diff --git a/templates/node.tpl.php b/templates/node.tpl.php
new file mode 100644
index 0000000..a73bbcd
--- /dev/null
+++ b/templates/node.tpl.php
@@ -0,0 +1,75 @@
+<?php
+/**
+ * @file node.tpl.php
+ *
+ * Theme implementation to display a node.
+ *
+ * Available variables:
+ * - $title: the (sanitized) title of the node.
+ * - $content: Node body or teaser depending on $teaser flag.
+ * - $picture: The authors picture of the node output from
+ *   theme_user_picture().
+ * - $date: Formatted creation date (use $created to reformat with
+ *   format_date()).
+ * - $links: Themed links like "Read more", "Add new comment", etc. output
+ *   from theme_links().
+ * - $name: Themed username of node author output from theme_user().
+ * - $node_url: Direct url of the current node.
+ * - $terms: the themed list of taxonomy term links output from theme_links().
+ * - $submitted: themed submission information output from
+ *   theme_node_submitted().
+ *
+ * Other variables:
+ * - $node: Full node object. Contains data that may not be safe.
+ * - $type: Node type, i.e. story, page, blog, etc.
+ * - $comment_count: Number of comments attached to the node.
+ * - $uid: User ID of the node author.
+ * - $created: Time the node was published formatted in Unix timestamp.
+ * - $zebra: Outputs either "even" or "odd". Useful for zebra striping in
+ *   teaser listings.
+ * - $id: Position of the node. Increments each time it's output.
+ *
+ * Node status variables:
+ * - $teaser: Flag for the teaser state.
+ * - $page: Flag for the full page state.
+ * - $promote: Flag for front page promotion state.
+ * - $sticky: Flags for sticky post setting.
+ * - $status: Flag for published status.
+ * - $comment: State of comment settings for the node.
+ * - $readmore: Flags true if the teaser content of the node cannot hold the
+ *   main body content.
+ * - $is_front: Flags true when presented in the front page.
+ * - $logged_in: Flags true when the current user is a logged-in member.
+ * - $is_admin: Flags true when the current user is an administrator.
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_node()
+ *
+ * Annotation module changes:
+ * - Add class 'annotated-node' if $annotation_context is TRUE.
+ */
+?>
+<div id="node-<?php print $node->nid; ?>" class="node<?php if ($sticky) { print ' sticky'; } ?><?php if (!$status) { print ' node-unpublished'; } ?><?php if ($annotation_context) { print ' annotated-node'; } ?> clear-block">
+
+<?php print $picture ?>
+
+<?php if (!$page): ?>
+  <h2><a href="<?php print $node_url ?>" title="<?php print $title ?>"><?php print $title ?></a></h2>
+<?php endif; ?>
+
+  <div class="meta">
+  <?php if ($submitted): ?>
+    <span class="submitted"><?php print $submitted ?></span>
+  <?php endif; ?>
+
+  <?php if ($terms): ?>
+    <div class="terms terms-inline"><?php print $terms ?></div>
+  <?php endif;?>
+  </div>
+
+  <div class="content">
+    <?php print $content ?>
+  </div>
+
+  <?php print $links; ?>
+</div>
