diff --git a/include/ajax.content.php b/include/ajax.content.php
index f283e2640ec14b1df64a58a8648af50542b62f43..d7863cb880c48e781059e4db60049341bd48154e 100644
--- a/include/ajax.content.php
+++ b/include/ajax.content.php
@@ -60,7 +60,7 @@ class ContentAjaxAPI extends AjaxController {
                     <tr><td>%{ticket.phone}</td><td>'.__('Phone number | ext').'</td></tr>
                     <tr><td>%{ticket.status}</td><td>'.__('Status').'</td></tr>
                     <tr><td>%{ticket.priority}</td><td>'.__('Priority').'</td></tr>
-                    <tr><td>%{ticket.assigned}</td><td>Assigned agent and/or team</td></tr>
+                    <tr><td>%{ticket.assigned}</td><td>'.__('Assigned agent and/or team').'</td></tr>
                     <tr><td>%{ticket.create_date}</td><td>'.__('Date created').'</td></tr>
                     <tr><td>%{ticket.due_date}</td><td>'.__('Due date').'</td></tr>
                     <tr><td>%{ticket.close_date}</td><td>'.__('Date closed').'</td></tr>
diff --git a/include/class.dynamic_forms.php b/include/class.dynamic_forms.php
index 46c5045c3c867bae66eca202686517d610d610bc..d36a56aa4e8db580e24bcd8ea9a2a843ba6d2a15 100644
--- a/include/class.dynamic_forms.php
+++ b/include/class.dynamic_forms.php
@@ -243,7 +243,7 @@ class UserForm extends DynamicForm {
         return static::$instance;
     }
 }
-Filter::addSupportedMatches(/* trans */ 'User Data', function() {
+Filter::addSupportedMatches(/* @trans */ 'User Data', function() {
     $matches = array();
     foreach (UserForm::getInstance()->getFields() as $f) {
         if (!$f->hasData())
@@ -333,7 +333,7 @@ class TicketForm extends DynamicForm {
     }
 }
 // Add fields from the standard ticket form to the ticket filterable fields
-Filter::addSupportedMatches(/* trans */ 'Ticket Data', function() {
+Filter::addSupportedMatches(/* @trans */ 'Ticket Data', function() {
     $matches = array();
     foreach (TicketForm::getInstance()->getFields() as $f) {
         if (!$f->hasData())
@@ -1127,6 +1127,7 @@ class TypeaheadSelectionWidget extends ChoicesWidget {
             $value = key($this->value);
         }
 
+        $config = $this->getConfiguration();
         $source = array();
         foreach ($this->field->getList()->getItems() as $i)
             $source[] = array(
diff --git a/include/class.export.php b/include/class.export.php
index 78be2d43206f3dfb0b392ece15de5322c271a9a0..3471ba5f6dc411035bd8defd43df6e5e0e66c5c4 100644
--- a/include/class.export.php
+++ b/include/class.export.php
@@ -18,8 +18,8 @@ class Export {
 
     // XXX: This may need to be moved to a print-specific class
     static $paper_sizes = array(
-        /* trans */ 'Letter',
-        /* trans */ 'Legal',
+        /* @trans */ 'Letter',
+        /* @trans */ 'Legal',
         'A4',
         'A3',
     );
diff --git a/include/class.filter.php b/include/class.filter.php
index 2298755871ac0f068d5a9547a28123e54ffa456c..d30a6c68b9186a9e5a7ca9b7cb56346ad286b7b2 100644
--- a/include/class.filter.php
+++ b/include/class.filter.php
@@ -20,16 +20,16 @@ class Filter {
     var $ht;
 
     static $match_types = array(
-        /* trans */ 'User Information' => array(
-            array('name'      =>    /* trans */ 'Name',
-                'email'     =>      /* trans */ 'Email',
+        /* @trans */ 'User Information' => array(
+            array('name'      =>    /* @trans */ 'Name',
+                'email'     =>      /* @trans */ 'Email',
             ),
             900
         ),
-        /* trans */ 'Email Meta-Data' => array(
-            array('reply-to'  =>    /* trans */ 'Reply-To Email',
-                'reply-to-name' =>  /* trans */ 'Reply-To Name',
-                'addressee' =>      /* trans */ 'Addressee (To and Cc)',
+        /* @trans */ 'Email Meta-Data' => array(
+            array('reply-to'  =>    /* @trans */ 'Reply-To Email',
+                'reply-to-name' =>  /* @trans */ 'Reply-To Name',
+                'addressee' =>      /* @trans */ 'Addressee (To and Cc)',
             ),
             200
         ),
diff --git a/include/class.forms.php b/include/class.forms.php
index f51a06fdc40950adda8eb7a63ed04f329ccf4c20..2f597eb0757008ade7abe3a7a624561db47dd420 100644
--- a/include/class.forms.php
+++ b/include/class.forms.php
@@ -131,15 +131,15 @@ class FormField {
     var $presentation_only = false;
 
     static $types = array(
-        /* trans */ 'Basic Fields' => array(
-            'text'  => array(   /* trans */ 'Short Answer', 'TextboxField'),
-            'memo' => array(    /* trans */ 'Long Answer', 'TextareaField'),
-            'thread' => array(  /* trans */ 'Thread Entry', 'ThreadEntryField', false),
-            'datetime' => array(/* trans */ 'Date and Time', 'DatetimeField'),
-            'phone' => array(   /* trans */ 'Phone Number', 'PhoneField'),
-            'bool' => array(    /* trans */ 'Checkbox', 'BooleanField'),
-            'choices' => array( /* trans */ 'Choices', 'ChoiceField'),
-            'break' => array(   /* trans */ 'Section Break', 'SectionBreakField'),
+        /* @trans */ 'Basic Fields' => array(
+            'text'  => array(   /* @trans */ 'Short Answer', 'TextboxField'),
+            'memo' => array(    /* @trans */ 'Long Answer', 'TextareaField'),
+            'thread' => array(  /* @trans */ 'Thread Entry', 'ThreadEntryField', false),
+            'datetime' => array(/* @trans */ 'Date and Time', 'DatetimeField'),
+            'phone' => array(   /* @trans */ 'Phone Number', 'PhoneField'),
+            'bool' => array(    /* @trans */ 'Checkbox', 'BooleanField'),
+            'choices' => array( /* @trans */ 'Choices', 'ChoiceField'),
+            'break' => array(   /* @trans */ 'Section Break', 'SectionBreakField'),
         ),
     );
     static $more_types = array();
@@ -1017,7 +1017,7 @@ class PriorityField extends ChoiceField {
         );
     }
 }
-FormField::addFieldTypes(/*trans*/ 'Dynamic Fields', function() {
+FormField::addFieldTypes(/*@trans*/ 'Dynamic Fields', function() {
     return array(
         'priority' => array(__('Priority Level'), PriorityField),
     );
@@ -1028,27 +1028,27 @@ class TicketStateField extends ChoiceField {
 
     static $_states = array(
             'open' => array(
-                'name' => /* trans */ 'Open',
-                'verb' => /* trans */ 'Open'
+                'name' => /* @trans, @context "ticket state name" */ 'Open',
+                'verb' => /* @trans, @context "ticket state action" */ 'Open'
                 ),
             'resolved' => array(
-                'name' => /* trans */ 'Resolved',
-                'verb' => /* trans */ 'Resolve'
+                'name' => /* @trans, @context "ticket state name" */ 'Resolved',
+                'verb' => /* @trans, @context "ticket state action" */ 'Resolve'
                 ),
             'closed' => array(
-                'name' => /* trans */ 'Closed',
-                'verb' => /* trans */ 'Close'
+                'name' => /* @trans, @context "ticket state name" */ 'Closed',
+                'verb' => /* @trans, @context "ticket state action" */ 'Close'
                 )
             );
     // Private states
     static $_privatestates = array(
             'archived' => array(
-                'name' => /* trans */ 'Archived',
-                'verb' => /* trans */ 'Archive'
+                'name' => /* @trans, @context "ticket state name" */ 'Archived',
+                'verb' => /* @trans, @context "ticket state action" */ 'Archive'
                 ),
             'deleted'  => array(
-                'name' => /* trans */ 'Deleted',
-                'verb' => /* trans */ 'Delete'
+                'name' => /* @trans, @context "ticket state name" */ 'Deleted',
+                'verb' => /* @trans, @context "ticket state action" */ 'Delete'
                 )
             );
 
@@ -1066,7 +1066,7 @@ class TicketStateField extends ChoiceField {
         if (!isset($_choices)) {
             // Translate and cache the choices
             foreach (static::$_states as $k => $v)
-                $_choices[$k] =  __($v['name']);
+                $_choices[$k] =  _P('ticket state name', $v['name']);
 
             $this->ht['default'] =  '';
         }
@@ -1080,10 +1080,10 @@ class TicketStateField extends ChoiceField {
             $state = key($state);
 
         if (isset(static::$_states[$state]))
-            return __(static::$_states[$state]['name']);
+            return _P('ticket state name', static::$_states[$state]['name']);
 
         if (isset(static::$_privatestates[$state]))
-            return __(static::$_privatestates[$state]['name']);
+            return _P('ticket state name', static::$_privatestates[$state]['name']);
 
         return $state;
     }
@@ -1101,10 +1101,10 @@ class TicketStateField extends ChoiceField {
     static function getVerb($state) {
 
         if (isset(static::$_states[$state]))
-            return __(static::$_states[$state]['verb']);
+            return _P('ticket state action', static::$_states[$state]['verb']);
 
         if (isset(static::$_privatestates[$state]))
-            return __(static::$_privatestates[$state]['verb']);
+            return _P('ticket state action', static::$_privatestates[$state]['verb']);
     }
 }
 FormField::addFieldTypes('Dynamic Fields', function() {
@@ -1273,7 +1273,7 @@ class PhoneNumberWidget extends Widget {
         echo Format::htmlchars($phone); ?>"/><?php
         // Allow display of extension field even if disabled if the phone
         // number being edited has an extension
-        if ($ext || $config['ext']) { ?> Ext:
+        if ($ext || $config['ext']) { ?> <?php echo __('Ext'); ?>:
             <input type="text" name="<?php
             echo $this->name; ?>-ext" value="<?php echo Format::htmlchars($ext);
                 ?>" size="5"/>
diff --git a/include/class.list.php b/include/class.list.php
index 86a428c222c1069aa24ef09a781e529e6e0a965d..3decd37f97c2efe00d63100963496d184d30265b 100644
--- a/include/class.list.php
+++ b/include/class.list.php
@@ -433,7 +433,7 @@ class DynamicList extends VerySimpleModel implements CustomList {
     }
 
 }
-FormField::addFieldTypes(/* trans */ 'Custom Lists', array('DynamicList', 'getSelections'));
+FormField::addFieldTypes(/* @trans */ 'Custom Lists', array('DynamicList', 'getSelections'));
 
 /**
  * Represents a single item in a dynamic list
diff --git a/include/class.note.php b/include/class.note.php
index 5443c8b37ddee1d4c971e1c0d21c353ee4375375..d16112d4ee2926b8a01b1d94cfd6d49e23a229c7 100644
--- a/include/class.note.php
+++ b/include/class.note.php
@@ -27,8 +27,8 @@ class QuickNoteModel extends VerySimpleModel {
 class QuickNote extends QuickNoteModel {
 
     static $types = array(
-        'U' => /* trans */ 'User',
-        'O' => /* trans */ 'Organization',
+        'U' => /* @trans */ 'User',
+        'O' => /* @trans */ 'Organization',
     );
     var $_staff;
 
diff --git a/include/class.organization.php b/include/class.organization.php
index ae6f88784bd440d7c9e6dfa7ff103e74d0539f5e..10bd20294016509877c4e828fc5f9332aa729f79 100644
--- a/include/class.organization.php
+++ b/include/class.organization.php
@@ -433,7 +433,7 @@ class OrganizationForm extends DynamicForm {
     }
 
 }
-Filter::addSupportedMatches(/*trans*/ 'Organization Data', function() {
+Filter::addSupportedMatches(/*@trans*/ 'Organization Data', function() {
     $matches = array();
     foreach (OrganizationForm::getInstance()->getFields() as $f) {
         if (!$f->hasData())
diff --git a/include/class.staff.php b/include/class.staff.php
index fa776422d3145a2aa74b5b55a9a0fb99dc04c950..da2473c0e75d45d05d9d6cf52e05f16c602f3164 100644
--- a/include/class.staff.php
+++ b/include/class.staff.php
@@ -671,7 +671,7 @@ class Staff extends AuthenticatedUser {
         $token = Misc::randCode(48); // 290-bits
 
         if (!$content)
-            return new Error(/* trans */ 'Unable to retrieve password reset email template');
+            return new Error(/* @trans */ 'Unable to retrieve password reset email template');
 
         $vars = array(
             'url' => $ost->getConfig()->getBaseUrl(),
diff --git a/include/class.template.php b/include/class.template.php
index 28b6c9d0e800bdf12a74aa1468a23b4d4c0c24f2..d8e2b8a5d61af30a15e9ad1347772dc417b53695 100644
--- a/include/class.template.php
+++ b/include/class.template.php
@@ -22,63 +22,63 @@ class EmailTemplateGroup {
     var $ht;
     var $_templates;
     static $all_groups = array(
-        'sys' => /* trans */ 'System Management Templates',
-        'ticket.user' => /* trans */ 'End-User Email Templates',
-        'ticket.staff' => /* trans */ 'Agent Email Templates',
+        'sys' => /* @trans */ 'System Management Templates',
+        'ticket.user' => /* @trans */ 'End-User Email Templates',
+        'ticket.staff' => /* @trans */ 'Agent Email Templates',
     );
     static $all_names=array(
         'ticket.autoresp'=>array(
             'group'=>'ticket.user',
-            'name'=>/* trans */ 'New Ticket Auto-response',
-            'desc'=>/* trans */ 'Autoresponse sent to user, if enabled, on new ticket.'),
+            'name'=>/* @trans */ 'New Ticket Auto-response',
+            'desc'=>/* @trans */ 'Autoresponse sent to user, if enabled, on new ticket.'),
         'ticket.autoreply'=>array(
             'group'=>'ticket.user',
-            'name'=>/* trans */ 'New Ticket Auto-reply',
-            'desc'=>/* trans */ 'Canned Auto-reply sent to user on new ticket, based on filter matches. Overwrites "normal" auto-response.'),
+            'name'=>/* @trans */ 'New Ticket Auto-reply',
+            'desc'=>/* @trans */ 'Canned Auto-reply sent to user on new ticket, based on filter matches. Overwrites "normal" auto-response.'),
         'message.autoresp'=>array(
             'group'=>'ticket.user',
-            'name'=>/* trans */ 'New Message Auto-response',
-            'desc'=>/* trans */ 'Confirmation sent to user when a new message is appended to an existing ticket.'),
+            'name'=>/* @trans */ 'New Message Auto-response',
+            'desc'=>/* @trans */ 'Confirmation sent to user when a new message is appended to an existing ticket.'),
         'ticket.notice'=>array(
             'group'=>'ticket.user',
-            'name'=>/* trans */ 'New Ticket Notice',
-            'desc'=>/* trans */ 'Notice sent to user, if enabled, on new ticket created by an agent on their behalf (e.g phone calls).'),
+            'name'=>/* @trans */ 'New Ticket Notice',
+            'desc'=>/* @trans */ 'Notice sent to user, if enabled, on new ticket created by an agent on their behalf (e.g phone calls).'),
         'ticket.overlimit'=>array(
             'group'=>'ticket.user',
-            'name'=>/* trans */ 'Over Limit Notice',
-            'desc'=>/* trans */ 'A one-time notice sent, if enabled, when user has reached the maximum allowed open tickets.'),
+            'name'=>/* @trans */ 'Over Limit Notice',
+            'desc'=>/* @trans */ 'A one-time notice sent, if enabled, when user has reached the maximum allowed open tickets.'),
         'ticket.reply'=>array(
             'group'=>'ticket.user',
-            'name'=>/* trans */ 'Response/Reply Template',
-            'desc'=>/* trans */ 'Template used on ticket response/reply'),
+            'name'=>/* @trans */ 'Response/Reply Template',
+            'desc'=>/* @trans */ 'Template used on ticket response/reply'),
         'ticket.activity.notice'=>array(
             'group'=>'ticket.user',
-            'name'=>/* trans */ 'New Activity Notice',
-            'desc'=>/* trans */ 'Template used to notify collaborators on ticket activity (e.g CC on reply)'),
+            'name'=>/* @trans */ 'New Activity Notice',
+            'desc'=>/* @trans */ 'Template used to notify collaborators on ticket activity (e.g CC on reply)'),
         'ticket.alert'=>array(
             'group'=>'ticket.staff',
-            'name'=>/* trans */ 'New Ticket Alert',
-            'desc'=>/* trans */ 'Alert sent to agents, if enabled, on new ticket.'),
+            'name'=>/* @trans */ 'New Ticket Alert',
+            'desc'=>/* @trans */ 'Alert sent to agents, if enabled, on new ticket.'),
         'message.alert'=>array(
             'group'=>'ticket.staff',
-            'name'=>/* trans */ 'New Message Alert',
-            'desc'=>/* trans */ 'Alert sent to agents, if enabled, when user replies to an existing ticket.'),
+            'name'=>/* @trans */ 'New Message Alert',
+            'desc'=>/* @trans */ 'Alert sent to agents, if enabled, when user replies to an existing ticket.'),
         'note.alert'=>array(
             'group'=>'ticket.staff',
-            'name'=>/* trans */ 'Internal Note Alert',
-            'desc'=>/* trans */ 'Alert sent to selected agents, if enabled, on new internal note.'),
+            'name'=>/* @trans */ 'Internal Note Alert',
+            'desc'=>/* @trans */ 'Alert sent to selected agents, if enabled, on new internal note.'),
         'assigned.alert'=>array(
             'group'=>'ticket.staff',
-            'name'=>/* trans */ 'Ticket Assignment Alert',
-            'desc'=>/* trans */ 'Alert sent to agents on ticket assignment.'),
+            'name'=>/* @trans */ 'Ticket Assignment Alert',
+            'desc'=>/* @trans */ 'Alert sent to agents on ticket assignment.'),
         'transfer.alert'=>array(
             'group'=>'ticket.staff',
-            'name'=>/* trans */ 'Ticket Transfer Alert',
-            'desc'=>/* trans */ 'Alert sent to agents on ticket transfer.'),
+            'name'=>/* @trans */ 'Ticket Transfer Alert',
+            'desc'=>/* @trans */ 'Alert sent to agents on ticket transfer.'),
         'ticket.overdue'=>array(
             'group'=>'ticket.staff',
-            'name'=>/* trans */ 'Overdue Ticket Alert',
-            'desc'=>/* trans */ 'Alert sent to agents on stale or overdue tickets.'),
+            'name'=>/* @trans */ 'Overdue Ticket Alert',
+            'desc'=>/* @trans */ 'Alert sent to agents on stale or overdue tickets.'),
         );
 
     function EmailTemplateGroup($id){
diff --git a/include/class.ticket.php b/include/class.ticket.php
index daa241d914ec7b70181d365ca2b5b7a87903b6fa..acded0c81c769d753360626775c0d797e9653982 100644
--- a/include/class.ticket.php
+++ b/include/class.ticket.php
@@ -56,8 +56,8 @@ class Ticket {
 
     // Status -- listed here until we have a formal status class
     static $STATUSES = array(
-        /* trans */ 'open',
-        /* trans */ 'closed',
+        /* @trans */ 'open',
+        /* @trans */ 'closed',
     );
 
     function Ticket($id) {
diff --git a/include/class.topic.php b/include/class.topic.php
index f05f41ce1258c5df56f5598c743fbebf40f322b0..1dd6d0b48f67a6fa9bb3e2c5bbf30e463337990f 100644
--- a/include/class.topic.php
+++ b/include/class.topic.php
@@ -433,4 +433,4 @@ class Topic {
 }
 
 // Add fields from the standard ticket form to the ticket filterable fields
-Filter::addSupportedMatches(/* trans */ 'Help Topic', array('topicId' => 'Topic ID'), 100);
+Filter::addSupportedMatches(/* @trans */ 'Help Topic', array('topicId' => 'Topic ID'), 100);
diff --git a/include/class.user.php b/include/class.user.php
index 8130551a96b1fb7ceda79bc9c2ebf1607b7caf6c..c7c668caf98f5c4b1533b8bdcdc4293d91535d9d 100644
--- a/include/class.user.php
+++ b/include/class.user.php
@@ -586,16 +586,16 @@ class PersonsName {
     var $name;
 
     static $formats = array(
-        'first' => array(     /*trans*/ "First", 'getFirst'),
-        'last' => array(      /*trans*/ "Last", 'getLast'),
-        'full' => array(      /*trans*/ "First Last", 'getFull'),
-        'legal' => array(     /*trans*/ "First M. Last", 'getLegal'),
-        'lastfirst' => array( /*trans*/ "Last, First", 'getLastFirst'),
-        'formal' => array(    /*trans*/ "Mr. Last", 'getFormal'),
-        'short' => array(     /*trans*/ "First L.", 'getShort'),
-        'shortformal' => array(/*trans*/ "F. Last", 'getShortFormal'),
-        'complete' => array(  /*trans*/ "Mr. First M. Last Sr.", 'getComplete'),
-        'original' => array(  /*trans*/ '-- As Entered --', 'getOriginal'),
+        'first' => array(     /*@trans*/ "First", 'getFirst'),
+        'last' => array(      /*@trans*/ "Last", 'getLast'),
+        'full' => array(      /*@trans*/ "First Last", 'getFull'),
+        'legal' => array(     /*@trans*/ "First M. Last", 'getLegal'),
+        'lastfirst' => array( /*@trans*/ "Last, First", 'getLastFirst'),
+        'formal' => array(    /*@trans*/ "Mr. Last", 'getFormal'),
+        'short' => array(     /*@trans*/ "First L.", 'getShort'),
+        'shortformal' => array(/*@trans*/ "F. Last", 'getShortFormal'),
+        'complete' => array(  /*@trans*/ "Mr. First M. Last Sr.", 'getComplete'),
+        'original' => array(  /*@trans*/ '-- As Entered --', 'getOriginal'),
     );
 
     function __construct($name, $format=null) {
diff --git a/include/client/view.inc.php b/include/client/view.inc.php
index 60d94cbc784dccedfe5e3f5bf72b72bff0790470..8e547913a10b73e7efac108fd81d141365f17858 100644
--- a/include/client/view.inc.php
+++ b/include/client/view.inc.php
@@ -16,7 +16,7 @@ if ($thisclient && $thisclient->isGuest()
     <strong><?php echo __('Looking for your other tickets?'); ?></strong></br>
     <a href="<?php echo ROOT_PATH; ?>login.php?e=<?php
         echo urlencode($thisclient->getEmail());
-    ?>" style="text-decoration:underline"><?php echo __('Sign In'); ?></a> or
+    ?>" style="text-decoration:underline"><?php echo __('Sign In'); ?></a>
     <?php echo sprintf(__('or %s register for an account %s for the best experience on our help desk.'),
         '<a href="account.php?do=create" style="text-decoration:underline">','</a>'); ?>
     </div>
diff --git a/include/i18n/en_US/help/tips/knowledgebase.canned_response.yaml b/include/i18n/en_US/help/tips/knowledgebase.canned_response.yaml
index 67a39c729c6ea90e557557a1964cd429b999fc90..0779b10feb14d235a128d2e4f9b36388600fb332 100644
--- a/include/i18n/en_US/help/tips/knowledgebase.canned_response.yaml
+++ b/include/i18n/en_US/help/tips/knowledgebase.canned_response.yaml
@@ -16,34 +16,14 @@
 canned_response:
     title: Canned Response
     content: >
-        Create a <span class="doc-desc-title">Canned Response</span> that can 
-        be included in a ticket response. In fact, you may include as many 
-        <span class="doc-desc-title">Canned Responses</span> as you would like
-        in a ticket response. It can also be included in the <span 
-        class="doc-desc-title">Ticket Auto-Response</span> setup by a <span 
+        Create a <span class="doc-desc-title">Canned Response</span> that can
+        be included in a ticket response. It can also be used as a <span
+        class="doc-desc-title">Ticket Auto-Response</span> setup by a <span
         class="doc-desc-title">Ticket Filter</span>.
     links:
       - title: Setup a Ticket Filter
         href: /scp/filters.php
 
-canned_response_settings:
-    title: Canned Response Settings
-    content: >
-
-status:
-    title: Status
-    content: >
-        Disable your new <span class="doc-desc-title">Canned Response</span>
-        if you do not want it to be available to Agents immediately upon creation.
-        
-department:
-    title: Department
-    content: >
-
-title:
-    title: Title
-    content: >
-
 canned_attachments:
     title: Canned Attachments
     content: >
diff --git a/include/i18n/en_US/help/tips/knowledgebase.category.yaml b/include/i18n/en_US/help/tips/knowledgebase.category.yaml
index 1f22329bb4e20981e2ff94782093083283e03382..a1bbcbcee752f0cee08108a6f00463c9aefdd365 100644
--- a/include/i18n/en_US/help/tips/knowledgebase.category.yaml
+++ b/include/i18n/en_US/help/tips/knowledgebase.category.yaml
@@ -13,22 +13,3 @@
 # must match the HTML #ids put into the page template.
 #
 ---
-category_information:
-    title: Category Information
-    content: >
-        Once you have created categories, you can select the category that the FAQ
-        pertains to then select “Add New FAQ”.  Type in the Question that will be
-        visible, if the FAQ will be Public or Internal and type the Answer in the
-        text box. You can also attach a file to the FAQ.
-
-category_type:
-    title: Category Type
-    content: >
-
-category_name:
-    title: Category Name
-    content: >
-
-category_description:
-    title: Category Description
-    content: >
diff --git a/include/i18n/en_US/help/tips/settings.ticket.yaml b/include/i18n/en_US/help/tips/settings.ticket.yaml
index 1e8afefc890578beae8c3cd91037145f1072215f..5baf7e720592be83eacd5256d1b9234b53f4c9de 100644
--- a/include/i18n/en_US/help/tips/settings.ticket.yaml
+++ b/include/i18n/en_US/help/tips/settings.ticket.yaml
@@ -32,6 +32,16 @@ sequence_id:
         in the <span class="doc-desc-title">Ticket Number
         Format</span> configuration for help topics.
 
+default_ticket_status:
+    title: Default Status for new Tickets
+    content: >
+        Choose a status as the default for new tickets. This can be defined
+        for each help topic, if desired. It can also be overridden by a
+        ticket filter.
+    links:
+      - title: Manage Ticket Statuses
+        href: /scp/lists.php?type=ticket-status
+
 default_sla:
     title: Default SLA
     content: >
diff --git a/include/staff/cannedresponse.inc.php b/include/staff/cannedresponse.inc.php
index f2842292d7ebf53ce0c938a14a707b6f9eb61012..e3cb5f84d6f82255845df47fcba1096aa43c31e8 100644
--- a/include/staff/cannedresponse.inc.php
+++ b/include/staff/cannedresponse.inc.php
@@ -48,7 +48,6 @@ $info=Format::htmlchars(($errors && $_POST)?$_POST:$info);
                 <label><input type="radio" name="isenabled" value="0" <?php
                         echo !$info['isenabled']?'checked="checked"':''; ?>>&nbsp;<?php echo __('Disabled'); ?>&nbsp;</label>
                 &nbsp;<span class="error">*&nbsp;<?php echo $errors['isenabled']; ?></span>
-                &nbsp;<i class="help-tip icon-question-sign" href="#status"></i>
             </td>
         </tr>
         <tr>
diff --git a/include/staff/cannedresponses.inc.php b/include/staff/cannedresponses.inc.php
index 1da21b8b00170ca029cf830bb4453a54b23b5c0b..70645010559a65e2aadf5469715945d6498b63c3 100644
--- a/include/staff/cannedresponses.inc.php
+++ b/include/staff/cannedresponses.inc.php
@@ -49,8 +49,7 @@ else
 
 ?>
 <div class="pull-left" style="width:700px;padding-top:5px;">
- <h2><?php echo __('Canned Responses');?>
- &nbsp;<i class="help-tip icon-question-sign" href="#canned_responses"></i></h2>
+ <h2><?php echo __('Canned Responses');?></h2>
  </div>
 <div class="pull-right flush-right" style="padding-top:5px;padding-right:5px;">
     <b><a href="canned.php?a=add" class="Icon newReply"><?php echo __('Add New Response');?></a></b></div>
diff --git a/include/staff/categories.inc.php b/include/staff/categories.inc.php
index efdd593baa4d960727c2eb81a0574132d9338bd6..a948f4976ca123a275e5c3dc0b663db2788e55d7 100644
--- a/include/staff/categories.inc.php
+++ b/include/staff/categories.inc.php
@@ -41,8 +41,7 @@ else
 
 ?>
 <div class="pull-left" style="width:700px;padding-top:5px;">
- <h2><?php echo __('FAQ Categories');?>
- &nbsp;<i class="help-tip icon-question-sign" href="#faq_categories"></i></h2>
+ <h2><?php echo __('FAQ Categories');?></h2>
  </div>
 <div class="pull-right flush-right" style="padding-top:5px;padding-right:5px;">
     <b><a href="categories.php?a=add" class="Icon newCategory"><?php echo __('Add New Category');?></a></b></div>
diff --git a/include/staff/directory.inc.php b/include/staff/directory.inc.php
index 7f27db017afa14d76fa341695f22d3108f9913b8..6d127962a2f9d30a9b5ed655333f170cac453ce9 100644
--- a/include/staff/directory.inc.php
+++ b/include/staff/directory.inc.php
@@ -101,7 +101,7 @@ else
             <th width="150"><a  <?php echo $dept_sort; ?>href="directory.php?<?php echo $qstr; ?>&sort=dept"><?php echo __('Department');?></a></th>
             <th width="180"><a  <?php echo $email_sort; ?>href="directory.php?<?php echo $qstr; ?>&sort=email"><?php echo __('Email Address');?></a></th>
             <th width="120"><a <?php echo $phone_sort; ?> href="directory.php?<?php echo $qstr; ?>&sort=phone"><?php echo __('Phone Number');?></a></th>
-            <th width="80"><a <?php echo $ext_sort; ?> href="directory.php?<?php echo $qstr; ?>&sort=ext"><?php echo __('Phone Ext');?></a></th>
+            <th width="80"><a <?php echo $ext_sort; ?> href="directory.php?<?php echo $qstr; ?>&sort=ext"><?php echo __(/* As in a phone number `extension` */ 'Extension');?></a></th>
             <th width="120"><a <?php echo $mobile_sort; ?> href="directory.php?<?php echo $qstr; ?>&sort=mobile"><?php echo __('Mobile Number');?></a></th>
         </tr>
     </thead>
diff --git a/include/staff/faq-categories.inc.php b/include/staff/faq-categories.inc.php
index 7ccfc7720c8a4977a710b6ee7e15b924159a6dd3..9d9efa32ba994d56730d3b49f8fa62e343455fdb 100644
--- a/include/staff/faq-categories.inc.php
+++ b/include/staff/faq-categories.inc.php
@@ -2,8 +2,7 @@
 if(!defined('OSTSTAFFINC') || !$thisstaff) die('Access Denied');
 
 ?>
-<h2><?php echo __('Frequently Asked Questions');?>
-&nbsp;<i class="help-tip icon-question-sign" href="#page_header"></i></h2>
+<h2><?php echo __('Frequently Asked Questions');?></h2>
 <form id="kbSearch" action="kb.php" method="get">
     <input type="hidden" name="a" value="search">
     <div>
diff --git a/include/staff/helptopic.inc.php b/include/staff/helptopic.inc.php
index e544218b57051341f280556fd38a28a4f90987f8..3674b6a10f2c4a063cfb050a501daeb91c269836 100644
--- a/include/staff/helptopic.inc.php
+++ b/include/staff/helptopic.inc.php
@@ -32,7 +32,7 @@ $info=Format::htmlchars(($errors && $_POST)?$_POST:$info);
         <tr>
             <th colspan="2">
                 <h4><?php echo $title; ?></h4>
-                <em><?php echo __('Help Topic Information');?></em>
+                <em><?php echo __('Help Topic Information');?>
                 &nbsp;<i class="help-tip icon-question-sign" href="#help_topic_information"></i></em>
             </th>
         </tr>
diff --git a/include/staff/orgs.inc.php b/include/staff/orgs.inc.php
index 7f81447f6f173f528a6f91892bf008af879bb067..862da34be7722441fb1b6f1c447edf3ec8b0d868 100644
--- a/include/staff/orgs.inc.php
+++ b/include/staff/orgs.inc.php
@@ -79,7 +79,7 @@ $_SESSION['orgs_qs_'.$qhash] = $query;
             <tr>
                 <td><input type="text" id="basic-org-search" name="query" size=30 value="<?php echo Format::htmlchars($_REQUEST['query']); ?>"
                 autocomplete="off" autocorrect="off" autocapitalize="off"></td>
-                <td><input type="submit" name="basic_search" class="button" value="Search"></td>
+                <td><input type="submit" name="basic_search" class="button" value="<?php echo __('Search'); ?>"></td>
                 <!-- <td>&nbsp;&nbsp;<a href="" id="advanced-user-search">[advanced]</a></td> -->
             </tr>
         </table>
diff --git a/include/staff/settings-system.inc.php b/include/staff/settings-system.inc.php
index bb99bc5cc5865e8ad2bcd782615c29ee9bb2ecee..30efbb4c5d084cbd44c5f4a48b915bf39e6afb11 100644
--- a/include/staff/settings-system.inc.php
+++ b/include/staff/settings-system.inc.php
@@ -114,7 +114,7 @@ $gmtime = Misc::gmtime();
     list($desc, $func) = $f;
     $selected = ($config['name_format'] == $n) ? 'selected="selected"' : ''; ?>
                     <option value="<?php echo $n; ?>" <?php echo $selected;
-                        ?>><?php echo $desc; ?></option>
+                        ?>><?php echo __($desc); ?></option>
 <?php } ?>
                 </select>
                 <i class="help-tip icon-question-sign" href="#default_name_formatting"></i>
diff --git a/include/staff/settings-tickets.inc.php b/include/staff/settings-tickets.inc.php
index b8526ed0c5a03c2cab1b2ed0c82f39af25601c15..9f4b306735d14061a8dc1cfde5848a3da98047fa 100644
--- a/include/staff/settings-tickets.inc.php
+++ b/include/staff/settings-tickets.inc.php
@@ -49,7 +49,7 @@ if(!($maxfileuploads=ini_get('max_file_uploads')))
                 <button class="action-button" onclick="javascript:
                 $.dialog('ajax.php/sequence/manage', 205);
                 return false;
-                "><i class="icon-gear"></i> Manage</button>
+                "><i class="icon-gear"></i> <?php echo __('Manage'); ?></button>
                 <i class="help-tip icon-question-sign" href="#sequence_id"></i>
             </td>
         </tr>
diff --git a/include/staff/ticket-open.inc.php b/include/staff/ticket-open.inc.php
index 63da455a8bf70b9f52b914e3bda8e9b80517c6e5..6a9b533ade9ccb692f05f24127d4e7f5fef78529 100644
--- a/include/staff/ticket-open.inc.php
+++ b/include/staff/ticket-open.inc.php
@@ -299,7 +299,7 @@ if ($_POST)
                     data-signature="<?php
                         echo Format::htmlchars(Format::viewableImages($signature)); ?>"
                     data-signature-field="signature" data-dept-field="deptId"
-                    placeholder="Intial response for the ticket"
+                    placeholder="<?php echo __('Initial response for the ticket'); ?>"
                     name="response" id="response" cols="21" rows="8"
                     style="width:80%;"><?php echo $info['response']; ?></textarea>
                 <table border="0" cellspacing="0" cellpadding="2" width="100%">
diff --git a/scp/js/tips.js b/scp/js/tips.js
index 4c1c6ce2834d7fb0896722329a4ca0f5d67aa2ed..4d623eb165224df19caf4fb06a51593d0f907540 100644
--- a/scp/js/tips.js
+++ b/scp/js/tips.js
@@ -129,6 +129,8 @@ jQuery(function() {
                 clearTimeout(tip_timer);
                 return;
             }
+            if (!section)
+                return;
             tip_content.append(
                 $('<h1>')
                     .append('<i class="icon-info-sign faded"> ')
diff --git a/scp/lists.php b/scp/lists.php
index b3c424de7e15af1ecd0bbfe7428b57c013776330..5247a0643c36e1aed9c9b8b73c6ff75661aa0dff 100644
--- a/scp/lists.php
+++ b/scp/lists.php
@@ -4,8 +4,14 @@ require_once(INCLUDE_DIR.'class.list.php');
 
 
 $list=null;
-if ($_REQUEST['id']) {
-    $list = DynamicList::lookup($_REQUEST['id']);
+$criteria=array();
+if ($_REQUEST['id'])
+    $criteria['id'] = $_REQUEST['id'];
+elseif ($_REQUEST['type'])
+    $criteria['type'] = $_REQUEST['type'];
+
+if ($criteria) {
+    $list = DynamicList::lookup($criteria);
 
     if ($list)
          $form = $list->getForm();
diff --git a/setup/cli/modules/i18n.php b/setup/cli/modules/i18n.php
index c520483f7c1941c33cc88cd89232b9f6d1a92fe2..04baeb734de75ea0e8e6a61dca17dec86f61fc68 100644
--- a/setup/cli/modules/i18n.php
+++ b/setup/cli/modules/i18n.php
@@ -406,13 +406,29 @@ class i18n_Compiler extends Module {
                 break;
             case T_COMMENT:
             case T_DOC_COMMENT:
-                if (preg_match('`\*\s*trans\s*\*`', $T[1])) {
+                $translate = false;
+                $hints = array();
+                if (preg_match('`^/\*+\s*@(\w+)`m', $T[1])) {
+                    foreach (preg_split('`,\s*`m', $T[1]) as $command) {
+                        $command = trim($command, " \n\r\t\"*/\\");
+                        @list($command, $args) = explode(' ', $command, 2);
+                        switch ($command) {
+                        case '@context':
+                            $hints['context'] = trim($args, " \"*\n\t\r");
+                        case '@trans':
+                            $translate = true;
+                        default:
+                            continue;
+                        }
+                    }
+                }
+                if ($translate) {
                     // Find the next textual token
                     list($S, $T) = $this->__read_next_string($tokens);
-                    $string = array('forms'=>array($S['form']), 'line'=>$S['line']);
+                    $string = array('forms'=>array($S['form']), 'line'=>$S['line'])
+                        + $hints;
                     if (isset($S['comments']))
-                        $string['comments'] = array_merge(
-                            @$string['comments'] ?: array(), $S['comments']);
+                        $string['comments'] = $S['comments'];
                     $T_funcs[] = $string;
                 }
                 break;
diff --git a/setup/doc/i18n.md b/setup/doc/i18n.md
index 21048966730715a1ac8270920376b7e6023a958d..92409a0ded3d22ccd9c03050bb2d72e71c373a53 100644
--- a/setup/doc/i18n.md
+++ b/setup/doc/i18n.md
@@ -65,7 +65,7 @@ set something like this up:
 
 ```php
     class A {
-        static $name = /* trans */ 'Localized string';
+        static $name = /* @trans */ 'Localized string';
     }
 
     print __(A::$name);
@@ -74,8 +74,8 @@ set something like this up:
 In this case the localized version of the class variable is translated when
 it is used — not when it is defined.
 
-The `* trans *` text in comment is significant. Both the asterisks and the
-term `trans` are used to signify that the phrase should be made
+The `* @trans *` text in comment is significant. Both the asterisks and the
+term `@trans` are used to signify that the phrase should be made
 translatable. The comment must also be placed immedately before or after the
 string without any other PHP symbols in between (like the semi-colon).