diff --git a/ajax_comments.admin.inc b/ajax_comments.admin.inc
index ce3f343..e433db8 100644
--- a/ajax_comments.admin.inc
+++ b/ajax_comments.admin.inc
@@ -8,19 +8,48 @@
 /**
  * AJAX comments settings form.
  */
-function ajax_comments_settings() {
-  $form['ajax_comments_node_types'] = array(
-    '#title' => t('Content types'),
-    '#type' => 'checkboxes',
-    '#description' => t('Select node types you want to activate ajax comments on. If you select nothing, AJAX Comments will be enabled everywhere.'),
-    '#default_value' => variable_get('ajax_comments_node_types', array()),
-    '#options' => node_type_get_names(),
+function ajax_comments_settings_form($form, $form_state) {
+  $types = node_type_get_types();
+  $options = array(
+    AJAX_COMMENTS_DISABLED => t('disabled'),
+    AJAX_COMMENTS_NEW_ON_TOP => t('placed at the top'),
+    AJAX_COMMENTS_NEW_ON_BOTTOM => t('placed at the bottom'),
   );
+  $values = variable_get('ajax_comments_node_types', array());
+  $form['description'] = array('#markup' => t('You can configure node type specific settings below.'));
+  $form['tabs'] = array('#type' => 'vertical_tabs');
+  foreach ($types as $name => $type) {
+    $form['types'][$name] = array(
+      '#type' => 'fieldset',
+      '#title' => $type->name,
+      '#group' => 'tabs',
+    );
+    $form['types'][$name]['enabled_' . $name] = array(
+      '#type' => 'radios',
+      '#title' => t('New ajax comments for node type <em>!type</em> are', array('!type' => $type->name)),
+      '#options' => $options,
+      '#default_value' => isset($values[$name]) ? $values[$name] : AJAX_COMMENTS_DISABLED,
+    );
+  }
   $form['ajax_comments_notify'] = array(
     '#title' => t('Notification Message'),
     '#type' => 'checkbox',
     '#description' => t('Add notification message to comment when posted.'),
     '#default_value' => variable_get('ajax_comments_notify', ''),
   );
-  return system_settings_form($form);
+  $form['actions']['#type'] = 'actions';
+  $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Save configuration'));
+  return $form;
+}
+
+function ajax_comments_settings_form_submit(&$form, &$form_state) {
+  $values = array();
+  foreach ($form_state['values'] as $key => $value) {
+    if (substr($key, 0, 7) == 'enabled') {
+      $type = substr($key, 8, strlen($key) - 8);
+      $values[$type] = $value;
+    }
+  }
+  variable_set('ajax_comments_notify', $form_state['values']['ajax_comments_notify']);
+  variable_set('ajax_comments_node_types', $values);
 }
diff --git a/ajax_comments.install b/ajax_comments.install
index 97c36d7..ecb3e37 100644
--- a/ajax_comments.install
+++ b/ajax_comments.install
@@ -7,3 +7,15 @@ function ajax_comments_uninstall() {
   variable_del('ajax_comments_node_types');
   variable_del('ajax_comments_notify');
 }
+
+/**
+ * Update node type specific settings
+ */
+function ajax_comments_update_7001() {
+  $values = variable_get('ajax_comments_node_types', array());
+  foreach ($values as $type=>$value) {
+    // If ajax_comments are enabled then choose placing new comments to the bottom
+    if (!empty($value)) $values[$type] = AJAX_COMMENTS_NEW_ON_BOTTOM;
+  }
+  variable_set('ajax_comments_node_types', $values);
+}
\ No newline at end of file
diff --git a/ajax_comments.js b/ajax_comments.js
index 97a4f4f..394aec3 100644
--- a/ajax_comments.js
+++ b/ajax_comments.js
@@ -7,7 +7,7 @@ Drupal.behaviors.ajaxComments = {
     if ($(context).hasClass('ajax-comment-wrapper')) {
       commentNumber = $(context).attr("id").split('-');
       // Scroll to the comment reply inserted by ajax_command.
-      ajaxCommentsScrollReply(commentNumber[2])
+      ajaxCommentsScrollReply(commentNumber[2]);
     }
 
     // Scroll to the comment reply form when reply is clicked.
@@ -25,8 +25,9 @@ Drupal.behaviors.ajaxComments = {
       commentForm = $(this).attr("href");
       // Hide comment form.
       $(commentForm).hide();
+      $('.comment-add').show();
 
-      ajaxCommentsScrollReply(commentNumber[1])
+      ajaxCommentsScrollReply(commentNumber[1]);
 
       e.preventDefault();
 
@@ -45,7 +46,7 @@ Drupal.behaviors.ajaxComments = {
 
           ajaxCommentsScrollForm(commentNumber[1]);
           e.preventDefault();
-        },
+        }
       });
 
     });
diff --git a/ajax_comments.module b/ajax_comments.module
index e384f45..e82ed24 100644
--- a/ajax_comments.module
+++ b/ajax_comments.module
@@ -5,6 +5,10 @@
  * AJAX comments module file.
  */
 
+define('AJAX_COMMENTS_DISABLED', 0);
+define('AJAX_COMMENTS_NEW_ON_TOP', 1);
+define('AJAX_COMMENTS_NEW_ON_BOTTOM', 2);
+
 /**
  * Implements hook_init().
  * See README.txt for why this is necessary.
@@ -57,7 +61,7 @@ function ajax_comments_menu() {
     'title' => 'AJAX comments',
     'description' => 'AJAXifies comments on site.',
     'page callback' => 'drupal_get_form',
-    'page arguments' => array('ajax_comments_settings'),
+    'page arguments' => array('ajax_comments_settings_form'),
     'access arguments' => array('administer site configuration'),
     'file' => 'ajax_comments.admin.inc',
   );
@@ -77,7 +81,8 @@ function ajax_comments_preprocess_node(&$variables) {
 
   $node = $variables['node'];
 
-  if (!ajax_comments_node_type_active($node->type)) {
+  $mode = ajax_comments_new_comments_mode($node->type);
+  if (!$mode || ($mode == AJAX_COMMENTS_DISABLED)) {
     return;
   }
 
@@ -97,7 +102,8 @@ function ajax_comments_preprocess_node(&$variables) {
  */
 function ajax_comments_form_comment_form_alter(&$form, &$form_state, $form_id) {
   // Check to see if this node type uses ajax comments.
-  if (!ajax_comments_node_type_active($form['#node']->type)) {
+  $mode = ajax_comments_new_comments_mode($form['#node']->type);
+  if (!$mode || ($mode == AJAX_COMMENTS_DISABLED)) {
     return;
   }
 
@@ -129,7 +135,8 @@ function ajax_comments_form_comment_confirm_delete_alter(&$form, &$form_state, $
   $node = node_load($comment->nid);
 
   // Check to see if this node type uses ajax comments.
-  if (!ajax_comments_node_type_active($node->type)) {
+  $mode = ajax_comments_new_comments_mode($node->type);
+  if (!$mode || ($mode == AJAX_COMMENTS_DISABLED)) {
     return;
   }
 
@@ -161,7 +168,7 @@ function ajax_comments_preview_js($form, &$form_state) {
   // This is a reply.
   if (isset($form_state['values']['pid'])) {
     $new_form_state = array();
-    $new_form_state['build_info']['args'][] = (object) array('nid' => $node->nid);
+    $new_form_state['build_info']['args'][] = (object) array('nid' => $comment->nid);
     $new_form_state['input'] = $form_state['input'];
     $form['#action'] = '/ajax_comments/reply/' . $comment->nid . '/' . $comment->pid;
     $new_form_build = drupal_build_form($form['#form_id'], $new_form_state);
@@ -179,7 +186,7 @@ function ajax_comments_preview_js($form, &$form_state) {
   else {
     $commands[] = ajax_command_append('#comment-wrapper', $notify_text . $comment_output);
     $new_form_state = array();
-    $new_form_state['build_info']['args'][] = (object) array('nid' => $node->nid);
+    $new_form_state['build_info']['args'][] = (object) array('nid' => $comment->nid);
     $new_form_state['input'] = $form_state['input'];
     $new_form_build = drupal_build_form($form['#form_id'], $new_form_state);
     // Don't build comment and body.
@@ -224,6 +232,7 @@ function ajax_comments_submit_js($form, &$form_state) {
   $comment = $form_state['comment'];
   $node = $form['#node'];
   $notify_text = variable_get('ajax_comments_notify', '') ? theme('ajax_comments_notify_text') : '';
+  $mode = ajax_comments_new_comments_mode($node->type);
 
   $comment_build = comment_view($comment, $node);
 
@@ -258,7 +267,14 @@ function ajax_comments_submit_js($form, &$form_state) {
   else {
     // Append comment to root comment wrapper.
     $comment_output = drupal_render($comment_build);
-    $commands[] = ajax_command_append('#comment-wrapper-nid-' . $node->nid, $notify_text . $comment_output);
+    if ($mode == AJAX_COMMENTS_NEW_ON_TOP) {
+      // Add comment to the top
+      $commands[] = ajax_command_prepend('#comment-wrapper-nid-' . $node->nid, $notify_text . $comment_output);
+    }
+    else {
+      // Add comment to the bottom
+      $commands[] = ajax_command_append('#comment-wrapper-nid-' . $node->nid, $notify_text . $comment_output);
+    }
 
     // If we have a default form, update it with a new one.
     if (variable_get('comment_form_location_' . $node->type, COMMENT_FORM_BELOW) == COMMENT_FORM_BELOW) {
@@ -306,9 +323,8 @@ function ajax_comments_delete_js($form, &$form_state) {
  * Implements hook_comment_view().
  */
 function ajax_comments_comment_view($comment, $view_mode, $langcode) {
-  $active = ajax_comments_node_type_active(substr($comment->node_type, strlen('comment_node_')));
-
-  if (!$active) {
+  $mode = ajax_comments_new_comments_mode(substr($comment->node_type, strlen('comment_node_')));
+  if (!$mode || ($mode == AJAX_COMMENTS_DISABLED)) {
     return;
   }
 
@@ -546,15 +564,16 @@ function ajax_comments_remove_status() {
 }
 
 /**
- * Returns TRUE if this node uses ajax comments or if no nodes are selected.
+ * Returns FALSE if this node type does not use ajax comments or if no nodes are selected.
+ * Otherwise returns mode.
  */
-function ajax_comments_node_type_active($node_type) {
-  $types = variable_get('ajax_comments_node_types');
+function ajax_comments_new_comments_mode($node_type) {
+  $types = variable_get('ajax_comments_node_types', array());
   if (!$types || !array_filter($types)) {
-    return TRUE;
+    return FALSE;
   }
   else {
-    return isset($types[$node_type]) ? $types[$node_type] : NULL;
+    return isset($types[$node_type]) ? $types[$node_type] : FALSE;
   }
 }
 
