Index: t3lib/class.t3lib_page.php
===================================================================
--- t3lib/class.t3lib_page.php	(Revision 8650)
+++ t3lib/class.t3lib_page.php	(Arbeitskopie)
@@ -516,13 +516,19 @@
 
 					// if shortcut, look up if the target exists and is currently visible
 				if ($row['doktype'] == 4 && ($row['shortcut'] || $row['shortcut_mode']) && $checkShortcuts)	{
-					if ($row['shortcut_mode'] == 0)	{
+					if ($row['shortcut_mode'] == 0) {
+							// no shortcut_mode set, so target is directly set in $row['shortcut']
 						$searchField = 'uid';
 						$searchUid = intval($row['shortcut']);
-					} else { // check subpages - first subpage or random subpage
+					} elseif ($row['shortcut_mode'] == 1 || $row['shortcut_mode'] == 2) {
+							// check subpages - first subpage or random subpage
 						$searchField = 'pid';
 							// If a shortcut mode is set and no valid page is given to select subpags from use the actual page.
 						$searchUid = intval($row['shortcut'])?intval($row['shortcut']):$row['uid'];
+					} elseif ($row['shortcut_mode'] == 3) {
+							// shortcut to parent page
+						$searchField = 'uid';
+						$searchUid = $row['pid'];
 					}
 					$count = $GLOBALS['TYPO3_DB']->exec_SELECTcountRows(
 						'uid',
Index: typo3/sysext/cms/ext_tables.php
===================================================================
--- typo3/sysext/cms/ext_tables.php	(Revision 8650)
+++ typo3/sysext/cms/ext_tables.php	(Arbeitskopie)
@@ -326,6 +326,7 @@
 					array('', 0),
 					array('LLL:EXT:cms/locallang_tca.xml:pages.shortcut_mode.I.1', 1),
 					array('LLL:EXT:cms/locallang_tca.xml:pages.shortcut_mode.I.2', 2),
+					array('LLL:EXT:cms/locallang_tca.xml:pages.shortcut_mode.I.3', 3),
 				),
 				'default' => '0'
 			)
Index: typo3/sysext/cms/locallang_tca.xml
===================================================================
--- typo3/sysext/cms/locallang_tca.xml	(Revision 8650)
+++ typo3/sysext/cms/locallang_tca.xml	(Arbeitskopie)
@@ -55,6 +55,7 @@
 			<label index="pages.shortcut_mode">Shortcut mode:</label>
 			<label index="pages.shortcut_mode.I.1">First subpage</label>
 			<label index="pages.shortcut_mode.I.2">Random subpage</label>
+			<label index="pages.shortcut_mode.I.3">Parent page</label>
 			<label index="pages.content_from_pid">Show content from this page instead:</label>
 			<label index="pages.mount_pid">Mount Point (advanced):</label>
 			<label index="pages.mount_pid_ol">Substitute Mount Point (this page) with Mounted page:</label>
Index: typo3/sysext/cms/tslib/class.tslib_fe.php
===================================================================
--- typo3/sysext/cms/tslib/class.tslib_fe.php	(Revision 8650)
+++ typo3/sysext/cms/tslib/class.tslib_fe.php	(Arbeitskopie)
@@ -1118,7 +1118,7 @@
 	 * Get page shortcut; Finds the records pointed to by input value $SC (the shortcut value)
 	 *
 	 * @param	integer		The value of the "shortcut" field from the pages record
-	 * @param	integer		The shortcut mode: 1 and 2 will select either first subpage or random subpage; the default is the page pointed to by $SC
+	 * @param	integer		The shortcut mode: 1 will select first subpage, 2 a random subpage, 3 the parent page; default is the page pointed to by $SC
 	 * @param	integer		The current page UID of the page which is a shortcut
 	 * @param	integer		Safety feature which makes sure that the function is calling itself recursively max 20 times (since this function can find shortcuts to other shortcuts to other shortcuts...)
 	 * @param	array		An array filled with previous page uids tested by the function - new page uids are evaluated against this to avoid going in circles.
@@ -1148,6 +1148,10 @@
 					$c++;
 				}
 			break;
+			case 3:
+				$parent = $this->sys_page->getPage($thisUid);
+				$page = $this->sys_page->getPage($parent['pid']);
+			break;
 			default:
 				$page = $this->sys_page->getPage($idArray[0]);
 			break;
@@ -3634,7 +3638,7 @@
         $microtime_end              = (isset($GLOBALS['TYPO3_MISC']['microtime_end'])) ? $GLOBALS['TYPO3_MISC']['microtime_end'] : NULL;
         $microtime_BE_USER_start    = (isset($GLOBALS['TYPO3_MISC']['microtime_BE_USER_start'])) ? $GLOBALS['TYPO3_MISC']['microtime_BE_USER_start'] : NULL;
         $microtime_BE_USER_end      = (isset($GLOBALS['TYPO3_MISC']['microtime_BE_USER_end'])) ? $GLOBALS['TYPO3_MISC']['microtime_BE_USER_end'] : NULL;
-        
+
         $this->scriptParseTime = $GLOBALS['TT']->getMilliseconds($microtime_end) - $GLOBALS['TT']->getMilliseconds($microtime_start)
                                 - ($GLOBALS['TT']->getMilliseconds($microtime_BE_USER_end) - $GLOBALS['TT']->getMilliseconds($microtime_BE_USER_start));
     }
