diff --git a/inc/template.php b/inc/template.php
index 3859065bcfd41db96c645b505d4739b94401c643..fd8bff11a6b2313c4c0350c2610daf59269ed7c8 100644
--- a/inc/template.php
+++ b/inc/template.php
@@ -1035,6 +1035,8 @@ function tpl_pageinfo($ret = false) {
  * @return bool|string
  */
 function tpl_pagetitle($id = null, $ret = false) {
+    global $ACT, $INPUT, $lang;
+
     if(is_null($id)) {
         global $ID;
         $id = $ID;
@@ -1042,14 +1044,67 @@ function tpl_pagetitle($id = null, $ret = false) {
 
     $name = $id;
     if(useHeading('navigation')) {
-        $title = p_get_first_heading($id);
-        if($title) $name = $title;
+        $first_heading = p_get_first_heading($id);
+        if($first_heading) $name = $first_heading;
+    }
+
+    // default page title is the page name, modify with the current action
+    switch ($ACT) {
+        // admin functions
+        case 'admin' :
+            $page_title = $lang['btn_admin'];
+            // try to get the plugin name
+            // retrieve admin plugin name from $_REQUEST['page']
+            if (($page = $INPUT->str('page', '', true)) != '') {
+                $pluginlist = plugin_list('admin');
+                if (in_array($page, $pluginlist)) {
+                    // attempt to load the plugin
+
+                    if (($plugin = plugin_load('admin',$page)) !== null){
+                        $plugin_title = $plugin->getMenuText();
+                        $page_title = $plugin_title ? $plugin_title : $page;
+                    }
+                }
+            }
+            break;
+
+        // user functions
+        case 'login' :
+        case 'profile' :
+        case 'register' :
+        case 'resendpwd' :
+            $page_title = $lang['btn_'.$ACT];
+            break;
+
+         // wiki functions
+        case 'search' :
+        case 'index' :
+            $page_title = $lang['btn_'.$ACT];
+            break;
+
+        // page functions
+        case 'edit' :
+            $page_title = "✎ ".$name;
+            break;
+
+        case 'revisions' :
+            $page_title = $name . ' - ' . $lang['btn_revs'];
+            break;
+
+        case 'backlink' :
+        case 'recent' :
+        case 'subscribe' :
+            $page_title = $name . ' - ' . $lang['btn_'.$ACT];
+            break;
+
+        default : // SHOW and anything else not included
+            $page_title = $name;
     }
 
     if($ret) {
-        return hsc($name);
+        return hsc($page_title);
     } else {
-        print hsc($name);
+        print hsc($page_title);
         return true;
     }
 }