diff --git a/bugnote_view_inc.php b/bugnote_view_inc.php
index 3b6a2cf..58bd928 100644
--- a/bugnote_view_inc.php
+++ b/bugnote_view_inc.php
@@ -146,6 +146,24 @@ $num_notes = count( $t_bugnotes );
 					$t_can_delete_note = true;
 				}
 
+                                # reply button
+                                if ( access_has_bug_level( config_get( 'add_bugnote_threshold' ), $f_bug_id ) ) {
+                                  $t_text = sprintf(
+                                    lang_get( 'in_reply_to' ),
+                                    config_get( 'bugnote_link_tag' ) . $t_bugnote->id,
+                                    user_get_name( $t_bugnote->reporter_id ) ) .
+                                  "\r\n" .
+                                  preg_replace( "/^([^\r\n]*)/m", "> $1", $t_bugnote->note );
+                                  
+                                  echo "<form name=\"Quote\" action=\"\">";
+                                  echo "<input class=\"button-small\" value=\"";
+                                  echo lang_get( 'reply' );
+                                  echo "\" type=\"button\" onclick=\"AddBugNoteText('";
+                                  echo rawurlencode(utf8_decode( $t_text ));
+                                  echo "')\">";
+                                  echo "</form>";
+                                }
+                                
 				# users above update_bugnote_threshold should be able to edit this bugnote
 				if ( $t_can_edit_note || access_has_bug_level( config_get( 'update_bugnote_threshold' ), $f_bug_id ) ) {
 					print_button( 'bugnote_edit_page.php?bugnote_id='.$t_bugnote->id, lang_get( 'bugnote_edit_link' ) );
diff --git a/core/string_api.php b/core/string_api.php
index 407fcc6..10b1871 100644
--- a/core/string_api.php
+++ b/core/string_api.php
@@ -120,6 +120,18 @@ function string_nl2br( $p_string, $p_wrap = 100 ) {
 }
 
 /**
+ * Show quotes
+ * @param string $p_string
+ * @return string
+ */
+function string_quoting( $p_string ) {
+  return preg_replace( "/^(&gt; [^\r\n]*)/m",
+                       "<b>$1</b>",
+                       $p_string );
+}
+
+
+/**
  * Prepare a multiple line string for display to HTML
  * @param string $p_string
  * @return string
diff --git a/javascript/dev/common.js b/javascript/dev/common.js
index af6d397..b149f25 100644
--- a/javascript/dev/common.js
+++ b/javascript/dev/common.js
@@ -22,6 +22,13 @@
  * --------------------------------------------------------
  */
 
+function AddBugNoteText( text ) {
+    var dst = document.getElementsByName("bugnote_text")[0];
+    dst.value += unescape(text) + "\n";
+    dst.focus();
+}
+
+
 /*
  * String manipulation
  */
diff --git a/javascript/min/common.js b/javascript/min/common.js
index 70c6203..ac7537a 100644
--- a/javascript/min/common.js
+++ b/javascript/min/common.js
@@ -1 +1,7 @@
-function Trim(d){if(typeof d!="string"){return d}var c=d;var b="";b=c.substring(0,1);while(b==" "){c=c.substring(1,c.length);b=c.substring(0,1)}b=c.substring(c.length-1,c.length);while(b==" "){c=c.substring(0,c.length-1);b=c.substring(c.length-1,c.length)}return c}function GetCookie(f){var c="MANTIS_"+f;var b=document.cookie;b=b.split(";");var d=0;while(d<b.length){var e=b[d];e=e.split("=");if(Trim(e[0])==c){return(e[1])}d++}return -1}function SetCookie(e,d){var b="MANTIS_"+e;var c=new Date();c.setTime(c.getTime()+(365*24*60*60*1000));document.cookie=b+"="+d+"; expires="+c.toUTCString()+";"}var g_collapse_clear=1;function ToggleDiv(b){t_open_div=document.getElementById(b+"_open");t_closed_div=document.getElementById(b+"_closed");t_cookie=GetCookie("collapse_settings");if(1==g_collapse_clear){t_cookie="";g_collapse_clear=0}if(t_open_div.className=="hidden"){t_open_div.className="";t_closed_div.className="hidden";t_cookie=t_cookie+"|"+b+",1"}else{t_closed_div.className="";t_open_div.className="hidden";t_cookie=t_cookie+"|"+b+",0"}SetCookie("collapse_settings",t_cookie)}function checkall(p_formname,p_state){var t_elements=(eval("document."+p_formname+".elements"));for(var i=0;i<t_elements.length;i++){if(t_elements[i].type=="checkbox"){t_elements[i].checked=p_state}}}var a=navigator.userAgent.indexOf("MSIE");var style_display;if(a!=-1){style_display="block"}else{style_display="table-row"}style_display="block";function setDisplay(c,b){if(!document.getElementById(c)){alert("SetDisplay(): id "+c+" is empty")}if(b!=0){document.getElementById(c).style.display=style_display}else{document.getElementById(c).style.display="none"}}function toggleDisplay(b){setDisplay(b,(document.getElementById(b).style.display=="none")?1:0)}function tag_string_append(b){t_tag_separator=document.getElementById("tag_separator").value;t_tag_string=document.getElementById("tag_string");t_tag_select=document.getElementById("tag_select");if(Trim(b)==""){return}if(t_tag_string.value!=""){t_tag_string.value=t_tag_string.value+t_tag_separator+b}else{t_tag_string.value=t_tag_string.value+b}t_tag_select.selectedIndex=0};
\ No newline at end of file
+function AddBugNoteText( text ) {
+    var dst = document.getElementsByName("bugnote_text")[0];
+    dst.value += unescape(text) + "\n";
+    dst.focus();
+}
+
+function Trim(d){if(typeof d!="string"){return d}var c=d;var b="";b=c.substring(0,1);while(b==" "){c=c.substring(1,c.length);b=c.substring(0,1)}b=c.substring(c.length-1,c.length);while(b==" "){c=c.substring(0,c.length-1);b=c.substring(c.length-1,c.length)}return c}function GetCookie(f){var c="MANTIS_"+f;var b=document.cookie;b=b.split(";");var d=0;while(d<b.length){var e=b[d];e=e.split("=");if(Trim(e[0])==c){return(e[1])}d++}return -1}function SetCookie(e,d){var b="MANTIS_"+e;var c=new Date();c.setTime(c.getTime()+(365*24*60*60*1000));document.cookie=b+"="+d+"; expires="+c.toUTCString()+";"}var g_collapse_clear=1;function ToggleDiv(b){t_open_div=document.getElementById(b+"_open");t_closed_div=document.getElementById(b+"_closed");t_cookie=GetCookie("collapse_settings");if(1==g_collapse_clear){t_cookie="";g_collapse_clear=0}if(t_open_div.className=="hidden"){t_open_div.className="";t_closed_div.className="hidden";t_cookie=t_cookie+"|"+b+",1"}else{t_closed_div.className="";t_open_div.className="hidden";t_cookie=t_cookie+"|"+b+",0"}SetCookie("collapse_settings",t_cookie)}function checkall(p_formname,p_state){var t_elements=(eval("document."+p_formname+".elements"));for(var i=0;i<t_elements.length;i++){if(t_elements[i].type=="checkbox"){t_elements[i].checked=p_state}}}var a=navigator.userAgent.indexOf("MSIE");var style_display;if(a!=-1){style_display="block"}else{style_display="table-row"}style_display="block";function setDisplay(c,b){if(!document.getElementById(c)){alert("SetDisplay(): id "+c+" is empty")}if(b!=0){document.getElementById(c).style.display=style_display}else{document.getElementById(c).style.display="none"}}function toggleDisplay(b){setDisplay(b,(document.getElementById(b).style.display=="none")?1:0)}function tag_string_append(b){t_tag_separator=document.getElementById("tag_separator").value;t_tag_string=document.getElementById("tag_string");t_tag_select=document.getElementById("tag_select");if(Trim(b)==""){return}if(t_tag_string.value!=""){t_tag_string.value=t_tag_string.value+t_tag_separator+b}else{t_tag_string.value=t_tag_string.value+b}t_tag_select.selectedIndex=0};
diff --git a/lang/strings_english.txt b/lang/strings_english.txt
index 1a1606b..b947c42 100644
--- a/lang/strings_english.txt
+++ b/lang/strings_english.txt
@@ -54,6 +54,10 @@ $s_actiongroup_menu_attach_tags = 'Attach Tags';
 $s_actiongroup_bugs = 'Selected Issues';
 $s_actiongroup_error_issue_is_readonly = 'Issue is readonly.';
 
+# reply patch
+$s_reply = 'Reply';
+$s_in_reply_to = 'In reply to %s from %s';
+
 # new strings:
 $s_all_projects = 'All Projects';
 $s_move_bugs = 'Move Issues';
diff --git a/plugins/MantisCoreFormatting/MantisCoreFormatting.php b/plugins/MantisCoreFormatting/MantisCoreFormatting.php
index fb3d27a..8307359 100644
--- a/plugins/MantisCoreFormatting/MantisCoreFormatting.php
+++ b/plugins/MantisCoreFormatting/MantisCoreFormatting.php
@@ -101,6 +101,7 @@ class MantisCoreFormattingPlugin extends MantisFormattingPlugin {
 			$t_string = string_strip_hrefs( $t_string );
 			$t_string = string_html_specialchars( $t_string );
 			$t_string = string_restore_valid_html_tags( $t_string, /* multiline = */ true );
+			$t_string = string_quoting( $t_string );
 
 			if( $p_multiline ) {
 				$t_string = string_preserve_spaces_at_bol( $t_string );
