diff --git a/include/ajax.tips.php b/include/ajax.tips.php
index 2b6fdab3d340347e8aee4160b15782876838ea30..3b2a1d19a565fe7d812df9920857c9589c89f6b5 100644
--- a/include/ajax.tips.php
+++ b/include/ajax.tips.php
@@ -21,12 +21,24 @@ require_once(INCLUDE_DIR.'class.i18n.php');
 
 class HelpTipAjaxAPI extends AjaxController {
     function getTipsJson($namespace, $lang='en_US') {
+        global $ost;
+
         $i18n = new Internationalization($lang);
         $tips = $i18n->getTemplate("help/tips/$namespace.yaml");
 
         if (!$tips || !($data = $tips->getData()))
             Http::response(404, 'Help content not available');
 
+        // Translate links to the root path of this installation
+        foreach ($data as $tip=>&$info) {
+            $info = $ost->replaceTemplateVariables($info, array(
+                'config'=>$ost->getConfig()));
+            if (isset($info['links']))
+                foreach ($info['links'] as &$l)
+                    if ($l['href'][0] == '/')
+                        $l['href'] = ROOT_PATH.substr($l['href'],1);
+        }
+
         return $this->json_encode($data);
     }
 
diff --git a/include/class.config.php b/include/class.config.php
index ed98ec0e439594066699dd18533fa77140c61970..1df9cc4db13e331129102e8941e675e93c3db79a 100644
--- a/include/class.config.php
+++ b/include/class.config.php
@@ -733,6 +733,10 @@ class OsticketConfig extends Config {
         return $this->get('upload_dir');
     }
 
+    function getVar($name) {
+        return $this->get($name);
+    }
+
     function updateSettings($vars, &$errors) {
 
         if(!$vars || $errors)
diff --git a/include/i18n/en_US/help/tips/settings.alerts.yaml b/include/i18n/en_US/help/tips/settings.alerts.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..19fb979c9b472557ec09a9a3b51920afe422be4b
--- /dev/null
+++ b/include/i18n/en_US/help/tips/settings.alerts.yaml
@@ -0,0 +1,71 @@
+#
+# This is popup help messages for the Admin Panel -> Settings -> System page
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+#   title - Link title
+#   href - href of link (links starting with / are translated to the
+#       helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+new_ticket:
+    title: New Ticket Alert
+    content: >
+        Alert sent out to staff members when new tickets are created in the
+        system.
+    links:
+      - title: Default New Ticket Alert Template
+        href: /scp/templates.php?default_for=ticket.alert
+
+new_message:
+    title: New Message Alert
+    content: >
+        Alert sent out when a new message, from the user, is appended to an
+        existing ticket
+    links:
+      - title: Default New Message Alert Template
+        href: /scp/templates.php?default_for=message.alert
+
+new_activity:
+    title: New Internal Note Alert
+    content: >
+        Alert sent out when a new internal note is posted
+    links:
+      - title: Default Ticket Activity Template
+        href: /scp/templates.php?default_for=note.alert
+
+assign_alert:
+    title: Alert on Assignment
+    content: >
+        Alert sent out to staff on ticket assignment
+    links:
+      - title: Default Ticket Assignment Alert Template
+        href: /scp/templates.php?default_for=assigned.alert
+
+transfer_alert:
+    title: Alert on Transfer
+    content: >
+        Alert sent out to staff of the target department on ticket transfer
+    links:
+      - title: Default Ticket Transfer Alert Template
+        href: /scp/templates.php?default_for=transfer.alert
+
+stale_alert:
+    title: Alert on Stale Ticket
+    content: >
+        Alert sent out when a ticket becomes overdue - admin email gets an
+        alert by default
+    links:
+      - title: Default Stale Ticket Alert Template
+        href: /scp/templates.php?default_for=ticket.overdue
+
+meltdowns:
+    title: System Errors
+    content: >
+        Enabled by default. Errors are sent to system admin email
+        (%{config.admin_email})
diff --git a/include/i18n/en_US/help/tips/settings.autoresponder.yaml b/include/i18n/en_US/help/tips/settings.autoresponder.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..89f0d6faf51216be6524299bbc8fe7711cb894c1
--- /dev/null
+++ b/include/i18n/en_US/help/tips/settings.autoresponder.yaml
@@ -0,0 +1,50 @@
+#
+# This is popup help messages for the Admin Panel -> Settings -> System page
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+#   title - Link title
+#   href - href of link (links starting with / are translated to the
+#       helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+new_ticket:
+    title: New Ticket Auto-Response
+    content: >
+        Autoresponse includes the ticket ID required to check status of the
+        ticket
+    links:
+      - title: Default New Ticket Autoresponse Template
+        href: /scp/templates.php?default_for=ticket.autoresp
+
+new_staff_ticket:
+    title: New Ticket by Staff Auto-Response
+    content: >
+        Notice sent when staff creates a ticket on behalf of the user.
+        <em>Staff can override this when creating new tickets</em>
+    links:
+      - title: Default New Ticket by Staff Autoresponse Template
+        href: /scp/templates.php?default_for=ticket.notice
+
+new_message:
+    title: New Message Confirmation
+    content: >
+        Confirmation notice sent when a new message is appended to an
+        existing ticket
+    links:
+      - title: Default New Message Confirmation Template
+        href: /scp/templates.php?default_for=message.autoresp
+
+overlimit_notice:
+    title: Overlimit Notice
+    content: >
+        Ticket denied notice sent to user on limit violation. Admin gets
+        alerts on <em>ALL</em> denials by default
+    links:
+      - title: Default Overlimit Notice Template
+        href: /scp/templates.php?default_for=ticket.overlimit
diff --git a/include/i18n/en_US/help/tips/settings.email.yaml b/include/i18n/en_US/help/tips/settings.email.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..fa3ddc043919d4de30038208d9eb588097b7f39b
--- /dev/null
+++ b/include/i18n/en_US/help/tips/settings.email.yaml
@@ -0,0 +1,83 @@
+#
+# This is popup help messages for the Admin Panel -> Settings -> System page
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+#   title - Link title
+#   href - href of link (links starting with / are translated to the
+#       helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+default_templates:
+    title: Default Email Templates
+    content: >
+         Set of templates that will be utilized for Alerts &amp; Notices to
+         staff as well as Auto-Responses to clients during the actions in a
+         ticket’s life cycle. Templates can be created in Admin Panel &gt;
+         Emails &gt; Templates
+    links:
+      - title: Email Templates
+        href: /scp/templates.php
+
+default_email:
+    title: Default System Email
+    content: >
+        Set the system email address that auto-responses that clients will
+        be shown emails are from if not set by Department
+    links:
+      - title: System Email Addresses
+        href: /scp/emails.php
+
+default_alert_email:
+    title: Default Alert Email
+    content: >
+        Set the email address that Alerts &amp; Notices to staff will be
+        shown as received from if no default is set by Department (Admin
+        Panel &gt; Staff &gt; Department) or by Help Topic (Admin Panel &gt;
+        Manage &gt; Help Topic)
+    links:
+      - title: System Email Addresses
+        href: /scp/emails.php
+
+admin_email:
+    title: Administrative Contact
+    content: >
+        Set the address for the Helpdesk Administrator to receive notices of
+        the System Error Log as well as the New Ticket Alerts (if enabled at
+        Admin Panel &gt; Settings &gt; Alerts &amp; Notices &gt; New Ticket
+        Alert)
+    links:
+      - title: Alerts &amp; Notices
+        href: /scp/settings.php?t=alerts
+
+# Incoming emails section
+incoming_email:
+    title: Incoming Email Settings
+    content: >
+        Allow IMAP/POP polling once you have set up the information in
+        emails section of Admin Panel. You can also edit the reply separator
+        text.<br/><br/>
+        <em>For mail polling to work you must set an external cron job or
+        enable auto-cron polling</em>
+
+enable_email_poll:
+    title: Enable Email Polling
+    content: >
+        Allow IMAP/POP polling once you have set up the information in
+        emails section of Admin Panel. You can also edit the reply separator
+        text
+
+enable_autocron_poll:
+    title: Poll Email using Auto-cron
+    content: >
+        <em><b>Not Recommended</b></em><br/><br/>
+        Enables fetching email periodically using the automatic cron system.
+        As admin and staff members interact with the system, the system will
+        periodically run cleanup routines called the auto-cron. This setting
+        enables fetching email during this cleanup.
+
diff --git a/include/i18n/en_US/help/tips/settings.system.yaml b/include/i18n/en_US/help/tips/settings.system.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..ceb6147f8f14f4d71702c8bce5211ab235cf27bb
--- /dev/null
+++ b/include/i18n/en_US/help/tips/settings.system.yaml
@@ -0,0 +1,88 @@
+#
+# This is popup help messages for the Admin Panel -> Settings -> System page
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+# links - List of links shows below the content
+#   title - Link title
+#   href - href of link (links starting with / are translated to the
+#       helpdesk installation path)
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+helpdesk_status:
+    title: Helpdesk Status
+    content: >
+        Enables the client portal and the staff interface. If this option is
+        disabled, then only staff marked as <b>Admins</b> will be able to
+        access the helpdesk.
+
+helpdesk_url:
+    title: Helpdesk URL
+    content: >
+        This URL is the base of your osTicket installation. It is used in
+        email communication to direct end users back to your helpdesk.
+
+helpdesk_name:
+    title: Helpdesk Name
+    content: >
+        Name that will appear in the browser tab when at your client
+        interface. If your help desk page is bookmarked, this will be the
+        title/name of the site page
+
+default_dept:
+    title: Default Department
+    content: >
+        Determines the default department for tickets submitted that do not
+        have a department auto-assigned by help topic or incoming email
+    links:
+      - title: Manage Departments
+        href: /scp/departments.php
+
+page_size:
+    title: Default Page Size
+    content: >
+        This determines the number of tickets per page on the ticket view
+        (Staff Panel &gt; Tickets). This can be defined in the
+        "My Preferences" for each staff member
+
+log_level:
+    title: Default Log Level
+    content: >
+        Determines the level of issues that will be saved in the system log
+        including, excess log-ins, denied tickets, etc.
+
+log_purge:
+    title: Purge Logs
+    content: >
+        Length, in months, you would like to keep the system log activity
+        for viewing on the System Logs page.
+
+name_format:
+    title: Default Name Format
+    content: >
+        Formatting technique used to format names throughout the system.
+        Email templates will use the format for names of no other format is
+        specified in the place holder.
+
+# Authentication settings
+password_reset:
+    title: Password Expiration Policy
+    content: >
+        Sets the requirement for how often (in months) staff will be
+        required to reset their password.
+
+# Date and time options
+date_and_time:
+    title: Localized Date Formats
+    content: >
+        Set up the format for the client’s Date &amp; Time.  To set time/date
+        for staff, go to Admin Panel &gt; Staff &gt; select staff profile to edit
+    links:
+      - title: PHP date() formats
+        href: "http://php.net/date"
+      - title: Your preferences
+        href: /scp/profile.php
diff --git a/include/i18n/en_US/help/tips/staff.yaml b/include/i18n/en_US/help/tips/staff.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..fc3dc834be729058d960f68a8ecae78e329230c9
--- /dev/null
+++ b/include/i18n/en_US/help/tips/staff.yaml
@@ -0,0 +1,35 @@
+#
+# This is popup help messages for the Admin Panel -> Staff
+#
+# Fields:
+# title - Shown in bold at the top of the popover window
+# content - The body of the help popover
+#
+# The key names such as 'helpdesk_name' should not be translated as they
+# must match the HTML #ids put into the page template.
+#
+---
+signature:
+    title: Staff Signature Line
+    content: |
+        Create staff’s signature for response to tickets. This signature
+        will appear as an option at the bottom of a ticket response
+
+type:
+    title: Account Type
+    content: |
+        Admins have the privilege of accessing the Admin Panel. Staff only
+        have access to manage tickets and the knowledge base
+
+group:
+    title: Assigned Group
+    content: |
+        Group membership defines the staff’s role in the system. Visit the
+        group management page to define what access this staff has to the
+        help desk
+
+notes:
+    title: Internal Notes
+    content: |
+        Place internal notes regarding staff; notes are only visible to
+        staff whose account type is Admin
diff --git a/include/staff/settings-alerts.inc.php b/include/staff/settings-alerts.inc.php
index cc91ffdf804fce3dad988a6e11139a1b259d60c8..0ab5cb689367ca713400a67af17613d261eec4b8 100644
--- a/include/staff/settings-alerts.inc.php
+++ b/include/staff/settings-alerts.inc.php
@@ -11,7 +11,9 @@
         </tr>
     </thead>
     <tbody>
-        <tr><th><em><b>New Ticket Alert</b>: Alert sent out on new tickets</em></th></tr>
+        <tr><th><em><b>New Ticket Alert</b>:
+            <i class="help-tip icon-question-sign" href="#new_ticket"></i>
+            </em></th></tr>
         <tr>
             <td><em><b>Status:</b></em> &nbsp;
                 <input type="radio" name="ticket_alert_active"  value="1"   <?php echo $config['ticket_alert_active']?'checked':''; ?> />Enable
@@ -34,7 +36,9 @@
                 <input type="checkbox" name="ticket_alert_dept_members" <?php echo $config['ticket_alert_dept_members']?'checked':''; ?>> Department Members <em>(spammy)</em>
             </td>
         </tr>
-        <tr><th><em><b>New Message Alert</b>: Alert sent out when a new message, from the user, is appended to an existing ticket</em></th></tr>
+        <tr><th><em><b>New Message Alert</b>:
+            <i class="help-tip icon-question-sign" href="#new_message"></i>
+            </em></th></tr>
         <tr>
             <td><em><b>Status:</b></em> &nbsp; 
               <input type="radio" name="message_alert_active"  value="1"   <?php echo $config['message_alert_active']?'checked':''; ?> />Enable
@@ -57,7 +61,9 @@
               <input type="checkbox" name="message_alert_dept_manager" <?php echo $config['message_alert_dept_manager']?'checked':''; ?>> Department Manager <em>(spammy)</em>
             </td>
         </tr>
-        <tr><th><em><b>New Internal Note Alert</b>: Alert sent out when a new internal note is posted.</em></th></tr>
+        <tr><th><em><b>New Internal Note Alert</b>:
+            <i class="help-tip icon-question-sign" href="#new_activity"></i>
+            </em></th></tr>
         <tr>
             <td><em><b>Status:</b></em> &nbsp;
               <input type="radio" name="note_alert_active"  value="1"   <?php echo $config['note_alert_active']?'checked':''; ?> />Enable
@@ -81,7 +87,9 @@
               <input type="checkbox" name="note_alert_dept_manager" <?php echo $config['note_alert_dept_manager']?'checked':''; ?>> Department Manager <em>(spammy)</em>
             </td>
         </tr>
-        <tr><th><em><b>Ticket Assignment Alert</b>: Alert sent out to staff on ticket assignment.</em></th></tr>
+        <tr><th><em><b>Ticket Assignment Alert</b>:
+            <i class="help-tip icon-question-sign" href="#assign_alert"></i>
+            </em></th></tr>
         <tr>
             <td><em><b>Status: </b></em> &nbsp;
               <input name="assigned_alert_active" value="1" checked="checked" type="radio">Enable
@@ -106,7 +114,9 @@
                 Team Members <em>(spammy)</em>
             </td>
         </tr>
-        <tr><th><em><b>Ticket Transfer Alert</b>: Alert sent out to staff of the target department on ticket transfer.</em></th></tr>
+        <tr><th><em><b>Ticket Transfer Alert</b>:
+            <i class="help-tip icon-question-sign" href="#transfer_alert"></i>
+            </em></th></tr>
         <tr>
             <td><em><b>Status:</b></em> &nbsp;
               <input type="radio" name="transfer_alert_active"  value="1"   <?php echo $config['transfer_alert_active']?'checked':''; ?> />Enable
@@ -130,7 +140,9 @@
                 Department Members <em>(spammy)</em>
             </td>
         </tr>
-        <tr><th><em><b>Overdue Ticket Alert</b>: Alert sent out when a ticket becomes overdue - admin email gets an alert by default.</em></th></tr>
+        <tr><th><em><b>Overdue Ticket Alert</b>:
+            <i class="help-tip icon-question-sign" href="#stale_alert"></i>
+            </em></th></tr>
         <tr>
             <td><em><b>Status:</b></em> &nbsp;
               <input type="radio" name="overdue_alert_active"  value="1"   <?php echo $config['overdue_alert_active']?'checked':''; ?> />Enable
@@ -153,7 +165,9 @@
               <input type="checkbox" name="overdue_alert_dept_members" <?php echo $config['overdue_alert_dept_members']?'checked':''; ?>> Department Members <em>(spammy)</em>
             </td>
         </tr>
-        <tr><th><em><b>System Alerts</b>: Enabled by default. Errors are sent to system admin email (<?php echo $cfg->getAdminEmail(); ?>)</em></th></tr>
+        <tr><th><em><b>System Alerts</b>:
+            <i class="help-tip icon-question-sign" href="#meltdowns"></i>
+            </em></th></tr>
         <tr>
             <td>
               <input type="checkbox" name="send_sys_errors" checked="checked" disabled="disabled">System Errors
diff --git a/include/staff/settings-autoresp.inc.php b/include/staff/settings-autoresp.inc.php
index 0ad893b3fb97c4515ca407e9318a164cdc37454e..9123164c6a972a28a0e1a8a07a3d3de9a6b7f90e 100644
--- a/include/staff/settings-autoresp.inc.php
+++ b/include/staff/settings-autoresp.inc.php
@@ -18,8 +18,8 @@
             <td>
                 <input type="radio" name="ticket_autoresponder"  value="1"   <?php echo $config['ticket_autoresponder']?'checked="checked"':''; ?> /><b>Enable</b>
                 <input type="radio" name="ticket_autoresponder"  value="0"   <?php echo !$config['ticket_autoresponder']?'checked="checked"':''; ?> />Disable
-                &nbsp;&nbsp;&nbsp;
-                <em>(Autoresponse includes the ticket ID required to check status of the ticket)</em>
+                &nbsp;
+                <i class="help-tip icon-question-sign" href="#new_ticket"></i>
             </td>
         </tr>
         <tr>
@@ -27,8 +27,8 @@
             <td>
                 <input type="radio" name="ticket_notice_active"  value="1"   <?php echo $config['ticket_notice_active']?'checked="checked"':''; ?> /><b>Enable</b>
                 <input type="radio" name="ticket_notice_active"  value="0"   <?php echo !$config['ticket_notice_active']?'checked="checked"':''; ?> />Disable
-                 &nbsp;&nbsp;&nbsp;
-                 <em>(Notice sent when staff creates a ticket on behalf of the user (Staff can override))</em>
+                &nbsp;
+                <i class="help-tip icon-question-sign" href="#new_staff_ticket"></i>
             </td>
         </tr>
         <tr>
@@ -36,8 +36,8 @@
             <td>
                 <input type="radio" name="message_autoresponder"  value="1"   <?php echo $config['message_autoresponder']?'checked="checked"':''; ?> /><b>Enable</b>
                 <input type="radio" name="message_autoresponder"  value="0"   <?php echo !$config['message_autoresponder']?'checked="checked"':''; ?> />Disable
-                &nbsp;&nbsp;&nbsp;
-                <em>(Confirmation notice sent when a new message is appended to an existing ticket)</em>
+                &nbsp;
+                <i class="help-tip icon-question-sign" href="#new_message"></i>
             </td>
         </tr>
         <tr>
@@ -45,8 +45,8 @@
             <td>
                 <input type="radio" name="overlimit_notice_active"  value="1"   <?php echo $config['overlimit_notice_active']?'checked="checked"':''; ?> /><b>Enable</b>
                 <input type="radio" name="overlimit_notice_active"  value="0"   <?php echo !$config['overlimit_notice_active']?'checked="checked"':''; ?> />Disable
-                &nbsp;&nbsp;&nbsp;
-                <em>(Ticket denied notice sent to user on limit violation. Admin gets alerts on ALL denials by default)</em>
+                &nbsp;
+                <i class="help-tip icon-question-sign" href="#overlimit_notice"></i>
             </td>
         </tr>
     </tbody>
diff --git a/include/staff/settings-emails.inc.php b/include/staff/settings-emails.inc.php
index f8b96f04b345ef4ecf8d6f80847da53f48a5f2fb..0ccbb959046a34b867ef68c324dc8adeffa3b18d 100644
--- a/include/staff/settings-emails.inc.php
+++ b/include/staff/settings-emails.inc.php
@@ -30,6 +30,7 @@ if(!defined('OSTADMININC') || !$thisstaff || !$thisstaff->isAdmin() || !$config)
                         }
                     } ?>
                 </select>&nbsp;<font class="error">*&nbsp;<?php echo $errors['default_template_id']; ?></font>
+                <i class="help-tip icon-question-sign" href="#default_templates"></i>
             </td>
         </tr>
         <tr>
@@ -49,6 +50,7 @@ if(!defined('OSTADMININC') || !$thisstaff || !$thisstaff->isAdmin() || !$config)
                     } ?>
                  </select>
                  &nbsp;<font class="error">*&nbsp;<?php echo $errors['default_email_id']; ?></font>
+                <i class="help-tip icon-question-sign" href="#default_email"></i>
             </td>
         </tr>
         <tr>
@@ -68,6 +70,7 @@ if(!defined('OSTADMININC') || !$thisstaff || !$thisstaff->isAdmin() || !$config)
                     } ?>
                  </select>
                  &nbsp;<font class="error">*&nbsp;<?php echo $errors['alert_email_id']; ?></font>
+                <i class="help-tip icon-question-sign" href="#default_alert_email"></i>
             </td>
         </tr>
         <tr>
@@ -75,16 +78,21 @@ if(!defined('OSTADMININC') || !$thisstaff || !$thisstaff->isAdmin() || !$config)
             <td>
                 <input type="text" size=40 name="admin_email" value="<?php echo $config['admin_email']; ?>">
                     &nbsp;<font class="error">*&nbsp;<?php echo $errors['admin_email']; ?></font>
-                &nbsp;&nbsp;<em>(System administrator's email)</em>
+                <i class="help-tip icon-question-sign" href="#admin_email"></i>
             </td>
         </tr>
-        <tr><th colspan=2><em><strong>Incoming Emails</strong>: For mail fetcher (polling) to work you must set an external cron job or enable auto-cron polling</em></th>
+        <tr><th colspan=2><em><strong>Incoming Emails:</strong>&nbsp;
+            <i class="help-tip icon-question-sign" href="#incoming_email"></i>
+            </em></th>
         <tr>
             <td width="180">Email Polling:</td>
             <td><input type="checkbox" name="enable_mail_polling" value=1 <?php echo $config['enable_mail_polling']? 'checked="checked"': ''; ?>  > Enable POP/IMAP polling
-                 &nbsp;&nbsp;
+                &nbsp;
+                <i class="help-tip icon-question-sign" href="#enable_email_poll"></i>
+                &nbsp;
                  <input type="checkbox" name="enable_auto_cron" <?php echo $config['enable_auto_cron']?'checked="checked"':''; ?>>
-                 Poll on auto-cron <em>(Poll based on staff activity - NOT recommended)</em>
+                 Poll on auto-cron&nbsp;
+                <i class="help-tip icon-question-sign" href="#enable_autocron_poll"></i>
             </td>
         </tr>
         <tr>
diff --git a/include/staff/settings-system.inc.php b/include/staff/settings-system.inc.php
index 838b4c0fcb323cb26042d6f9ed8b99a195f08199..077a9130ec3b72fa5c713d74fa613edf27f6d66a 100644
--- a/include/staff/settings-system.inc.php
+++ b/include/staff/settings-system.inc.php
@@ -24,18 +24,23 @@ $gmtime = Misc::gmtime();
                 <input type="radio" name="isonline"  value="1"   <?php echo $config['isonline']?'checked="checked"':''; ?> /><b>Online</b> (Active)
                 <input type="radio" name="isonline"  value="0"   <?php echo !$config['isonline']?'checked="checked"':''; ?> /><b>Offline</b> (Disabled)
                 &nbsp;<font class="error">&nbsp;<?php echo $config['isoffline']?'osTicket offline':''; ?></font>
+                <i class="help-tip icon-question-sign" href="#helpdesk_status"></i>
             </td>
         </tr>
         <tr>
             <td width="220" class="required">Helpdesk URL:</td>
             <td>
                 <input type="text" size="40" name="helpdesk_url" value="<?php echo $config['helpdesk_url']; ?>">
-                &nbsp;<font class="error">*&nbsp;<?php echo $errors['helpdesk_url']; ?></font></td>
+                &nbsp;<font class="error">*&nbsp;<?php echo $errors['helpdesk_url']; ?></font>
+                <i class="help-tip icon-question-sign" href="#helpdesk_url"></i>
+        </td>
         </tr>
         <tr>
             <td width="220" class="required">Helpdesk Name/Title:</td>
             <td><input type="text" size="40" name="helpdesk_title" value="<?php echo $config['helpdesk_title']; ?>">
-                &nbsp;<font class="error">*&nbsp;<?php echo $errors['helpdesk_title']; ?></font></td>
+                &nbsp;<font class="error">*&nbsp;<?php echo $errors['helpdesk_title']; ?></font>
+                <i class="help-tip icon-question-sign" href="#helpdesk_name"></i>
+            </td>
         </tr>
         <tr>
             <td width="220" class="required">Default Department:</td>
@@ -52,6 +57,7 @@ $gmtime = Misc::gmtime();
                         }
                     } ?>
                 </select>&nbsp;<font class="error">*&nbsp;<?php echo $errors['default_dept_id']; ?></font>
+                <i class="help-tip icon-question-sign" href="#default_dept"></i>
             </td>
         </tr>
 
@@ -66,6 +72,7 @@ $gmtime = Misc::gmtime();
                         <?php
                     } ?>
                 </select>
+                <i class="help-tip icon-question-sign" href="#page_size"></i>
             </td>
         </tr>
         <tr>
@@ -78,6 +85,7 @@ $gmtime = Misc::gmtime();
                     <option value=1 <?php echo $config['log_level'] == 1 ? 'selected="selected"':''; ?>> ERROR</option>
                 </select>
                 <font class="error">&nbsp;<?php echo $errors['log_level']; ?></font>
+                <i class="help-tip icon-question-sign" href="#log_level"></i>
             </td>
         </tr>
         <tr>
@@ -93,6 +101,7 @@ $gmtime = Misc::gmtime();
                         <?php
                     } ?>
                 </select>
+                <i class="help-tip icon-question-sign" href="#purge_logs"></i>
             </td>
         </tr>
         <tr>
@@ -106,6 +115,7 @@ $gmtime = Misc::gmtime();
                         ?>><?php echo $desc; ?></option>
 <?php } ?>
                 </select>
+                <i class="help-tip icon-question-sign" href="#name_format"></i>
             </td>
         </tr>
         <tr>
@@ -124,7 +134,8 @@ $gmtime = Misc::gmtime();
                     }
                     ?>
                 </select>
-                &nbsp;<font class="error">&nbsp;<?php echo $errors['passwd_reset_period']; ?></font>
+                <font class="error"><?php echo $errors['passwd_reset_period']; ?></font>
+                <i class="help-tip icon-question-sign" href="#password_reset"></i>
             </td>
         </tr>
         <tr><td>Allow Password Resets:</th>
@@ -201,7 +212,9 @@ $gmtime = Misc::gmtime();
         </tr>
         <tr>
             <th colspan="2">
-                <em><b>Date and Time Options</b>: Please refer to <a href="http://php.net/date" target="_blank">PHP Manual</a> for supported parameters.</em>
+                <em><b>Date and Time Options</b>&nbsp;
+                <i class="help-tip icon-question-sign" href="#date_and_time"></i>
+                </em>
             </th>
         </tr>
         <tr><td width="220" class="required">Time Format:</td>
diff --git a/scp/ajax.php b/scp/ajax.php
index 60ea6aa1c128dcb41d4b56bcab298dab03620c2b..26d4e21a1cc58cd8da129dcd683cfc01916e19aa 100644
--- a/scp/ajax.php
+++ b/scp/ajax.php
@@ -79,7 +79,11 @@ $dispatcher = patterns('',
         url_post('^(?P<namespace>[\w.]+)$', 'createDraft'),
         url_get('^images/browse$', 'getFileList')
     )),
-    url_post('^/upgrader', array('ajax.upgrader.php:UpgraderAjaxAPI', 'upgrade'))
+    url_post('^/upgrader', array('ajax.upgrader.php:UpgraderAjaxAPI', 'upgrade')),
+    url('^/help/', patterns('ajax.tips.php:HelpTipAjaxAPI',
+        url_get('tips/(?P<namespace>[\w_.]+)$', 'getTipsJson'),
+        url_get('(?P<lang>\w{2}_\w{2})?/tips/(?P<namespace>[\w_.]+)$', 'getTipsForLangJson')
+    ))
 );
 
 # Call the respective function
diff --git a/scp/css/scp.css b/scp/css/scp.css
index 4e81b9f8aa39954144fd1118dc30529fb0c789c2..79da1d79820235bb3e1d825600d065b8cf36db37 100644
--- a/scp/css/scp.css
+++ b/scp/css/scp.css
@@ -951,7 +951,7 @@ h2 .reload {
     display:block;
     position:absolute;
     top:5px;
-    left:-11px;
+    left:-12px;
     width:12px;
     z-index:700;
 }
@@ -960,7 +960,7 @@ h2 .reload {
     height:auto !important;
     height:20px;
     min-height:20px;
-    padding:10px 5px 5px 5px;
+    padding:10px;
     border:1px solid #666;
     background:#fff;
     -moz-border-radius:5px;
@@ -973,8 +973,18 @@ h2 .reload {
     position:absolute;
     top:0;
     left:-1px;
-    width:auto !important;
-    width:300px;
+    min-width:400px;
+    line-height: 1.15rem;
+}
+
+.tip_content .links {
+    margin-top: 0.7em;
+    padding-top: 0.4em;
+    border-top: 1px solid #ddd;
+}
+
+.tip_content .links a {
+    color: #548dd4;
 }
 
 .tip_content hr {
@@ -990,9 +1000,8 @@ h2 .reload {
 
 .tip_close {
     position:absolute;
-    left:100%;
-    top:0;
-    margin-left:-12px;
+    top:0.3em;
+    right:0.5em;
 }
 
 .tip_shadow {
@@ -1061,6 +1070,23 @@ h2 .reload {
     line-height:24px;
 }
 
+.tip_content h1 {
+    font-size: 13pt;
+    margin-top: 0;
+    margin-bottom: 0.5em;
+    padding-bottom: 0.2em;
+    border-bottom: 1px solid #ddd;
+    padding-right: 1.5em;
+}
+
+i.help-tip {
+    color: #aaa;
+}
+i.help-tip:hover {
+    color: black;
+    cursor: pointer;
+}
+
 /* Knowledgebase */
 /* Knowledgebase */
 #kb {
diff --git a/scp/js/tips.js b/scp/js/tips.js
index c560b8d913e635047e98e7a8198262a9db2809fc..bb862e8b9710217b4e3221639db1481d6385f7a2 100644
--- a/scp/js/tips.js
+++ b/scp/js/tips.js
@@ -1,10 +1,4 @@
-jQuery(function($) {
-    var tip_timer = 0;
-    var tips = $('.tip');
-    for(i=0;i<tips.length;i++) {
-        tips[i].rel = 'tip-' + i;
-    }
-
+jQuery(function() {
     var showtip = function (url, elem,xoffset) {
 
             var pos = elem.offset();
@@ -28,28 +22,116 @@ jQuery(function($) {
             $('.' + elem.data('id') + ' .tip_shadow').css({
                 "height":$('.' + elem.data('id')).height() + 5
             });
-    };
+    },
+    getHelpTips = (function() {
+        var dfd = $.Deferred(),
+            requested = false,
+            namespace = $('meta[name=tip-namespace]').attr('content');
+        return function() {
+            if (namespace && dfd.state() != 'resolved' && !requested)
+                requested = $.ajax({
+                    url: "ajax.php/help/tips/" + namespace,
+                    dataType: 'json',
+                    success: function (json_config) {
+                        dfd.resolve(json_config);
+                    }
+                });
+            return dfd;
+        }
+    })();
 
     //Generic tip.
-    $('.tip').live('click mouseover', function(e) {
+    $('.tip')
+    .each(function(i, e) {
+        e.rel = 'tip-' + i;
+    })
+    .live('click mouseover', function(e) {
         e.preventDefault();
         var id = this.rel;
         var elem = $(this);
-    
+
         elem.data('id',id);
         elem.data('timer',0);
-        if($('.' + id).length == 0) {
-            if(e.type=='mouseover') {
-                 /* wait about 1 sec - before showing the tip - mouseout kills the timeout*/
-                 elem.data('timer',setTimeout(function() { showtip('ajax.php/content/'+elem.attr('href'),elem);},750))
-            }else{
+        if ($('.' + id).length == 0) {
+            if (e.type=='mouseover') {
+                // wait about 1 sec - before showing the tip - mouseout kills
+                // the timeout
+                elem.data('timer',setTimeout(function() {
+                    showtip('ajax.php/content/'+elem.attr('href'),elem);i
+                },750));
+            } else {
                 showtip('ajax.php/content/'+elem.attr('href'),elem);
             }
         }
-    }).live('mouseout', function(e) {
+    })
+    .live('mouseout', function(e) {
         clearTimeout($(this).data('timer'));
     });
 
+    $('.help-tip')
+    .live('mouseover click', function(e) {
+        e.preventDefault();
+
+        var elem = $(this),
+            pos = elem.offset(),
+            y_pos = pos.top - 12,
+            x_pos = pos.left + elem.width() + 20,
+            tip_arrow = $('<img>')
+                .attr('src', './images/tip_arrow.png')
+                .addClass('tip_arrow'),
+            tip_box = $('<div>')
+                .addClass('tip_box'),
+            tip_content = $('<div>')
+                .append('<a href="#" class="tip_close"><i class="icon-remove-circle"></i></a>')
+                .addClass('tip_content'),
+            the_tip = tip_box
+                .append(tip_arrow)
+                .append(tip_content)
+                .css({
+                    "top":y_pos + "px",
+                    "left":x_pos + "px"
+                }),
+            tip_timer = setTimeout(function() {
+                $('.tip_box').remove();
+                $('body').append(the_tip.hide().fadeIn());
+            }, 500);
+
+        elem.live('mouseout', function() {
+            clearTimeout(tip_timer);
+        });
+
+        getHelpTips().then(function(tips) {
+            var section = tips[elem.attr('href').substr(1)];
+            if (!section) {
+                elem.remove();
+                clearTimeout(tip_timer);
+                return;
+            }
+            tip_content.append(
+                $('<h1>')
+                    .append('<i class="icon-info-sign faded"> ')
+                    .append(section.title)
+                ).append(section.content);
+            if (section.links) {
+                var links = $('<div class="links">');
+                $.each(section.links, function(i,l) {
+                    var icon = l.href.match(/^http/)
+                        ? 'icon-external-link' : 'icon-share-alt';
+                    links.append($('<div>')
+                        .append($('<a>')
+                            .html(l.title)
+                            .prepend('<i class="'+icon+'"></i> ')
+                            .attr('href', l.href).attr('target','_blank'))
+                    );
+                });
+                tip_content.append(links);
+            }
+        });
+        $('.tip_shadow', the_tip).css({
+            "height":the_tip.height() + 5
+        });
+    });
+
     //faq preview tip
     $('.previewfaq').live('mouseover', function(e) {
         e.preventDefault();
@@ -83,7 +165,7 @@ jQuery(function($) {
         var url = 'ajax.php/tickets/'+vars[1]+'/preview';
         var id='t'+vars[1];
         var xoffset = 80;
-        
+
 
         elem.data('id',id);
         elem.data('timer',0);
@@ -99,9 +181,8 @@ jQuery(function($) {
         clearTimeout($(this).data('timer'));
     });
 
-
-
-    $('body').delegate('.tip_close', 'click', function(e) {
+    $('body')
+    .delegate('.tip_close', 'click', function(e) {
         e.preventDefault();
         $(this).parent().parent().remove();
     });
diff --git a/scp/settings.php b/scp/settings.php
index 9c8f70ac43d5cfd2b158334f690fd21529bbecaa..b72cdf2c377a436f8d188e11c8ea38f41937d708 100644
--- a/scp/settings.php
+++ b/scp/settings.php
@@ -16,24 +16,37 @@
 require('admin.inc.php');
 $errors=array();
 $settingOptions=array(
-                'system' => 'System Settings',
-                'tickets' => 'Ticket Settings and Options',
-                'emails' => 'Email Settings',
-                'pages' => 'Site Pages',
-                'kb' => 'Knowledgebase Settings',
-                'autoresp' => 'Autoresponder Settings',
-                'alerts' => 'Alerts and Notices Settings');
+    'system' =>
+        array('System Settings', 'settings.system'),
+    'tickets' =>
+        array('Ticket Settings and Options', 'settings.ticket'),
+    'emails' =>
+        array('Email Settings', 'settings.email'),
+    'pages' =>
+        array('Site Pages', 'settings.pages'),
+    'kb' =>
+        array('Knowledgebase Settings', 'settings.kb'),
+    'autoresp' =>
+        array('Autoresponder Settings', 'settings.autoresponder'),
+    'alerts' =>
+        array('Alerts and Notices Settings', 'settings.alerts'),
+);
 //Handle a POST.
-if($_POST && !$errors) {
+$target=($_REQUEST['t'] && $settingOptions[$_REQUEST['t']])?$_REQUEST['t']:'system';
+$page = false;
+if (isset($settingOptions[$target]))
+    $page = $settingOptions[$target];
+
+if($page && $_POST && !$errors) {
     if($cfg && $cfg->updateSettings($_POST,$errors)) {
-        $msg=Format::htmlchars($settingOptions[$_POST['t']]).' Updated Successfully';
+        $msg=Format::htmlchars($page[0]).' Updated Successfully';
     } elseif(!$errors['err']) {
         $errors['err']='Unable to update settings - correct errors below and try again';
     }
 }
 
-$target=($_REQUEST['t'] && $settingOptions[$_REQUEST['t']])?$_REQUEST['t']:'system';
 $config=($errors && $_POST)?Format::input($_POST):Format::htmlchars($cfg->getConfigInfo());
+$ost->addExtraHeader('<meta name="tip-namespace" content="'.$page[1].'" />');
 
 $nav->setTabActive('settings', ('settings.php?t='.$target));
 require_once(STAFFINC_DIR.'header.inc.php');
diff --git a/scp/templates.php b/scp/templates.php
index 2b46e927bc150975162f7bcbe0a9c4734e4b9ef0..a475e5dca68d377b2bee15d77806ca302c939071 100644
--- a/scp/templates.php
+++ b/scp/templates.php
@@ -22,6 +22,13 @@ if($_REQUEST['tpl_id'] &&
 elseif($_REQUEST['id'] &&
         !($template=EmailTemplate::lookup($_REQUEST['id'])))
     $errors['err']='Unknown or invalid template ID.';
+elseif($_REQUEST['default_for']) {
+    $sql = 'SELECT id FROM '.EMAIL_TEMPLATE_TABLE
+        .' WHERE tpl_id='.db_input($cfg->getDefaultTemplateId())
+        .' AND code_name='.db_input($_REQUEST['default_for']);
+    if ($id = db_result(db_query($sql)))
+        Http::redirect('templates.php?a=manage&id='.db_input($id));
+}
 
 if($_POST){
     switch(strtolower($_POST['do'])){