diff --git a/reviewboard/htdocs/media/rb/js/datastore.js b/reviewboard/htdocs/media/rb/js/datastore.js
--- a/reviewboard/htdocs/media/rb/js/datastore.js
+++ b/reviewboard/htdocs/media/rb/js/datastore.js
@@ -1,13 +1,14 @@
 RB = {};
 
 RB.DiffComment = function(filediff, interfilediff, beginLineNum, endLineNum,
-                          textOnServer) {
+                          textOnServer, blockit) {
     this.filediff = filediff;
     this.interfilediff = interfilediff;
     this.beginLineNum = beginLineNum;
     this.endLineNum = endLineNum;
     this.text = textOnServer || "";
     this.saved = (textOnServer != undefined);
+    this.blockit = blockit;
 
     return this;
 }
@@ -44,7 +45,8 @@ $.extend(RB.DiffComment.prototype, {
             data: {
                 action: "set",
                 num_lines: this.getNumLines(),
-                text: this.text
+                text: this.text,
+                blockit: this.blockit
             },
             success: function() {
                 self.saved = true;
diff --git a/reviewboard/htdocs/media/rb/js/diffviewer.js b/reviewboard/htdocs/media/rb/js/diffviewer.js
--- a/reviewboard/htdocs/media/rb/js/diffviewer.js
+++ b/reviewboard/htdocs/media/rb/js/diffviewer.js
@@ -152,7 +152,7 @@ function DiffCommentBlock(beginRow, endRow, beginLineNum, endLineNum,
             var comment = comments[i];
 
             if (comment.localdraft) {
-                this._createDraftComment(comment.text);
+                this._createDraftComment(comment.text, comment.blockit);
             } else {
                 this.comments.push(comment);
             }
@@ -273,7 +273,7 @@ $.extend(DiffCommentBlock.prototype, {
             .close();
     },
 
-    _createDraftComment: function(textOnServer) {
+    _createDraftComment: function(textOnServer, blockit) {
         if (this.draftComment != null) {
             return;
         }
@@ -282,7 +282,7 @@ $.extend(DiffCommentBlock.prototype, {
         var el = this.el;
         var comment = new RB.DiffComment(this.filediff, this.interfilediff,
                                          this.beginLineNum, this.endLineNum,
-                                         textOnServer);
+                                         textOnServer, blockit);
 
         $.event.add(comment, "textChanged", function() {
             self.updateTooltip();
diff --git a/reviewboard/htdocs/media/rb/js/reviews.js b/reviewboard/htdocs/media/rb/js/reviews.js
--- a/reviewboard/htdocs/media/rb/js/reviews.js
+++ b/reviewboard/htdocs/media/rb/js/reviews.js
@@ -468,10 +468,16 @@ $.fn.commentDlg = function() {
     var saveButton = $("#comment_save", this)
         .click(function() {
             comment.setText(textField.val());
+            comment.blockit =  $("#id_blockit")[0].checked ? 1 : 0;
             comment.save();
             self.close();
         });
 
+    var blockCheck = $("#id_blockit")
+        .click(function(){
+                saveButton.attr("disabled", false);
+        });
+
     var textField    = $("#comment_text", draftForm)
         .keydown(function(e) { e.stopPropagation(); })
         .keypress(function(e) {
@@ -658,7 +664,10 @@ $.fn.commentDlg = function() {
                   '&reply_type=' + replyType + '">Reply</a>')
                     .appendTo(actions);
                 $("<pre/>").appendTo(item).text(this.text);
-
+                if(parseInt(this.blockit) == 1) {
+                        $("<span class=gr/>")
+                         .appendTo(item).text("Marked as Blocker");
+                }
                 item.appendTo(commentsList);
 
                 showComments = true;
@@ -703,6 +712,11 @@ $.fn.commentDlg = function() {
 
         comment = newComment;
         textField.val(comment.text);
+        if(parseInt(comment.blockit) == 1) {
+                $("#id_blockit")[0].checked=true
+        } else {
+                $("#id_blockit")[0].checked=false
+        }
         dirty = false;
 
         /* Set the initial button states */
diff --git a/reviewboard/reviews/models.py b/reviewboard/reviews/models.py
--- a/reviewboard/reviews/models.py
+++ b/reviewboard/reviews/models.py
@@ -906,6 +906,7 @@ class Comment(models.Model):
                                             null=True)
 
     last_line = property(lambda self: self.first_line + self.num_lines - 1)
+    blockit = models.BooleanField(_("blockit"), default=False)
 
     # Set this up with a ConcurrencyManager to help prevent race conditions.
     objects = ConcurrencyManager()
diff --git a/reviewboard/reviews/templatetags/reviewtags.py b/reviewboard/reviews/templatetags/reviewtags.py
--- a/reviewboard/reviews/templatetags/reviewtags.py
+++ b/reviewboard/reviews/templatetags/reviewtags.py
@@ -129,6 +129,7 @@ def commentcounts(context, filediff, interfilediff=None):
                 'comment_id': comment.id,
                 'text': comment.text,
                 'line': comment.first_line,
+                'blockit': comment.blockit,
                 'num_lines': comment.num_lines,
                 'user': {
                     'username': review.user.username,
diff --git a/reviewboard/templates/reviews/comments_dlg.html b/reviewboard/templates/reviews/comments_dlg.html
--- a/reviewboard/templates/reviews/comments_dlg.html
+++ b/reviewboard/templates/reviews/comments_dlg.html
@@ -14,6 +14,9 @@
    a comment.{% endblocktrans %}
   </p>
 {% endif %}
+  <div><input id="id_blockit" class="recommendation" type="checkbox"/>
+     <label for="id_blockit">{% trans "Submission Blocking" %}</label>
+  </div>
   <textarea id="comment_text" name="text" rows="6" cols="30"></textarea>
   <div class="status"></div>
   <div class="buttons">
diff --git a/reviewboard/templates/reviews/diff_comment_fragment.html b/reviewboard/templates/reviews/diff_comment_fragment.html
--- a/reviewboard/templates/reviews/diff_comment_fragment.html
+++ b/reviewboard/templates/reviews/diff_comment_fragment.html
@@ -1,3 +1,4 @@
+{% load i18n %}
 {% load djblets_utils %}
 {% load reviewtags %}
 {% load difftags %}
@@ -18,6 +19,9 @@
 {% else %}
      (Diff revision {{comment.filediff.diffset.revision}})
 {% endif %}
+{% if comment.blockit %}
+	<span class="gr">{% trans "Marked as Blocker" %}</span>
+{% endif %}
     </span>
    </th>
   </tr>
diff --git a/reviewboard/templates/reviews/review_draft_inline_form.html b/reviewboard/templates/reviews/review_draft_inline_form.html
--- a/reviewboard/templates/reviews/review_draft_inline_form.html
+++ b/reviewboard/templates/reviews/review_draft_inline_form.html
@@ -73,6 +73,11 @@
    <dd>
     <pre class="editable comment-editable" id="diff-comment-{{comment.id}}">{{comment.text|escape}}</pre>
 
+	<script type="text/javascript">
+        if(parseInt({{comment.blockit}}) == 1) {
+            $("#id_shipit").attr("disabled",true);
+        }
+	</script>
 {% comment %}
     <!-- We'll want to do this eventually... Need to make it work in a
          non-instant-apply world. -->
@@ -98,7 +103,7 @@
                 null,
 {% endif %}
                 {{comment.first_line}}, {{comment.last_line}},
-                "{{comment.text}}"));
+                "{{comment.text}}","{{comment.blockit}}"));
         $("#edit-diff-comment-{{comment.id}}").click(function() {
             editor.inlineEditor("startEdit");
         });
diff --git a/reviewboard/webapi/json.py b/reviewboard/webapi/json.py
--- a/reviewboard/webapi/json.py
+++ b/reviewboard/webapi/json.py
@@ -1370,6 +1370,7 @@ def diff_line_comments(request, review_request_id, line, diff_revision,
 
         if action == "set":
             text = request.POST['text']
+            blockit = (False, True)[request.POST['blockit'] == "1"]
 
             review, review_is_new = Review.objects.get_or_create(
                 review_request=review_request,
@@ -1389,6 +1390,7 @@ def diff_line_comments(request, review_request_id, line, diff_revision,
                     first_line=line)
 
             comment.text = text
+            comment.blockit = blockit
             comment.num_lines = num_lines
             comment.timestamp = datetime.now()
             comment.save()
