diff --git a/.gitignore b/.gitignore
index ed9cd99..a6fedb0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,9 @@
 .tmp*
 .htaccess
 .settings/*
+*~
+*.orig
+git-create-branch-github.sh
+git-create-branch-origin.sh
+framework.config.php
+.project
diff --git a/features/cerberusweb.core/api/uri/display.php b/features/cerberusweb.core/api/uri/display.php
index 868cdc6..34c815b 100644
--- a/features/cerberusweb.core/api/uri/display.php
+++ b/features/cerberusweb.core/api/uri/display.php
@@ -774,6 +774,9 @@ class ChDisplayPage extends CerberusPageExtension {
 	function saveCommentAction() {
 		@$ticket_id = DevblocksPlatform::importGPC($_REQUEST['ticket_id'],'integer');
 		@$comment = DevblocksPlatform::importGPC($_REQUEST['comment'],'string','');
+		$mail_service = DevblocksPlatform::getMailService();
+		$mailer = null; // lazy load
+		$translate = DevblocksPlatform::getTranslationService();
 		
 		// Worker is logged in
 		if(null === ($active_worker = CerberusApplication::getActiveWorker()))
@@ -801,20 +804,76 @@ class ChDisplayPage extends CerberusPageExtension {
 		
 		// Notifications
 		$url_writer = DevblocksPlatform::getUrlService();
-		@$notify_worker_ids = DevblocksPlatform::importGPC($_REQUEST['notify_worker_ids'],'array',array());
-		if(is_array($notify_worker_ids) && !empty($notify_worker_ids))
-		foreach($notify_worker_ids as $notify_worker_id) {
-			$fields = array(
-				DAO_WorkerEvent::CREATED_DATE => time(),
-				DAO_WorkerEvent::WORKER_ID => $notify_worker_id,
-				DAO_WorkerEvent::URL => $url_writer->write('c=display&id='.$ticket->mask,true),
-				DAO_WorkerEvent::TITLE => 'New Ticket Comment', // [TODO] Translate
-				DAO_WorkerEvent::CONTENT => sprintf("#%s: %s\n%s comments: %s", $ticket->mask, $ticket->subject, $active_worker->getName(), $comment), // [TODO] Translate
-				DAO_WorkerEvent::IS_READ => 0,
-			);
-			DAO_WorkerEvent::create($fields);
+		@$enable_notify_workers = DevblocksPlatform::importGPC($_REQUEST['enable_notify_workers'],'integer',0);
+		if ($enable_notify_workers) {
+			@$notify_worker_ids = DevblocksPlatform::importGPC($_REQUEST['notify_worker_ids'],'array',array());
+			if(is_array($notify_worker_ids) && !empty($notify_worker_ids))
+			foreach($notify_worker_ids as $notify_worker_id) {
+				$fields = array(
+					DAO_WorkerEvent::CREATED_DATE => time(),
+					DAO_WorkerEvent::WORKER_ID => $notify_worker_id,
+					DAO_WorkerEvent::URL => $url_writer->write('c=display&id='.$ticket->mask,true),
+					DAO_WorkerEvent::TITLE => $translate->_('ticket.comments.new_ticket_comment'), // [TODO] Translate
+					DAO_WorkerEvent::CONTENT => sprintf("#%s: %s\n%s %s: %s", $ticket->mask, $ticket->subject, $active_worker->getName(), $translate->_('ticket.comments.comments'), $comment), // [TODO] Translate
+					DAO_WorkerEvent::IS_READ => 0,
+				);
+				DAO_WorkerEvent::create($fields);
+			}
 		}
-		
+		// Email Notifications
+		@$enable_email_workers = DevblocksPlatform::importGPC($_REQUEST['enable_email_workers'],'integer',0);
+		if ($enable_email_workers) {
+			$workers = DAO_Worker::getAll();
+			@$email_worker_ids = DevblocksPlatform::importGPC($_REQUEST['email_worker_ids'],'array',array());
+			if(is_array($email_worker_ids) && !empty($email_worker_ids)) {
+				@$active_worker = CerberusApplication::getActiveWorker();
+				$settings = CerberusSettings::getInstance();
+				$default_from = $settings->get('cerberusweb.core',CerberusSettings::DEFAULT_REPLY_FROM, '');
+				$default_personal = $settings->get('cerberusweb.core',CerberusSettings::DEFAULT_REPLY_PERSONAL, '');
+				// See if we need a group-specific reply-to
+				if(!empty($ticket->team_id)) {
+					@$group_from = DAO_GroupSettings::get($ticket->team_id, DAO_GroupSettings::SETTING_REPLY_FROM);
+					if(!empty($group_from))
+						$default_from = $group_from;
+					
+					@$group_personal = DAO_GroupSettings::get($ticket->team_id, DAO_GroupSettings::SETTING_REPLY_PERSONAL);
+					if(!empty($group_personal))
+						$default_personal = $group_personal;
+				}
+
+				foreach($email_worker_ids as $email_worker_id) {
+					try {
+						if(null == $mailer)
+							$mailer = $mail_service->getMailer(CerberusMail::getMailerDefaults());
+							
+				 		// Create the message
+						$mail = $mail_service->createMessage();
+						$mail->setTo(array($workers[$email_worker_id]->email));
+						$mail->setFrom(array($default_from => $default_personal));
+						$mail->setReplyTo($default_from);
+						$mail->setSubject(sprintf("[%s #%s]: %s [%s]",
+							$translate->_('ticket.comments.comments'),
+							$ticket->mask,
+							$ticket->subject,
+							$translate->_('ticket.comments.comments')
+						));
+				
+						$headers = $mail->getHeaders();
+						$headers->addTextHeader('X-Mailer','Cerberus Helpdesk (Build '.APP_BUILD.')');
+						$headers->addTextHeader('Precedence','List');
+						$headers->addTextHeader('Auto-Submitted','auto-generated');
+				
+						$mail->setBody(sprintf("#%s: %s\n%s %s: %s\n%s", $ticket->mask, $ticket->subject, $active_worker->getName(), $translate->_('ticket.comments.comments'), $comment, $url_writer->write('c=display&mask=' . $ticket->mask, true, false))); // [TODO] Translate);
+				
+						$result = $mailer->send($mail);
+				
+					} catch(Exception $e) {
+						//
+					}
+				}
+			}
+		}
+
 		DevblocksPlatform::redirect(new DevblocksHttpResponse(array('display',$ticket->mask,'comments')));
 	}
 	
diff --git a/features/cerberusweb.core/strings.xml b/features/cerberusweb.core/strings.xml
index 404648f..6337b74 100644
--- a/features/cerberusweb.core/strings.xml
+++ b/features/cerberusweb.core/strings.xml
@@ -1468,6 +1468,27 @@ For example: *receipt*</seg></tuv>
 			<tuv xml:lang="en_US"><seg>Updated</seg></tuv>
 		</tu>
 
+		<!-- Tickets Comments -->
+
+		<tu tuid='ticket.comments.notify_workers'>
+			<tuv xml:lang="en_US"><seg>Notify workers</seg></tuv>
+		</tu>
+		<tu tuid='ticket.comments.email_workers'>
+			<tuv xml:lang="en_US"><seg>Email workers</seg></tuv>
+		</tu>
+		<tu tuid='ticket.comments.select_workers'>
+			<tuv xml:lang="en_US"><seg>(hold CTRL or CMD to select multiple)</seg></tuv>
+		</tu>
+		<tu tuid='ticket.comments.owner'>
+			<tuv xml:lang="en_US"><seg>(owner)</seg></tuv>
+		</tu>
+		<tu tuid='ticket.comments.comments'>
+			<tuv xml:lang="en_US"><seg>comments</seg></tuv>
+		</tu>
+		<tu tuid='ticket.comments.new_ticket_comment'>
+			<tuv xml:lang="en_US"><seg>New Ticket Comment</seg></tuv>
+		</tu>
+		
 		<!-- Spam Training -->
 
 		<tu tuid='training.report_spam'>
diff --git a/features/cerberusweb.core/templates/display/modules/comments/index.tpl b/features/cerberusweb.core/templates/display/modules/comments/index.tpl
index 045d948..d827dde 100644
--- a/features/cerberusweb.core/templates/display/modules/comments/index.tpl
+++ b/features/cerberusweb.core/templates/display/modules/comments/index.tpl
@@ -1,42 +1,58 @@
 {if $active_worker->hasPriv('core.display.actions.comment')}
-	<h2>Add Comment</h2>
-	<form action="{devblocks_url}{/devblocks_url}" method="post" id="displayAddCommentForm">
-	<input type="hidden" name="c" value="display">
-	<input type="hidden" name="a" value="saveComment">
-	<input type="hidden" name="ticket_id" value="{$ticket_id}">
-	
-	<b>Author:</b> {$active_worker->getName()}<br>
-	<textarea name="comment" rows="5" cols="60" style="width:98%;"></textarea><br>
-	<br>
-	
-	{if !empty($workers)}
-	{assign var=owner_id value=$ticket->next_worker_id}
-	<label><input type="checkbox" onclick="toggleDiv('addCommentNotifyWorkers');"> <b>Notify workers</b></label>
-	<div id="addCommentNotifyWorkers" style="display:none;">
-	<select name="notify_worker_ids[]" multiple="multiple" size="8" id="notify_worker_ids">
-		{foreach from=$active_workers item=worker name=notify_workers}
-		{if $owner_id && $worker->id == $owner_id}{math assign=notify_owner_id equation="x-1" x=$smarty.foreach.notify_workers.iteration}{/if}
-		{if $worker->id == $active_worker->id}{math assign=notify_me_id equation="x-1" x=$smarty.foreach.notify_workers.iteration}{/if}
-		<option value="{$worker->id}">{$worker->getName()}</option>
-		{/foreach}
-	</select><br>
-	(hold CTRL or CMD to select multiple)<br>
-	{if !empty($notify_me_id)}<button type="button" onclick="document.getElementById('notify_worker_ids').options[{$notify_me_id}].selected=true;">{$translate->_('common.me')}</button>{/if} 
-	{if !empty($owner_id) || isset($notify_owner_id)}<button type="button" onclick="document.getElementById('notify_worker_ids').options[{$notify_owner_id}].selected=true;">{$workers.$owner_id->getName()} (owner)</button>{/if}
-	</div>
-	{/if}
-	<br>
-	<br>
-	
-	<button type="submit"><img src="{devblocks_url}c=resource&p=cerberusweb.core&f=images/check.gif{/devblocks_url}" align="top"> {$translate->_('common.save_changes')|capitalize}</button>
-	</form>
-	<br>
+	<h2>Add Comment</h2>
+	<form action="{devblocks_url}{/devblocks_url}" method="post" id="displayAddCommentForm">
+	<input type="hidden" name="c" value="display">
+	<input type="hidden" name="a" value="saveComment">
+	<input type="hidden" name="ticket_id" value="{$ticket_id}">
+	
+	<b>Author:</b> {$active_worker->getName()}<br>
+	<textarea name="comment" rows="5" cols="60" style="width:98%;"></textarea><br>
+	<br>
+	
+	{if !empty($workers)}
+	{assign var=owner_id value=$ticket->next_worker_id}
+	<label><input type="checkbox" value="1" name="enable_notify_workers" onclick="toggleDiv('addCommentNotifyWorkers');"> <b>{$translate->_('ticket.comments.notify_workers')|capitalize}</b></label>
+	<div id="addCommentNotifyWorkers" style="display:none;">
+	<select name="notify_worker_ids[]" multiple="multiple" size="8" id="notify_worker_ids">
+		{foreach from=$active_workers item=worker name=notify_workers}
+		{if $owner_id && $worker->id == $owner_id}{math assign=notify_owner_id equation="x-1" x=$smarty.foreach.notify_workers.iteration}{/if}
+		{if $worker->id == $active_worker->id}{math assign=notify_me_id equation="x-1" x=$smarty.foreach.notify_workers.iteration}{/if}
+		<option value="{$worker->id}">{$worker->getName()}</option>
+		{/foreach}
+	</select><br>
+	{$translate->_('ticket.comments.select_workers')}<br>
+	{if !empty($notify_me_id)}<button type="button" onclick="document.getElementById('notify_worker_ids').options[{$notify_me_id}].selected=true;">{$translate->_('common.me')}</button>{/if} 
+	{if !empty($owner_id) || isset($notify_owner_id)}<button type="button" onclick="document.getElementById('notify_worker_ids').options[{$notify_owner_id}].selected=true;">{$workers.$owner_id->getName()} {$translate->_('ticket.comments.owner')}</button>{/if}
+	</div>
+	<br>
+
+	<label><input type="checkbox" value="1" name="enable_email_workers" onclick="toggleDiv('addCommentEmailWorkers');"> <b>{$translate->_('ticket.comments.email_workers')|capitalize}</b></label>
+	<div id="addCommentEmailWorkers" style="display:none;">
+	<select name="email_worker_ids[]" multiple="multiple" size="8" id="email_worker_ids">
+		{foreach from=$active_workers item=worker name=email_workers}
+		{if $owner_id && $worker->id == $owner_id}{math assign=email_owner_id equation="x-1" x=$smarty.foreach.email_workers.iteration}{/if}
+		{if $worker->id == $active_worker->id}{math assign=email_me_id equation="x-1" x=$smarty.foreach.email_workers.iteration}{/if}
+		<option value="{$worker->id}">{$worker->getName()}</option>
+		{/foreach}
+	</select><br>
+	{$translate->_('ticket.comments.select_workers')}<br>
+	{if !empty($email_me_id)}<button type="button" onclick="document.getElementById('email_worker_ids').options[{$email_me_id}].selected=true;">{$translate->_('common.me')}</button>{/if} 
+	{if !empty($owner_id) || isset($email_owner_id)}<button type="button" onclick="document.getElementById('email_worker_ids').options[{$email_owner_id}].selected=true;">{$workers.$owner_id->getName()} {$translate->_('ticket.comments.owner')}</button>{/if}
+	</div>
+	{/if}
+
+	<br>
+	<br>
+	
+	<button type="submit"><img src="{devblocks_url}c=resource&p=cerberusweb.core&f=images/check.gif{/devblocks_url}" align="top"> {$translate->_('common.save_changes')|capitalize}</button>
+	</form>
+	<br>
 {/if}
-
-{if !empty($comments)}
-	{foreach from=$comments item=comment key=comment_id}
-		{include file="$core_tpl/display/modules/conversation/comment.tpl"}
-	{/foreach}
-{/if}
-
+
+{if !empty($comments)}
+	{foreach from=$comments item=comment key=comment_id}
+		{include file="$core_tpl/display/modules/conversation/comment.tpl"}
+	{/foreach}
+{/if}
+
 <br>
\ No newline at end of file

