diff --git a/comment_limit.module b/comment_limit.module
index 70e34bf..1a1e17a 100644
--- a/comment_limit.module
+++ b/comment_limit.module
@@ -46,8 +46,6 @@ function comment_limit_node_load($nodes, $types) {
     $node->comment_limit = FALSE;
     // Check for limit and remove form
     if ($result = comment_limit_reached($node, $user)) {
-      // Close comments
-      $node->comment = COMMENT_NODE_CLOSED;
       // Set comment_limit status.
       $node->comment_limit = TRUE;
     }
@@ -104,4 +102,49 @@ function comment_limit_reached($node, $user) {
   $limit = comment_limit_get($node->type);
   $comment_count = comment_limit_count_comments($node->nid, $user->uid);
   return ($limit != 0 && ($limit <= $comment_count)) ? TRUE : FALSE;
-}
\ No newline at end of file
+}
+
+/**
+ * Implements hook_menu_alter().
+ */
+function comment_limit_menu_alter(&$items) {
+  // Alter the access callback for comment reply path
+  $items['comment/reply/%node']['access callback'] = 'comment_limit_reply_access';
+}
+
+/*
+ * Implements hook_comment_load().
+ */
+function comment_limit_comment_load($comments) {
+  global $user;
+  foreach($comments as $cid => $comment){
+    $node = node_load($comment->nid);
+    if (!user_access('bypass comment limit') && comment_limit_reached($node, $user)) {
+      $comments[$cid]->comment_reply = TRUE;
+    }
+    else {
+      $comments[$cid]->comment_reply = FALSE;
+    }
+  }
+}
+
+/**
+ * Set the permission for comment reply menu.
+ */
+function comment_limit_reply_access($op, $node){
+  global $user;
+  if (!user_access('bypass comment limit') && comment_limit_reached($node, $user)) {
+    return FALSE;
+  }
+  // Pass permission to default callback.
+  return node_access('view', $node);
+}
+
+/**
+ * Implements hook_preprocess_HOOK().
+ */
+function comment_limit_preprocess_comment(&$variables) {
+  if (isset($variables['comment']->comment_reply) && $variables['comment']->comment_reply) {
+    unset($variables['content']['links']['comment']['#links']['comment-reply']);
+  }
+}
