diff --git a/rbtools/commands/post.py b/rbtools/commands/post.py
index dd15eff50cb003daef5cef08981e1d16804fb8e9..c820b0763c722d41e693654ff0594ce96c63c834 100644
--- a/rbtools/commands/post.py
+++ b/rbtools/commands/post.py
@@ -65,10 +65,8 @@ class Post(Command):
                        action='store_true',
                        default=False,
                        help='Publish the review request immediately after '
-                            'posting. Mark this publish as trivial. E-mails '
-                            'are not sent for trivial publishes.'
-                            '\n'
-                            'This option implies --publish.',
+                            'posting, but without sending an e-mail '
+                            'notification.',
                        added_in='0.8.0'),
                 Option('-o', '--open',
                        dest='open_browser',
@@ -166,7 +164,8 @@ class Post(Command):
                            'guessing behavior. See :ref:`guessing-behavior` '
                            'for more information.'
                        )),
-                Option('--change-description',
+                Option('-m', '--change-description',
+                       dest='change_description',
                        default=None,
                        metavar='TEXT',
                        help='A description of what changed in this update '
@@ -239,8 +238,9 @@ class Post(Command):
                        action='store_true',
                        config_key='MARKDOWN',
                        default=False,
-                       help='Specifies if the summary and description should '
-                            'be interpreted as Markdown-formatted text.'
+                       help='Specifies if the summary, description, and '
+                            'change description should should be interpreted '
+                            'as Markdown-formatted text.'
                             '\n'
                             'This is only supported in Review Board 2.0+.',
                        added_in='0.6'),
@@ -397,7 +397,7 @@ class Post(Command):
         if review_request_id:
             review_request = get_review_request(
                 review_request_id, api_root,
-                only_fields='absolute_url,bugs_closed,id,status',
+                only_fields='absolute_url,bugs_closed,id,status,public',
                 only_links='diffs,draft')
 
             if review_request.status == 'submitted':
@@ -562,10 +562,6 @@ class Post(Command):
             # valid Markdown, so tell the server so it won't escape the text.
             update_fields['text_type'] = 'markdown'
 
-        if self.options.change_description:
-            update_fields['changedescription'] = \
-                self.options.change_description
-
         if self.options.publish:
             update_fields['public'] = True
 
@@ -574,6 +570,21 @@ class Post(Command):
                                                       'trivial_publish')):
                 update_fields['trivial'] = True
 
+        if self.options.change_description is not None:
+            if review_request.public:
+                update_fields['changedescription'] = \
+                    self.options.change_description
+
+                if (self.options.markdown and
+                    self.tool.capabilities.has_capability('text', 'markdown')):
+                    update_fields['changedescription_text_type'] = 'markdown'
+                else:
+                    update_fields['changedescription_text_type'] = 'plain'
+            else:
+                logging.error(
+                    'The change description field can only be set when '
+                    'publishing an update. Use --description instead.')
+
         if supports_posting_commit_ids and commit_id != draft.commit_id:
             update_fields['commit_id'] = commit_id or ''
 
diff --git a/rbtools/commands/publish.py b/rbtools/commands/publish.py
index d0feb6477c038e8f9bba91a2dc668cf11de99b98..7fe53270fb87d815f359e22748c3fb8468ba2a52 100644
--- a/rbtools/commands/publish.py
+++ b/rbtools/commands/publish.py
@@ -1,5 +1,7 @@
 from __future__ import print_function, unicode_literals
 
+import logging
+
 from rbtools.api.errors import APIError
 from rbtools.commands import Command, CommandError, Option
 from rbtools.utils.commands import get_review_request
@@ -17,9 +19,22 @@ class Publish(Command):
                dest='trivial_publish',
                action='store_true',
                default=False,
-               help='Mark this publish as trivial. E-mails are not sent for '
-                    'trivial publishes.',
-               added_in='0.8.0')
+               help='Publish the review request without sending an e-mail '
+                    'notification.',
+               added_in='0.8.0'),
+        Option('--markdown',
+               dest='markdown',
+               action='store_true',
+               config_key='MARKDOWN',
+               default=False,
+               help='Specifies if the change description should should be '
+                    'interpreted as Markdown-formatted text.',
+               added_in='0.8.0'),
+        Option('-m', '--change-description',
+               dest='change_description',
+               default=None,
+               help='The change description to use for the publish.',
+               added_in='0.8.0'),
     ]
 
     def main(self, request_id):
@@ -29,7 +44,9 @@ class Publish(Command):
         server_url = self.get_server_url(repository_info, tool)
         api_client, api_root = self.get_api(server_url)
 
-        request = get_review_request(request_id, api_root)
+        review_request = get_review_request(request_id, api_root,
+                                            only_fields='public',
+                                            only_links='draft')
 
         self.setup_tool(tool, api_root)
 
@@ -42,8 +59,23 @@ class Publish(Command):
                                              'trivial_publish')):
             update_fields['trivial'] = True
 
+        if self.options.change_description is not None:
+            if review_request.public:
+                update_fields['changedescription'] = \
+                    self.options.change_description
+
+                if (self.options.markdown and
+                    tool.capabilities.has_capability('text', 'markdown')):
+                    update_fields['changedescription_text_type'] = 'markdown'
+                else:
+                    update_fields['changedescription_text_type'] = 'plain'
+            else:
+                logging.error(
+                    'The change description field can only be set when '
+                    'publishing an update.')
+
         try:
-            draft = request.get_draft()
+            draft = review_request.get_draft(only_fields='')
             draft.update(**update_fields)
         except APIError as e:
             raise CommandError('Error publishing review request (it may '
