diff --git a/reviewboard/reviews/views.py b/reviewboard/reviews/views.py
index d81fccd8e76f947d01651a9f6daed72287eb59af..35018cf46a361d600092728fa69a270e161352b7 100644
--- a/reviewboard/reviews/views.py
+++ b/reviewboard/reviews/views.py
@@ -599,6 +599,8 @@ def review_detail(request,
                     comment.file_attachment = file_attachment
                     file_attachment._comments.append(comment)
 
+            uncollapse = False
+
             if parent_review.is_reply():
                 # This is a reply to a comment. Add it to the list of replies.
                 assert obj.review_id not in reviews_entry_map
@@ -609,6 +611,9 @@ def review_detail(request,
                 if comment.is_reply():
                     replied_comment = comment_map[comment.reply_to_id]
                     replied_comment._replies.append(comment)
+
+                    if not parent_review.public:
+                        uncollapse = True
             elif parent_review.public:
                 # This is a comment on a public review we're going to show.
                 # Add it to the list.
@@ -625,6 +630,14 @@ def review_detail(request,
                     if comment.issue_status == BaseComment.OPEN:
                         entry['issue_open_count'] += 1
 
+                        if review_request.submitter == request.user:
+                            uncollapse = True
+
+            # If the box was collapsed, uncollapse it.
+            if uncollapse and entry['collapsed']:
+                entry['class'] = ''
+                entry['collapsed'] = False
+
     # Sort all the reviews and ChangeDescriptions into a single list, for
     # display.
     for changedesc in changedescs:
