diff --git a/rbtools/clients/__init__.py b/rbtools/clients/__init__.py
index 0421f72eff451806d72f130bff1b4ddb2ae62d00..00ca3e026ca27d16b7aab338670425792462b32f 100644
--- a/rbtools/clients/__init__.py
+++ b/rbtools/clients/__init__.py
@@ -176,7 +176,7 @@ class SCMClient(object):
             cmd = ['patch', '-i', str(patch_file)]
         self._execute(cmd)
 
-    def create_commmit(self, message, author):
+    def create_commit(self, message, author, files=[], all_files=False):
         """Creates a commit based on the provided message and author.
 
         Derived classes should override this method if they wish to support
diff --git a/rbtools/clients/git.py b/rbtools/clients/git.py
index d7fa04eca6388f07b21ab14f985ee5787fec2033..4ebd8a64e85a160a70670df4f6fff8a5e85d3be3 100644
--- a/rbtools/clients/git.py
+++ b/rbtools/clients/git.py
@@ -628,24 +628,31 @@ class GitClient(SCMClient):
         Returns True if the working directory has been modified or if changes
         have been staged in the index, otherwise returns False.
         """
-        status = execute(['git', 'status', '--porcelain'])
+        status = execute(['git', 'status', '--porcelain',
+                          '--untracked-files=no'])
         return status != ''
 
     def apply_patch(self, patch_file, base_path=None, base_dir=None, p=None):
-        """
-        Apply the patch patch_file and return True if the patch was
-        successful, otherwise return False.
+        """Apply the given patch to index.
+
+        This will take the given patch file and apply it to the index,
+        scheduling all changes for commit.
         """
         if p:
-            cmd = ['git', 'apply', '-p', p, patch_file]
+            cmd = ['git', 'apply', '--index', '-p', p, patch_file]
         else:
-            cmd = ['git', 'apply', patch_file]
+            cmd = ['git', 'apply', '--index', patch_file]
 
         self._execute(cmd)
 
-    def create_commmit(self, message, author):
+    def create_commit(self, message, author, files=[], all_files=False):
         modified_message = edit_text(message)
-        execute(['git', 'add', '--all', ':/'])
+
+        if all_files:
+            execute(['git', 'add', '--all', ':/'])
+        elif files:
+            execute(['git', 'add'] + files)
+
         execute(['git', 'commit', '-m', modified_message,
                  '--author="%s <%s>"' % (author.fullname, author.email)])
 
diff --git a/rbtools/commands/patch.py b/rbtools/commands/patch.py
index 211bdd794f9763450499d7241143b5c560f75c0e..66a8d2f3fc1f4cc3f3d21cfc17237bf188633e99 100644
--- a/rbtools/commands/patch.py
+++ b/rbtools/commands/patch.py
@@ -108,9 +108,6 @@ class Patch(Command):
         tool.apply_patch(diff_file_path, repository_info.base_path,
                          base_dir, self.options.px)
 
-    def _unescape_markdown(self, text):
-        return UNESCAPE_CHARS_RE.sub(r'\1', text)
-
     def _extract_commit_message(self, review_request):
         """Returns a commit message based on the review request.
 
@@ -120,21 +117,15 @@ class Patch(Command):
         info = []
 
         summary = review_request.summary
-
         description = review_request.description
-        if review_request.rich_text:
-            description = self._unescape_markdown(description)
+        testing_done = review_request.testing_done
 
         if not description.startswith(summary):
             info.append(summary)
 
         info.append(description)
 
-        testing_done = review_request.testing_done
         if testing_done:
-            if review_request.rich_text:
-                testing_done = self._unescape_markdown(testing_done)
-
             info.append('Testing Done:\n%s' % testing_done)
 
         if review_request.bugs_closed:
@@ -158,7 +149,6 @@ class Patch(Command):
             api_root,
             self.options.diff_revision)
 
-        tmp_patch_file = make_tempfile(diff_body)
         if self.options.patch_stdout:
             print diff_body
         else:
@@ -173,13 +163,15 @@ class Patch(Command):
             except NotImplementedError:
                 pass
 
+            tmp_patch_file = make_tempfile(diff_body)
             self.apply_patch(repository_info, tool, request_id, diff_revision,
                              tmp_patch_file, base_dir)
 
             if self.options.commit:
                 try:
                     review_request = api_root.get_review_request(
-                        review_request_id=request_id)
+                        review_request_id=request_id,
+                        force_text_type='plain')
                 except APIError, e:
                     raise CommandError('Error getting review request %s: %s'
                                        % (request_id, e))
@@ -188,7 +180,7 @@ class Patch(Command):
                 author = review_request.get_submitter()
 
                 try:
-                    tool.create_commmit(message, author)
+                    tool.create_commit(message, author)
                     print('Changes committed to current branch.')
                 except NotImplementedError:
                     raise CommandError('--commit is not supported with %s'
