Index: htdocs/css/ticket.css
===================================================================
--- htdocs/css/ticket.css	(revision 3386)
+++ htdocs/css/ticket.css	(working copy)
@@ -39,6 +39,12 @@
 #ticket table.properties td { width: 30% }
 #ticket table.properties .description { border-top: 1px solid #dd9 }
 
+#ticket .description form { 
+ float: right;
+ position: relative;
+ bottom: 1.8em;
+}
+
 #changelog { border: 1px outset #996; padding: 1em }
 #changelog h3 {
  border-bottom: 1px solid #d7d7d7;
@@ -47,22 +53,20 @@
  font-weight: normal;
 }
 #changelog .threading {
-	float: right;
+ float: right;
+ position: relative;
+ bottom: 0.3em;
 }
+#changelog h3 .threading form { 
+ display: inline
+}
 .inlinebuttons input { 
- float: right;
  font-size: 70%;
  border-width: 1px;
- margin: 0 .5em .1em 1.5em;
+ margin: 0 0 0 .5em;
  padding: 0.1em;
- background-color: #f6f6f6;
+ background: none;
 }
-.inlinebuttons > input { /* rule ignored by IE */
- visibility: hidden;
-}
-div.change:hover .inlinebuttons input {
- visibility: visible;
-}
 
 #changelog .changes { list-style: square; margin-left: 2em; padding: 0 }
 #changelog .comment { margin-left: 2em }
Index: trac/ticket/web_ui.py
===================================================================
--- trac/ticket/web_ui.py	(revision 3386)
+++ trac/ticket/web_ui.py	(working copy)
@@ -574,6 +574,16 @@
 
         # -- Ticket Change History
 
+        def quote_original(author, original, link):
+            if not 'comment' in req.args: # i.e. the comment was not yet edited
+                req.hdf['ticket.comment'] = '\n'.join(
+                    ['Replying to [%s %s]:' % (link, author)] +
+                    ['> %s' % line for line in original.splitlines()] + [''])
+
+        if replyto == 'description':
+            quote_original(reporter_id, ticket['description'],
+                           'ticket:%d' % ticket.id)
+
         changelog = ticket.get_changelog(db=db)
         autonum = 0 # used for "root" numbers
         replies = {}
@@ -604,12 +614,8 @@
                         else:
                             this_num = old
                     assert this_num == str(autonum)
-                    # if we replied to this comment, quote it (with '>' prefix)
-                    if replyto == this_num and not 'comment' in req.args:
-                        req.hdf['ticket.comment'] = '\n'.join(
-                            ['Replying to [comment:%s %s]:' % \
-                             (replyto, author)] +
-                            ['> %s' % line for line in new.splitlines()] + [''])
+                    if replyto == this_num:
+                        quote_original(author, new, 'comment:%s' % replyto)
             elif field == 'description':
                 current['fields'][field] = ''
             else:
Index: templates/ticket.cs
===================================================================
--- templates/ticket.cs	(revision 3386)
+++ templates/ticket.cs	(working copy)
@@ -71,8 +71,12 @@
    /if ?><?cs
   /each ?></tr>
  </table>
- <?cs if:ticket.description ?><div class="description">
+ <?cs if:ticket.description ?><div id="description" class="description">
   <?cs var:ticket.description.formatted ?>
+  <form method="get" action="<?cs var:ticket.href ?>#comment"><div class="inlinebuttons">
+   <input type="hidden" name="replyto" value="description" />
+   <input type="submit" value="Reply" title="Reply, quoting this description" /></div>
+  </form>
  </div><?cs /if ?>
 </div>
 
@@ -89,31 +93,30 @@
  each:change = ticket.changes ?>
  <div class="change">
   <h3 <?cs if:change.cnum ?>id="comment:<?cs var:change.cnum ?>"<?cs /if ?>><?cs
-   if:change.cnum ?><?cs
-    set:nreplies = len(ticket.replies[change.cnum]) ?><?cs
-    if:nreplies || change.replyto ?><span class="threading"> (<?cs
-     if:change.replyto ?>in reply to: <?cs 
-      call:commentref('&uarr;', change.replyto) ?><?cs if nreplies ?>; <?cs /if ?><?cs
-     /if ?><?cs
-     if nreplies ?><?cs
-      call:plural('follow-up', nreplies) ?>: <?cs 
-      each:reply = ticket.replies[change.cnum] ?><?cs 
-       call:commentref('&darr;', reply) ?><?cs 
-      /each ?><?cs 
-     /if ?>)<?cs
-    /if ?></span><?cs
+   if:change.cnum ?>
+    <span class="threading"><?cs
+     set:nreplies = len(ticket.replies[change.cnum]) ?><?cs
+     if:nreplies || change.replyto ?>(<?cs
+      if:change.replyto ?>in reply to: <?cs 
+       call:commentref('&uarr;&nbsp;', change.replyto) ?><?cs if nreplies ?>; <?cs /if ?><?cs
+      /if ?><?cs
+      if nreplies ?><?cs
+       call:plural('follow-up', nreplies) ?>: <?cs 
+       each:reply = ticket.replies[change.cnum] ?><?cs 
+        call:commentref('&darr;&nbsp;', reply) ?><?cs 
+       /each ?><?cs 
+      /if ?>)<?cs
+    /if ?><form method="get" action="<?cs var:ticket.href ?>#comment"><span class="inlinebuttons">
+    <input type="hidden" name="replyto" value="<?cs var:change.cnum ?>" />
+    <input type="submit" value="Reply" title="Reply to comment <?cs var:change.cnum ?>" /></span>
+   </form>
+    </span><?cs
    /if ?><?cs
    var:change.date ?> changed by <?cs var:change.author ?><?cs
    if:change.cnum ?>&nbsp;<a href="#comment:<?cs var:change.cnum ?>" class="anchor"
       title="Permalink to comment:<?cs var:change.cnum ?>">&para;</a><?cs
    /if ?>
   </h3><?cs
-  if:change.cnum ?>
-   <form method="get" action="<?cs var:ticket.href ?>#comment"><div class="inlinebuttons">
-    <input type="hidden" name="replyto" value="<?cs var:change.cnum ?>" />
-    <input type="submit" value="Reply" title="Reply to comment <?cs var:change.cnum ?>" /></div>
-   </form><?cs 
-  /if ?><?cs
   if:len(change.fields) ?>
    <ul class="changes"><?cs
    each:field = change.fields ?>
@@ -176,9 +179,9 @@
    </tr><?cs
    /if ?><?cs
    if:trac.acl.TICKET_ADMIN ?><tr>
-    <th><label for="description">Description:</label></th>
+    <th><label for="description-editor">Description:</label></th>
     <td class="fullrow" colspan="3">
-     <textarea id="description" name="description" class="wikitext" rows="10" cols="68"><?cs
+     <textarea id="description-editor" name="description" class="wikitext" rows="10" cols="68"><?cs
         var:ticket.description ?></textarea>
     </td>
    </tr><tr>

