diff --git a/core/css/apps.css b/core/css/apps.css
index 35487bee598345f5825e5529f87da1c7daf8532c..898259ed9d5f67b9586f98ceafdfec9e9e105571 100644
--- a/core/css/apps.css
+++ b/core/css/apps.css
@@ -479,7 +479,7 @@ button.loading {
 	border-top: 1px solid #ddd;
 }
 /* no top border for first settings item */
-.section:first-child {
+#app-content > .section:first-child {
 	border-top: none;
 }
 .section h2 {
diff --git a/settings/personal.php b/settings/personal.php
index e6f53d62704845611bf34a648abf986fbfa6df0b..ecbec887da832760a71467142ac916f50481e357 100644
--- a/settings/personal.php
+++ b/settings/personal.php
@@ -101,9 +101,38 @@ $tmpl->assign('enableAvatars', \OC_Config::getValue('enable_avatars', true));
 $tmpl->assign('avatarChangeSupported', OC_User::canUserChangeAvatar(OC_User::getUser()));
 $tmpl->assign('certs', $certificateManager->listCertificates());
 
+// add hardcoded forms from the template
+$l = OC_L10N::get('settings');
+$formsAndMore = array();
+$formsAndMore[]= array( 'anchor' => 'passwordform', 'section-name' => $l->t('Personal Info') );
+
 $forms=OC_App::getForms('personal');
-$tmpl->assign('forms', array());
-foreach($forms as $form) {
-	$tmpl->append('forms', $form);
+
+$formsMap = array_map(function($form){
+	if (preg_match('%(<h2[^>]*>.*?</h2>)%i', $form, $regs)) {
+		$sectionName = str_replace('<h2>', '', $regs[0]);
+		$sectionName = str_replace('</h2>', '', $sectionName);
+		$anchor = strtolower($sectionName);
+		$anchor = str_replace(' ', '-', $anchor);
+
+		return array(
+			'anchor' => $anchor,
+			'section-name' => $sectionName,
+			'form' => $form
+		);
+	}
+	return array(
+		'form' => $form
+	);
+}, $forms);
+
+$formsAndMore = array_merge($formsAndMore, $formsMap);
+
+// add bottom hardcoded forms from the template
+$formsAndMore[]= array( 'anchor' => 'ssl-root-certificates', 'section-name' => $l->t('SSL root certificates') );
+if($enableDecryptAll) {
+	$formsAndMore[]= array( 'anchor' => 'encryption', 'section-name' => $l->t('Encryption') );
 }
+
+$tmpl->assign('forms', $formsAndMore);
 $tmpl->printPage();
diff --git a/settings/templates/personal.php b/settings/templates/personal.php
index 86f2c28319b58b1591c9bc37c271486e8ea07add..b3a26acdb69975134391fd30d57f6e8fe9817dd9 100644
--- a/settings/templates/personal.php
+++ b/settings/templates/personal.php
@@ -8,10 +8,15 @@
 ?>
 
 <div id="app-navigation">
-<!--	<?php foreach($_['forms'] as $form) {
-		print_unescaped($form);
-	};?>
--->
+	<ul>
+	<?php foreach($_['forms'] as $form) {
+		if (isset($form['anchor'])) {
+			$anchor = '#' . $form['anchor'];
+			$sectionName = $form['section-name'];
+			print_unescaped("<li><a href='$anchor'>$sectionName</a></li>");
+		}
+	}?>
+	</ul>
 </div>
 
 <div id="app-content">
@@ -159,10 +164,12 @@ if($_['passwordChangeSupported']) {
 </form>
 
 <?php foreach($_['forms'] as $form) {
-	print_unescaped($form);
+	if (isset($form['form'])) {?>
+	<div id="<?php isset($form['anchor']) ? print_unescaped($form['anchor']) : p('');?>"><?php print_unescaped($form['form']);?></div>
+	<?php }
 };?>
 
-<div class="section">
+<div id="ssl-root-certificates" class="section">
 	<h2><?php p($l->t('SSL root certificates')); ?></h2>
 	<table id="sslCertificate" class="grid">
 		<thead>
@@ -201,7 +208,7 @@ if($_['passwordChangeSupported']) {
 </div>
 
 <?php if($_['enableDecryptAll']): ?>
-<div class="section">
+<div id="encryption" class="section">
 
 	<h2>
 		<?php p( $l->t( 'Encryption' ) ); ?>