From: Roland Haeder <roland@mxchange.org>
Date: Thu, 5 May 2016 14:06:36 +0000 (+0200)
Subject: re-organized pages:
X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=4538f38e35e68f5752a45b6db773108e53d6078f;p=jfinancials-war.git

re-organized pages:
- moved /user/ -> /guest/user/ as these are pages for current guest but later users
- moved /login/ -> /user/ as these are pages for current (logged-in) users
---

diff --git a/nbproject/faces-config.NavData b/nbproject/faces-config.NavData
index 50c026e6..60dd8052 100644
--- a/nbproject/faces-config.NavData
+++ b/nbproject/faces-config.NavData
@@ -17,23 +17,22 @@
         <Node id="user/register_done.xhtml" x="400" y="600" zoom="true"/>
         <Node id="*" x="1900" y="300" zoom="true"/>
         <Node id="admin/admin_category_delete.xhtml" x="900" y="1050" zoom="true"/>
-        <Node id="user/login_error.xhtml" x="1150" y="600" zoom="true"/>
         <Node id="admin/cellphone/admin_contact_cellphone_edit.xhtml" x="650" y="600" zoom="true"/>
         <Node id="user/show_addressbook_entries.xhtml" x="1900" y="450" zoom="true"/>
         <Node id="user/lost_passwd.xhtml" x="150" y="1500" zoom="true"/>
         <Node id="user/login.xhtml" x="400" y="1050" zoom="true"/>
         <Node id="login/login_list_sharing_addressbooks.xhtml" x="150" y="1200" zoom="true"/>
-        <Node id="login/login_edit_user_data.xhtml" x="900" y="300" zoom="true"/>
         <Node id="admin/cellphone/admin_contact_cellphone_unlink.xhtml" x="1400" y="450" zoom="true"/>
         <Node id="login/login_contact_data_saved.xhtml" x="400" y="1200" zoom="true"/>
         <Node id="admin/country/admin_country_list.xhtml" x="2400" y="150" zoom="true"/>
+        <Node id="login/login_edit_user_data.xhtml" x="900" y="300" zoom="true"/>
         <Node id="login/login_shared_addressbooks.xhtml" x="400" y="750" zoom="true"/>
         <Node id="admin/mobile_provider/admin_mobile_provider_delete.xhtml" x="1400" y="300" zoom="true"/>
         <Node id="admin/mobile_provider/admin_mobile_provider_list.xhtml" x="1150" y="750" zoom="true"/>
         <Node id="basket.xhtml" x="150" y="900" zoom="true"/>
         <Node id="admin/cellphone/admin_contact_cellphone_delete.xhtml" x="1150" y="150" zoom="true"/>
-        <Node id="exception.xhtml" x="900" y="600" zoom="true"/>
         <Node id="login/login_data_saved.xhtml" x="400" y="900" zoom="true"/>
+        <Node id="exception.xhtml" x="900" y="600" zoom="true"/>
         <Node id="admin/user/admin_user_delete.xhtml" x="2150" y="150" zoom="true"/>
         <Node id="user/register.xhtml" x="1650" y="150" zoom="true"/>
         <Node id="login/login_index.xhtml" x="150" y="1350" zoom="true"/>
@@ -41,21 +40,18 @@
         <Node id="login/login_own_addressbooks.xhtml" x="900" y="750" zoom="true"/>
         <Node id="admin/user/admin_user_edit.xhtml" x="1900" y="150" zoom="true"/>
         <Node id="terms.xhtml" x="150" y="150" zoom="true"/>
-        <Node id="admin/contact/admin_contact_edit.xhtml" x="900" y="150" zoom="true"/>
         <Node id="admin/contact/admin_contact_list.xhtml" x="650" y="900" zoom="true"/>
+        <Node id="admin/contact/admin_contact_edit.xhtml" x="900" y="150" zoom="true"/>
         <Node id="admin/user/admin_user_list.xhtml" x="1650" y="600" zoom="true"/>
         <Node id="admin/country/admin_country_delete.xhtml" x="1150" y="450" zoom="true"/>
         <Node id="user/user_list.xhtml" x="400" y="300" zoom="true"/>
-        <Node id="login/login_user_data_saved.xhtml" x="2150" y="300" zoom="true"/>
-        <Node id="admin/country/admin_country_edit.xhtml" x="650" y="150" zoom="true"/>
         <Node id="logout.xhtml" x="1400" y="750" zoom="true"/>
-        <Node id="user/user_profile.xhtml" x="650" y="450" zoom="true"/>
-        <Node id="login/login_change_personal_data.xhtml" x="1650" y="300" zoom="true"/>
+        <Node id="admin/country/admin_country_edit.xhtml" x="650" y="150" zoom="true"/>
         <Node id="admin/contact/admin_contact_delete.xhtml" x="650" y="1050" zoom="true"/>
-        <Node id="imprint.xhtml" x="400" y="450" zoom="true"/>
+        <Node id="login/login_change_personal_data.xhtml" x="1650" y="300" zoom="true"/>
         <Node id="user/show_addressbook.xhtml" x="650" y="1200" zoom="true"/>
+        <Node id="imprint.xhtml" x="400" y="450" zoom="true"/>
         <Node id="admin/mobile_provider/admin_mobile_provider_edit.xhtml" x="1150" y="900" zoom="true"/>
-        <Node id="login/login_other_addressbooks.xhtml" x="150" y="450" zoom="true"/>
         <Node id="admin/cellphone/admin_contact_cellphone_show.xhtml" x="1400" y="150" zoom="true"/>
         <Node id="admin/admin_product_delete.xhtml" x="1400" y="600" zoom="true"/>
         <Node id="login/login_change_email_address.xhtml" x="150" y="1050" zoom="true"/>
diff --git a/web/WEB-INF/faces-config.xml b/web/WEB-INF/faces-config.xml
index a8d5b23b..2da1c597 100644
--- a/web/WEB-INF/faces-config.xml
+++ b/web/WEB-INF/faces-config.xml
@@ -17,15 +17,15 @@
 		</navigation-case>
 		<navigation-case>
 			<from-outcome>user_register</from-outcome>
-			<to-view-id>/user/register.xhtml</to-view-id>
+			<to-view-id>/guest/user/register.xhtml</to-view-id>
 		</navigation-case>
 		<navigation-case>
 			<from-outcome>user_login</from-outcome>
-			<to-view-id>/user/login.xhtml</to-view-id>
+			<to-view-id>/guest/user/login.xhtml</to-view-id>
 		</navigation-case>
 		<navigation-case>
 			<from-outcome>user_lost_passwd</from-outcome>
-			<to-view-id>/user/lost_passwd.xhtml</to-view-id>
+			<to-view-id>/guest/user/lost_passwd.xhtml</to-view-id>
 		</navigation-case>
 		<navigation-case>
 			<from-outcome>terms</from-outcome>
@@ -49,15 +49,15 @@
 		</navigation-case>
 		<navigation-case>
 			<from-outcome>login_index</from-outcome>
-			<to-view-id>/login/login_index.xhtml</to-view-id>
+			<to-view-id>/user/login_index.xhtml</to-view-id>
 		</navigation-case>
 		<navigation-case>
 			<from-outcome>user_resend_link</from-outcome>
-			<to-view-id>/user/resend_link.xhtml</to-view-id>
+			<to-view-id>/guest/user/resend_link.xhtml</to-view-id>
 		</navigation-case>
 		<navigation-case>
 			<from-outcome>login_own_addressbooks</from-outcome>
-			<to-view-id>/login/login_own_addressbooks.xhtml</to-view-id>
+			<to-view-id>/user/login_own_addressbooks.xhtml</to-view-id>
 		</navigation-case>
 		<navigation-case>
 			<from-outcome>admin_logout</from-outcome>
@@ -89,21 +89,21 @@
 		</navigation-case>
 	</navigation-rule>
 	<navigation-rule>
-		<from-view-id>/user/login.xhtml</from-view-id>
+		<from-view-id>/guest/user/login.xhtml</from-view-id>
 		<navigation-case>
 			<from-outcome>login</from-outcome>
-			<to-view-id>/login/login_index.xhtml</to-view-id>
+			<to-view-id>/user/login_index.xhtml</to-view-id>
 		</navigation-case>
 		<navigation-case>
 			<from-outcome>login_index</from-outcome>
-			<to-view-id>/login/index.xhtml</to-view-id>
+			<to-view-id>/user/index.xhtml</to-view-id>
 		</navigation-case>
 	</navigation-rule>
 	<navigation-rule>
-		<from-view-id>/user/register.xhtml</from-view-id>
+		<from-view-id>/guest/user/register.xhtml</from-view-id>
 		<navigation-case>
 			<from-outcome>register_done</from-outcome>
-			<to-view-id>/user/register_done.xhtml</to-view-id>
+			<to-view-id>/guest/user/register_done.xhtml</to-view-id>
 		</navigation-case>
 	</navigation-rule>
 	<navigation-rule>
@@ -114,68 +114,68 @@
 		</navigation-case>
 	</navigation-rule>
 	<navigation-rule>
-		<from-view-id>/login/login_own_addressbooks.xhtml</from-view-id>
+		<from-view-id>/user/login_own_addressbooks.xhtml</from-view-id>
 		<navigation-case>
 			<from-outcome>login_add_addressbook</from-outcome>
-			<to-view-id>/login/login_add_addressbook.xhtml</to-view-id>
+			<to-view-id>/user/login_add_addressbook.xhtml</to-view-id>
 		</navigation-case>
 		<navigation-case>
 			<from-outcome>user_show_addressbook</from-outcome>
-			<to-view-id>/user/show_addressbook.xhtml</to-view-id>
+			<to-view-id>/guest/user/show_addressbook.xhtml</to-view-id>
 		</navigation-case>
 		<navigation-case>
 			<from-outcome>show_addressbook_entries</from-outcome>
-			<to-view-id>/user/show_addressbook_entries.xhtml</to-view-id>
+			<to-view-id>/guest/user/show_addressbook_entries.xhtml</to-view-id>
 		</navigation-case>
 	</navigation-rule>
 	<navigation-rule>
-		<from-view-id>/user/user_list.xhtml</from-view-id>
+		<from-view-id>/guest/user/user_list.xhtml</from-view-id>
 		<navigation-case>
 			<from-outcome>login_list_sharing_addressbooks</from-outcome>
-			<to-view-id>/login/login_list_sharing_addressbooks.xhtml</to-view-id>
+			<to-view-id>/user/login_list_sharing_addressbooks.xhtml</to-view-id>
 		</navigation-case>
 	</navigation-rule>
 	<navigation-rule>
-		<from-view-id>/user/show_addressbook.xhtml</from-view-id>
+		<from-view-id>/guest/user/show_addressbook.xhtml</from-view-id>
 		<navigation-case>
 			<from-outcome>login_start_sharing_addressbook</from-outcome>
-			<to-view-id>/login/login_start_sharing_addressbook.xhtml</to-view-id>
+			<to-view-id>/user/login_start_sharing_addressbook.xhtml</to-view-id>
 		</navigation-case>
 	</navigation-rule>
 	<navigation-rule>
-		<from-view-id>/login/login_shared_addressbooks.xhtml</from-view-id>
+		<from-view-id>/user/login_shared_addressbooks.xhtml</from-view-id>
 		<navigation-case>
 			<from-outcome>user_show_addressbook</from-outcome>
-			<to-view-id>/user/show_addressbook.xhtml</to-view-id>
+			<to-view-id>/guest/user/show_addressbook.xhtml</to-view-id>
 		</navigation-case>
 	</navigation-rule>
 	<navigation-rule>
-		<from-view-id>/login/login_edit_user_data.xhtml</from-view-id>
+		<from-view-id>/user/login_edit_user_data.xhtml</from-view-id>
 		<navigation-case>
 			<from-outcome>login_change_email_address</from-outcome>
-			<to-view-id>/login/login_change_email_address.xhtml</to-view-id>
+			<to-view-id>/user/login_change_email_address.xhtml</to-view-id>
 		</navigation-case>
 		<navigation-case>
 			<from-outcome>login_change_password</from-outcome>
-			<to-view-id>/login/login_change_password.xhtml</to-view-id>
+			<to-view-id>/user/login_change_password.xhtml</to-view-id>
 		</navigation-case>
 		<navigation-case>
 			<from-outcome>login_change_personal_data</from-outcome>
-			<to-view-id>/login/login_change_personal_data.xhtml</to-view-id>
+			<to-view-id>/user/login_change_personal_data.xhtml</to-view-id>
 		</navigation-case>
 	</navigation-rule>
 	<navigation-rule>
-		<from-view-id>/login/login_change_password.xhtml</from-view-id>
+		<from-view-id>/user/login_change_password.xhtml</from-view-id>
 		<navigation-case>
 			<from-outcome>login_data_saved</from-outcome>
-			<to-view-id>/login/login_data_saved.xhtml</to-view-id>
+			<to-view-id>/user/login_data_saved.xhtml</to-view-id>
 		</navigation-case>
 	</navigation-rule>
 	<navigation-rule>
-		<from-view-id>/login/login_change_email_address.xhtml</from-view-id>
+		<from-view-id>/user/login_change_email_address.xhtml</from-view-id>
 		<navigation-case>
 			<from-outcome>contact_data_saved</from-outcome>
-			<to-view-id>/login/login_contact_data_saved.xhtml</to-view-id>
+			<to-view-id>/user/login_contact_data_saved.xhtml</to-view-id>
 		</navigation-case>
 		<navigation-case>
 			<from-outcome>admin_delete_product</from-outcome>
@@ -183,10 +183,10 @@
 		</navigation-case>
 	</navigation-rule>
 	<navigation-rule>
-		<from-view-id>/login/login_change_personal_data.xhtml</from-view-id>
+		<from-view-id>/user/login_change_personal_data.xhtml</from-view-id>
 		<navigation-case>
 			<from-outcome>login_data_saved</from-outcome>
-			<to-view-id>/login/login_data_saved.xhtml</to-view-id>
+			<to-view-id>/user/login_data_saved.xhtml</to-view-id>
 		</navigation-case>
 		<navigation-case>
 			<from-outcome>admin_delete_category</from-outcome>
diff --git a/web/guest/user/login.xhtml b/web/guest/user/login.xhtml
new file mode 100644
index 00000000..0b0efb62
--- /dev/null
+++ b/web/guest/user/login.xhtml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
+	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
+	xmlns="http://www.w3.org/1999/xhtml"
+	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+	  xmlns:h="http://xmlns.jcp.org/jsf/html"
+	  xmlns:f="http://xmlns.jcp.org/jsf/core"
+	  >
+
+	<ui:composition template="/WEB-INF/templates/guest/guest_base.tpl" id="user_login">
+		<ui:define name="guest_title">#{msg.PAGE_TITLE_USER_LOGIN}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_USER_LOGIN}
+		</ui:define>
+
+		<ui:define name="content">
+			<div class="para">
+				<!-- TODO Internatialize this somehow //-->
+				Noch kein Benutzerkonto? Einfach <h:link id="user_register" outcome="user_register" title="Als Benutzer anmelden">hier</h:link> anmelden.
+			</div>
+
+			<div class="para">
+				<ui:include id="login_form" class="login_form" src="/WEB-INF/templates/guest/guest_login_form.tpl" />
+			</div>
+
+			<div class="para">
+				<h:link id="user_lost_password" outcome="user_lost_passwd" title="#{msg.LINK_TITLE_GUEST_LOGIN_LOST_PASSWORD}" value="#{msg.LINK_GUEST_LOGIN_LOST_PASSWORD}" />
+			</div>
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/guest/user/login_error.xhtml b/web/guest/user/login_error.xhtml
new file mode 100644
index 00000000..85361e74
--- /dev/null
+++ b/web/guest/user/login_error.xhtml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
+	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
+	xmlns="http://www.w3.org/1999/xhtml"
+	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+	  xmlns:h="http://xmlns.jcp.org/jsf/html"
+	  xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
+	  xmlns:f="http://xmlns.jcp.org/jsf/core"
+	  >
+
+	<ui:composition template="/WEB-INF/templates/guest/guest_base.tpl" id="login_error">
+		<ui:define name="guest_title">#{msg.PAGE_TITLE_USER_LOGIN_ERROR}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_USER_LOGIN_ERROR}
+		</ui:define>
+
+		<ui:define name="content">
+			Hier kommt die Fehlermeldung hin.
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/guest/user/lost_passwd.xhtml b/web/guest/user/lost_passwd.xhtml
new file mode 100644
index 00000000..c6c0848c
--- /dev/null
+++ b/web/guest/user/lost_passwd.xhtml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
+	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
+	xmlns="http://www.w3.org/1999/xhtml"
+	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+	  xmlns:h="http://xmlns.jcp.org/jsf/html"
+	  xmlns:f="http://xmlns.jcp.org/jsf/core"
+	  >
+
+	<ui:composition template="/WEB-INF/templates/guest/guest_base.tpl">
+		<ui:define name="guest_title">#{msg.PAGE_TITLE_USER_LOST_PASSWORD}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_USER_LOST_PASSWORD}
+		</ui:define>
+
+		<ui:define name="content">
+			<div class="para" id="user_lost_password_content">
+				<h:form id="lost_password_form">
+					<div class="table">
+						<div class="table_header">
+							#{msg.GUEST_LOST_PASSWORD_TITLE}
+						</div>
+
+						<fieldset id="login_data">
+							<legend title="#{msg.GUEST_LOST_PASSWORD_LEGEND_TITLE}">#{msg.GUEST_LOST_PASSWORD_LEGEND}</legend>
+
+							<div class="table_row">
+								<div class="table_left">
+									<h:outputLabel for="id" value="#{msg.ENTER_USER_NAME}" />
+								</div>
+
+								<div class="table_right">
+									<h:inputText class="input" id="id" size="10" maxlength="20" value="#{passwordRecoveryController.userId}" />
+								</div>
+
+								<div class="clear"></div>
+							</div>
+
+							<div class="table_header">
+								#{msg.GUEST_LOST_PASSWORD_NUMBER_OR_EMAIL}
+							</div>
+
+							<div class="table_row">
+								<div class="table_left">
+									<h:outputLabel for="email" value="#{msg.ENTER_EMAIL_ADDRESS}" />
+								</div>
+
+								<div class="table_right">
+									<h:inputText class="input" id="email" size="20" maxlength="255" value="#{passwordRecoveryController.emailAddress}" />
+								</div>
+
+								<div class="clear"></div>
+							</div>
+
+						</fieldset>
+
+						<div class="table_footer">
+							<h:commandButton class="reset" type="reset" value="#{msg.BUTTON_RESET_FORM}" />
+							<h:commandButton class="submit" type="submit" value="#{msg.BUTTON_CONTINUE_STEP_2}" action="#{passwordRecoveryController.doLostPasswordStep2()}" />
+						</div>
+					</div>
+				</h:form>
+			</div>
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/guest/user/register.xhtml b/web/guest/user/register.xhtml
new file mode 100644
index 00000000..b03c31e9
--- /dev/null
+++ b/web/guest/user/register.xhtml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
+	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
+	xmlns="http://www.w3.org/1999/xhtml"
+	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+	  xmlns:h="http://xmlns.jcp.org/jsf/html"
+	  xmlns:f="http://xmlns.jcp.org/jsf/core"
+	  >
+
+	<ui:composition template="/WEB-INF/templates/guest/guest_base.tpl">
+		<ui:define name="guest_title">#{msg.PAGE_TITLE_USER_REGISTER}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_USER_REGISTER}
+		</ui:define>
+
+		<ui:define name="content">
+			<div class="para">
+				#{msg.GUEST_ALREADY_USER_CONTINUE_LOGIN_1}
+				<h:link outcome="user_login" value="#{msg.CLICK_HERE}" />
+				#{msg.GUEST_ALREADY_USER_CONTINUE_LOGIN_2}
+			</div>
+
+			<div class="registration_form">
+				<ui:include src="/WEB-INF/templates/guest/guest_registration_form.tpl" />
+			</div>
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/guest/user/register_done.xhtml b/web/guest/user/register_done.xhtml
new file mode 100644
index 00000000..bbec38e6
--- /dev/null
+++ b/web/guest/user/register_done.xhtml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
+	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
+	xmlns="http://www.w3.org/1999/xhtml"
+	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+	  xmlns:h="http://xmlns.jcp.org/jsf/html"
+	  xmlns:f="http://xmlns.jcp.org/jsf/core"
+	  >
+
+	<ui:composition template="/WEB-INF/templates/guest/guest_base.tpl">
+		<ui:define name="guest_title">#{msg.PAGE_TITLE_USER_REGISTER_DONE}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_USER_REGISTER_DONE}
+		</ui:define>
+
+		<ui:define name="content">
+			<div class="para">
+				#{msg.GUEST_USER_REGISTRATION_COMPLETED}
+			</div>
+
+			<div class="registration_form">
+				<h:link id="resend_link" class="resend_link" value="#{msg.LINK_GUEST_RESENT_CONFIRMATION_LINK}" outcome="user_resend_link">
+					<f:param name="user_id" value="#{userController.userId}" />
+				</h:link>
+			</div>
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/guest/user/resend_link.xhtml b/web/guest/user/resend_link.xhtml
new file mode 100644
index 00000000..89da7508
--- /dev/null
+++ b/web/guest/user/resend_link.xhtml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
+	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
+	xmlns="http://www.w3.org/1999/xhtml"
+	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+	  xmlns:h="http://xmlns.jcp.org/jsf/html"
+	  xmlns:f="http://xmlns.jcp.org/jsf/core"
+	  >
+
+	<ui:composition template="/WEB-INF/templates/guest/guest_base.tpl">
+		<ui:define name="guest_title">#{msg.PAGE_TITLE_INDEX_RESEND_LINK}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_INDEX_RESEND_LINK}
+		</ui:define>
+
+		<ui:define name="content">
+			Here goes your content.
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/guest/user/show_addressbook.xhtml b/web/guest/user/show_addressbook.xhtml
new file mode 100644
index 00000000..1a1193fc
--- /dev/null
+++ b/web/guest/user/show_addressbook.xhtml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
+	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
+	xmlns="http://www.w3.org/1999/xhtml"
+	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+	  xmlns:h="http://xmlns.jcp.org/jsf/html"
+	  xmlns:f="http://xmlns.jcp.org/jsf/core">
+
+	<f:metadata>
+		<f:viewParam id="addressbookId" name="addressbookId" value="#{addressbookController.addressbookId}" required="true" requiredMessage="#{msg.PARAMETER_ADDRESSBOOK_ID_MISSING}" converterMessage="#{msg.PARAMETER_ADDRESSBOOK_ID_INVALID}" validatorMessage="#{msg.PARAMETER_ADDRESSBOOK_ID_NOT_FOUND}">
+			<f:convertNumber for="addressbookId" type="number" minIntegerDigits="1" maxIntegerDigits="20" />
+			<f:validator for="addressbookId" validatorId="AddressbookIdValidator" />
+		</f:viewParam>
+	</f:metadata>
+
+	<ui:composition template="/WEB-INF/templates/#{loginController.templateType}/#{loginController.templateType}_base.tpl">
+		<ui:define name="login_title">#{msg.PAGE_TITLE_USER_SHOW_ADDRESSBOOK}</ui:define>
+		<ui:define name="guest_title">#{msg.PAGE_TITLE_INDEX_SHOW_ADDRESSBOOK}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_USER_SHOW_ADDRESSBOOK}
+		</ui:define>
+
+		<ui:define name="content">
+			<h:panelGrid headerClass="table_header" styleClass="table" columns="2" rendered="#{addressbookController.loadAddressbook()}">
+				<f:facet name="header">#{msg.TABLE_HEADER_SHOW_ADDRESSBOOK}</f:facet>
+
+				<h:outputLabel for="addressbookName" class="table_label">#{msg.ADDRESSBOOK_NAME}</h:outputLabel>
+				<h:outputText id="addressbookName" value="#{addressbookController.addressbookName}" />
+
+				<h:outputLabel for="userProfileLink" class="table_label">#{msg.ADDRESSBOOK_OWNER}</h:outputLabel>
+				<ui:include src="/WEB-INF/templates/generic/user_profile_link.tpl">
+					<ui:param name="user" value="#{addressbookController.addressbookUser}" />
+				</ui:include>
+
+				<h:outputLabel for="addressbookCreated" class="table_label">#{msg.ADDRESSBOOK_CREATED}</h:outputLabel>
+				<h:outputFormat id="addressbookCreated" value="#{addressbookController.addressbook.addressbookCreated.time}" title="#{msg.ADDRESSBOOK_CREATED_TITLE}">
+					<f:convertDateTime for="addressbookCreated" type="both" timeStyle="short" dateStyle="medium" />
+				</h:outputFormat>
+
+				<h:outputLabel for="addressbookStatus" class="table_label">#{msg.ADDRESSBOOK_STATUS}</h:outputLabel>
+				<h:outputText id="addressbookStatus" value="#{msg[addressbookController.addressbook.addressbookStatus.messageKey]}" title="#{msg.ADDRESSBOOK_STATUS_TITLE}" />
+
+				<f:facet name="footer">
+					<h:outputText id="ownProfileInvible" class="notice" value="#{msg.USER_NOT_LOGGED_IN}" rendered="#{not loginController.isUserLoggedIn()}" />
+					<h:outputText id="ownProfileInvible" class="notice" value="#{msg.LOGIN_OWN_PROFILE_INVISIBLE}" rendered="#{loginController.isUserLoggedIn() and loginController.isInvisible()}" />
+
+					<ui:fragment rendered="#{loginController.isUserLoggedIn() and not loginController.isInvisible()}">
+						<h:link id="startSharing" outcome="login_start_sharing_addressbook" value="#{msg.LINK_LOGIN_START_SHARING_ADDRESSBOOK}" title="#{msg.LINK_LOGIN_START_SHARING_ADDRESSBOOK_TITLE}" rendered="#{addressbookController.isOwnAddressbook()}" />
+
+						<h:outputText value="Bla bla" rendered="#{addressbookController.isOtherAddressbook()}" />
+					</ui:fragment>
+				</f:facet>
+			</h:panelGrid>
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/guest/user/show_addressbook_entries.xhtml b/web/guest/user/show_addressbook_entries.xhtml
new file mode 100644
index 00000000..0164c1a5
--- /dev/null
+++ b/web/guest/user/show_addressbook_entries.xhtml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
+	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
+	xmlns="http://www.w3.org/1999/xhtml"
+	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+	  xmlns:h="http://xmlns.jcp.org/jsf/html"
+	  xmlns:f="http://xmlns.jcp.org/jsf/core"
+	  >
+
+	<ui:composition template="/WEB-INF/templates/login/login_base.tpl">
+		<ui:define name="login_title">#{msg.PAGE_TITLE_USER_SHOW_ADDRESSBOOK_ENTRIES}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_USER_SHOW_ADDRESSBOOK_ENTRIES}
+		</ui:define>
+
+		<ui:define name="content">
+			Here goes your content.
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/guest/user/user_list.xhtml b/web/guest/user/user_list.xhtml
new file mode 100644
index 00000000..60b60b7c
--- /dev/null
+++ b/web/guest/user/user_list.xhtml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
+	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
+	xmlns="http://www.w3.org/1999/xhtml"
+	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+	  xmlns:h="http://xmlns.jcp.org/jsf/html"
+	  xmlns:f="http://xmlns.jcp.org/jsf/core">
+
+	<ui:composition template="/WEB-INF/templates/#{loginController.templateType}/#{loginController.templateType}_base.tpl">
+		<ui:define name="login_title">#{msg.PAGE_TITLE_USER_LIST}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_USER_LIST}
+		</ui:define>
+
+		<ui:define name="content">
+			<div class="table_big">
+				<div class="table_header">
+					#{msg.TABLE_HEADER_USER_LIST}
+				</div>
+
+				<h:dataTable id="userList" var="user" value="#{userController.allVisibleUsers()}" headerClass="table_header_column25" summary="#{msg.TABLE_SUMMARY_USER_LIST}" rendered="#{userController.isVisibleUserFound()}">
+					<h:column>
+						<f:facet name="header">#{msg.USER_NAME}</f:facet>
+						<ui:include src="/WEB-INF/templates/generic/user_profile_link.tpl">
+							<ui:param name="user" value="#{user}" />
+						</ui:include>
+					</h:column>
+
+					<h:column>
+						<f:facet name="header">#{msg.USER_CREATED}</f:facet>
+						<h:outputFormat id="userCreated" value="#{user.userCreated.time}" title="#{msg.USER_CREATED_TITLE}" />
+					</h:column>
+
+					<h:column>
+						<f:facet name="header">#{msg.USER_LIST_SHARING_ADDRESSBOOKS}</f:facet>
+						<ui:fragment rendered="#{loginController.isUserLoggedIn()}">
+							<h:link outcome="login_list_sharing_addressbooks" value="#{msg.LINK_LOGIN_LIST_SHARING_ADDRESSBOOKS}" title="#{msg.LINK_LOGIN_LIST_SHARING_ADDRESSBOOKS_TITLE}">
+								<f:param name="userId" value="#{user.userId}" />
+							</h:link>
+						</ui:fragment>
+						<ui:fragment rendered="#{loginController.isGuest()}">
+							<h:outputText id="userShared" value="#{addressbookController.countAllUserSharedAddressbooks(user)}" />
+						</ui:fragment>
+					</h:column>
+				</h:dataTable>
+			</div>
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/guest/user/user_profile.xhtml b/web/guest/user/user_profile.xhtml
new file mode 100644
index 00000000..0e58740f
--- /dev/null
+++ b/web/guest/user/user_profile.xhtml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
+	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
+	xmlns="http://www.w3.org/1999/xhtml"
+	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+	  xmlns:h="http://xmlns.jcp.org/jsf/html"
+	  xmlns:f="http://xmlns.jcp.org/jsf/core"
+	  xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">
+
+	<f:metadata>
+		<f:viewParam id="userId" name="userId" value="#{userController.userId}" required="true" requiredMessage="#{msg.PARAMETER_USER_ID_MISSING}" converterMessage="#{msg.PARAMETER_USER_ID_INVALID}" validatorMessage="#{msg.PARAMETER_USER_ID_NOT_FOUND}">
+			<f:convertNumber for="userId" type="number" minIntegerDigits="1" maxIntegerDigits="20" />
+			<f:validator for="userId" validatorId="UserIdValidator" />
+		</f:viewParam>
+	</f:metadata>
+
+	<ui:composition template="/WEB-INF/templates/#{loginController.templateType}/#{loginController.templateType}_base.tpl">
+		<ui:define name="login_title">#{msg.PAGE_TITLE_LOGIN_USER_PROFILE}</ui:define>
+		<ui:define name="guest_title">#{msg.PAGE_TITLE_INDEX_USER_PROFILE}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_INDEX_USER_PROFILE}
+		</ui:define>
+
+		<ui:define name="content">
+			<c:choose>
+				<c:when test="#{userController.isUserIdEmpty()}">
+					<ui:include src="/WEB-INF/templates/generic/userid_error.tpl" />
+				</c:when>
+
+				<c:when test="#{profileController.isProfileLinkVisibleById(userController.userId)}">
+					<div align="center">
+						<h:panelGrid styleClass="table" headerClass="table_header" footerClass="table_footer">
+							<f:facet name="header">
+								#{msg.PUBLIC_USER_PROFILE}
+							</f:facet>
+						</h:panelGrid>
+					</div>
+				</c:when>
+
+				<c:otherwise>
+					#{msg.ERROR_PROFILE_NOT_VISIBLE}
+				</c:otherwise>
+			</c:choose>
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/login/index.xhtml b/web/login/index.xhtml
deleted file mode 100644
index dafff409..00000000
--- a/web/login/index.xhtml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-	  xmlns:ui="http://java.sun.com/jsf/facelets"
-	  xmlns:h="http://xmlns.jcp.org/jsf/html"
-	  xmlns:f="http://xmlns.jcp.org/jsf/core"
-	  >
-
-	<ui:composition template="/WEB-INF/templates/login/login_base.tpl">
-		<ui:define name="guest_title">#{msg.PAGE_TITLE_LOGIN_FOO}</ui:define>
-
-		<ui:define name="menu">
-			<ui:include id="menu" class="login_menu" src="/WEB-INF/templates/login/login_menu.tpl" />
-		</ui:define>
-
-		<ui:define name="content_header">
-			#{msg.SUB_TITLE_LOGIN_FOO}
-		</ui:define>
-
-		<ui:define name="content">
-			Here goes your content.
-		</ui:define>
-
-		<ui:define name="footer">
-			<ui:include id="footer" class="login_footer" src="/WEB-INF/templates/login/login_footer.tpl" />
-		</ui:define>
-	</ui:composition>
-</html>
diff --git a/web/login/login_add_addressbook.xhtml b/web/login/login_add_addressbook.xhtml
deleted file mode 100644
index 7f1c8579..00000000
--- a/web/login/login_add_addressbook.xhtml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html
-	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
-	xmlns="http://www.w3.org/1999/xhtml"
-	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
-	  xmlns:h="http://xmlns.jcp.org/jsf/html"
-	  xmlns:f="http://xmlns.jcp.org/jsf/core"
-	  >
-
-	<ui:composition template="/WEB-INF/templates/login/login_base.tpl">
-		<ui:define name="login_title">#{msg.PAGE_TITLE_LOGIN_ADD_ADDRESSBOOK}</ui:define>
-
-		<ui:define name="content_header">
-			#{msg.CONTENT_TITLE_LOGIN_ADD_ADDRESSBOOK}
-		</ui:define>
-
-		<ui:define name="content">
-			<ui:fragment rendered="#{loginController.isUserLoggedIn()}">
-				<h:form id="add_addressbook" acceptcharset="utf-8">
-					<div class="table">
-						<div class="table_header">
-							#{msg.FORM_LOGIN_ADD_ADDRESSBOOK_TITLE}
-						</div>
-
-						<div class="table_row">
-							<div class="table_left">
-								<h:outputLabel for="addressbookName" value="#{msg.LOGIN_ENTER_ADDRESSBOOK_NAME}"/>
-							</div>
-
-							<div class="table_right">
-								<h:inputText class="input" id="addressbookName" value="#{addressbookController.addressbookName}" maxlength="50" size="20" title="#{msg.LOGIN_ENTER_ADDRESSBOOK_NAME_TITLE}" required="true" requiredMessage="#{msg.LOGIN_ADDRESSBOOK_NAME_REQUIRED_MESSAGE}">
-									<f:validator for="addressbookName" validatorId="AddressbookNameValidator" />
-								</h:inputText>
-							</div>
-						</div>
-
-						<div class="table_footer">
-							<h:commandButton class="reset" type="reset" value="#{msg.BUTTON_RESET_FORM}" />
-							<h:commandButton class="submit" type="submit" id="register" value="#{msg.BUTTON_LOGIN_ADD_ADDRESSBOOK}" action="#{addressbookController.addAddressbook()}" />
-						</div>
-					</div>
-				</h:form>
-			</ui:fragment>
-
-			<ui:fragment rendered="#{not loginController.isUserLoggedIn()}">
-				<ui:include id="login_only" src="/WEB-INF/templates/generic/user_not_logged_in.tpl" />
-			</ui:fragment>
-		</ui:define>
-	</ui:composition>
-</html>
diff --git a/web/login/login_change_email_address.xhtml b/web/login/login_change_email_address.xhtml
deleted file mode 100644
index 702312d8..00000000
--- a/web/login/login_change_email_address.xhtml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html
-	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
-	xmlns="http://www.w3.org/1999/xhtml"
-	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
-	  xmlns:h="http://xmlns.jcp.org/jsf/html"
-	  xmlns:f="http://xmlns.jcp.org/jsf/core"
-	  >
-
-	<ui:composition template="/WEB-INF/templates/login/login_base.tpl">
-		<ui:define name="login_title">#{msg.PAGE_TITLE_LOGIN_CHANGE_EMAIL_ADDRESS}</ui:define>
-
-		<ui:define name="content_header">
-			#{msg.CONTENT_TITLE_LOGIN_CHANGE_EMAIL_ADDRESS}
-		</ui:define>
-
-		<ui:define name="content">
-			<ui:fragment rendered="#{loginController.isUserLoggedIn()}">
-				<div class="table">
-					<div class="table_header">
-						#{msg.LOGIN_CHANGE_EMAIL_ADDRESS_TITLE}
-					</div>
-
-					<h:form id="login_form">
-						<div class="para">
-							<fieldset id="change_email">
-								<legend title="#{msg.LOGIN_CHANGE_EMAIL_LEGEND_TITLE}">#{msg.LOGIN_CHANGE_EMAIL_LEGEND}</legend>
-
-								<div class="table_row">
-									<div class="table_left">
-										#{msg.LOGIN_CHANGE_EMAIL_OLD_ADDRESS}
-									</div>
-
-									<div class="table_right">
-										#{userController.emailAddress}
-									</div>
-
-									<div class="clear"></div>
-								</div>
-
-								<div class="table_row">
-									<div class="table_left">
-										<h:outputLabel for="emailAddress1" value="#{msg.LOGIN_CHANGE_EMAIL_ENTER_EMAIL1}" />
-									</div>
-
-									<div class="table_right">
-										<h:inputText class="input" id="emailAddress1" size="20" maxlength="255" value="#{emailChangeController.emailAddress1}" required="true" />
-									</div>
-
-									<div class="clear"></div>
-								</div>
-
-								<div class="table_row">
-									<div class="table_left">
-										<h:outputLabel for="emailAddress2" value="#{msg.LOGIN_CHANGE_EMAIL_ENTER_EMAIL2}" />
-									</div>
-
-									<div class="table_right">
-										<h:inputText class="input" id="emailAddress2" size="20" maxlength="255" value="#{emailChangeController.emailAddress2}" required="true" />
-									</div>
-
-									<div class="clear"></div>
-								</div>
-							</fieldset>
-						</div>
-
-						<ui:include src="/WEB-INF/templates/login/login_enter_current_password.tpl" />
-
-						<div class="table_footer">
-							<h:commandButton class="reset" type="reset" value="#{msg.BUTTON_RESET_FORM}" />
-							<h:commandButton class="submit" type="submit" id="change_email" value="#{msg.BUTTON_CHANGE_EMAIL_ADDRESS}" action="#{emailChangeController.doChangeEmailAddress()}" />
-						</div>
-					</h:form>
-				</div>
-			</ui:fragment>
-
-			<ui:fragment rendered="#{not loginController.isUserLoggedIn()}">
-				<ui:include id="login_only" src="/WEB-INF/templates/generic/user_not_logged_in.tpl" />
-			</ui:fragment>
-		</ui:define>
-	</ui:composition>
-</html>
diff --git a/web/login/login_change_password.xhtml b/web/login/login_change_password.xhtml
deleted file mode 100644
index bfd384d4..00000000
--- a/web/login/login_change_password.xhtml
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html
-	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
-	xmlns="http://www.w3.org/1999/xhtml"
-	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
-	  xmlns:h="http://xmlns.jcp.org/jsf/html"
-	  xmlns:f="http://xmlns.jcp.org/jsf/core"
-	  >
-
-	<ui:composition template="/WEB-INF/templates/login/login_base.tpl">
-		<ui:define name="login_title">#{msg.PAGE_TITLE_LOGIN_CHANGE_PASSWORD}</ui:define>
-
-		<ui:define name="content_header">
-			#{msg.CONTENT_TITLE_LOGIN_CHANGE_PASSWORD}
-		</ui:define>
-
-		<ui:define name="content">
-			<ui:fragment rendered="#{loginController.isUserLoggedIn()}">
-				<div class="table">
-					<div class="table_header">
-						#{msg.LOGIN_CHANGE_PASSWORD_TITLE}
-					</div>
-
-					<h:form id="login_form">
-						<div class="para">
-							<fieldset id="change_password">
-								<legend title="#{msg.LOGIN_CHANGE_PASSWORD_LEGEND_TITLE}">#{msg.LOGIN_CHANGE_PASSWORD_LEGEND}</legend>
-
-								<div class="table_row">
-									<div class="table_left">
-										<h:outputLabel for="password1" value="#{msg.GUEST_REGISTRATION_ENTER_PASSWORD1}" />
-									</div>
-
-									<div class="table_right">
-										<h:inputSecret class="input" id="password1" size="10" maxlength="255" value="#{loginController.userPassword}" required="true" />
-									</div>
-
-									<div class="clear"></div>
-								</div>
-
-								<div class="table_row">
-									<div class="table_left">
-										<h:outputLabel for="password2" value="#{msg.GUEST_REGISTRATION_ENTER_PASSWORD2}" />
-									</div>
-
-									<div class="table_right">
-										<h:inputSecret class="input" id="password2" size="10" maxlength="255" value="#{loginController.userPasswordRepeat}" required="true" />
-									</div>
-
-									<div class="clear"></div>
-								</div>
-							</fieldset>
-						</div>
-
-						<ui:include src="/WEB-INF/templates/login/login_enter_current_password.tpl" />
-
-						<div class="table_footer">
-							<h:commandButton class="reset" type="reset" value="#{msg.BUTTON_RESET_FORM}" />
-							<h:commandButton class="submit" type="submit" id="change_password" value="#{msg.BUTTON_CHANGE_PASSWORD}" action="#{userController.changePassword()}" />
-						</div>
-					</h:form>
-				</div>
-			</ui:fragment>
-
-			<ui:fragment rendered="#{not loginController.isUserLoggedIn()}">
-				<ui:include id="login_only" src="/WEB-INF/templates/generic/user_not_logged_in.tpl" />
-			</ui:fragment>
-		</ui:define>
-	</ui:composition>
-</html>
diff --git a/web/login/login_change_personal_data.xhtml b/web/login/login_change_personal_data.xhtml
deleted file mode 100644
index e4c482c9..00000000
--- a/web/login/login_change_personal_data.xhtml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html
-	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
-	xmlns="http://www.w3.org/1999/xhtml"
-	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
-	  xmlns:h="http://xmlns.jcp.org/jsf/html"
-	  xmlns:f="http://xmlns.jcp.org/jsf/core"
-	  >
-
-	<ui:composition template="/WEB-INF/templates/login/login_base.tpl">
-		<ui:define name="login_title">#{msg.PAGE_TITLE_LOGIN_CHANGE_PERSONAL_DATA}</ui:define>
-
-		<ui:define name="content_header">
-			#{msg.CONTENT_TITLE_LOGIN_CHANGE_PERSONAL_DATA}
-		</ui:define>
-
-		<ui:define name="content">
-			<ui:fragment rendered="#{loginController.isUserLoggedIn()}">
-				<div class="table">
-					<div class="table_header">
-						#{msg.LOGIN_CHANGE_PERSONAL_DATA_TITLE}
-					</div>
-
-					<h:form id="login_change_personal_form">
-						<ui:include src="/WEB-INF/templates/generic/form_personal_data.tpl" />
-
-						<ui:include src="/WEB-INF/templates/login/login_enter_current_password.tpl" />
-
-						<ui:include src="/WEB-INF/templates/guest/guest_privacy_terms.tpl" />
-
-						<div class="table_footer">
-							<h:commandButton class="reset" type="reset" value="#{msg.BUTTON_RESET_FORM}" />
-							<h:commandButton class="submit" type="submit" id="change_personal_data" value="#{msg.BUTTON_CHANGE_PERSONAL_DATA}" action="#{userController.doChangePersonalData()}" />
-						</div>
-					</h:form>
-				</div>
-			</ui:fragment>
-
-			<ui:fragment rendered="#{not loginController.isUserLoggedIn()}">
-				<ui:include id="login_only" src="/WEB-INF/templates/generic/user_not_logged_in.tpl" />
-			</ui:fragment>
-		</ui:define>
-	</ui:composition>
-</html>
diff --git a/web/login/login_contact_data_saved.xhtml b/web/login/login_contact_data_saved.xhtml
deleted file mode 100644
index 25b69679..00000000
--- a/web/login/login_contact_data_saved.xhtml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html
-	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
-	xmlns="http://www.w3.org/1999/xhtml"
-	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
-	  xmlns:h="http://xmlns.jcp.org/jsf/html"
-	  xmlns:f="http://xmlns.jcp.org/jsf/core"
-	  >
-
-	<ui:composition template="/WEB-INF/templates/login/login_base.tpl">
-		<ui:define name="login_title">#{msg.PAGE_TITLE_LOGIN_CONTACT_DATA_SAVED}</ui:define>
-
-		<ui:define name="content_header">
-			#{msg.CONTENT_TITLE_LOGIN_CONTACT_DATA_SAVED}
-		</ui:define>
-
-		<ui:define name="content">
-			<ui:fragment rendered="#{loginController.isUserLoggedIn()}">
-				<ui:include id="message_box" src="/WEB-INF/templates/generic/message_box.tpl">
-					<ui:param name="message" value="#{msg.LOGIN_MESSAGE_DATA_SAVED}" />
-				</ui:include>
-			</ui:fragment>
-
-			<ui:fragment rendered="#{not loginController.isUserLoggedIn()}">
-				<ui:include id="login_only" src="/WEB-INF/templates/generic/user_not_logged_in.tpl" />
-			</ui:fragment>
-		</ui:define>
-	</ui:composition>
-</html>
diff --git a/web/login/login_data_saved.xhtml b/web/login/login_data_saved.xhtml
deleted file mode 100644
index 0fd6316a..00000000
--- a/web/login/login_data_saved.xhtml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html
-	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
-	xmlns="http://www.w3.org/1999/xhtml"
-	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
-	  xmlns:h="http://xmlns.jcp.org/jsf/html"
-	  xmlns:f="http://xmlns.jcp.org/jsf/core"
-	  >
-
-	<ui:composition template="/WEB-INF/templates/login/login_base.tpl">
-		<ui:define name="login_title">#{msg.PAGE_TITLE_LOGIN_DATA_SAVED}</ui:define>
-
-		<ui:define name="content_header">
-			#{msg.CONTENT_TITLE_LOGIN_DATA_SAVED}
-		</ui:define>
-
-		<ui:define name="content">
-			<ui:fragment rendered="#{loginController.isUserLoggedIn()}">
-				<ui:include id="message_box" src="/WEB-INF/templates/generic/message_box.tpl">
-					<ui:param name="message" value="#{msg.LOGIN_MESSAGE_DATA_SAVED}" />
-				</ui:include>
-			</ui:fragment>
-
-			<ui:fragment rendered="#{not loginController.isUserLoggedIn()}">
-				<ui:include id="login_only" src="/WEB-INF/templates/generic/user_not_logged_in.tpl" />
-			</ui:fragment>
-		</ui:define>
-	</ui:composition>
-</html>
diff --git a/web/login/login_edit_user_data.xhtml b/web/login/login_edit_user_data.xhtml
deleted file mode 100644
index 8cd727cb..00000000
--- a/web/login/login_edit_user_data.xhtml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html
-	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
-	xmlns="http://www.w3.org/1999/xhtml"
-	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
-	  xmlns:h="http://xmlns.jcp.org/jsf/html"
-	  xmlns:f="http://xmlns.jcp.org/jsf/core"
-	  >
-
-	<ui:composition template="/WEB-INF/templates/login/login_base.tpl">
-		<ui:define name="login_title">#{msg.PAGE_TITLE_LOGIN_EDIT_USER_DATA}</ui:define>
-
-		<ui:define name="content_header">
-			#{msg.CONTENT_TITLE_LOGIN_EDIT_USER_DATA}
-		</ui:define>
-
-		<ui:define name="content">
-			<ui:fragment rendered="#{loginController.isUserLoggedIn()}">
-				<div class="table">
-					<div class="table_header">
-						#{msg.LOGIN_EDIT_USER_DATA_TITLE}
-					</div>
-
-					<div class="para notice">
-						<h:outputText value="#{msg.LOGIN_CHOOSE_PERSONAL_DATA_EMAIL_PASSWORD_NOTICE}" />
-					</div>
-
-					<div class="para">
-						<ul>
-							<li>
-								<h:link title="#{msg.LINK_LOGIN_CHANGE_PERSONAL_DATA_TITLE}" outcome="login_change_personal_data" value="#{msg.LINK_LOGIN_CHANGE_PERSONAL_DATA}" />
-							</li>
-							<li>
-								<h:link title="#{msg.LINK_LOGIN_CHANGE_EMAIL_ADDRESS_TITLE}" outcome="login_change_email_address" value="#{msg.LINK_LOGIN_CHANGE_EMAIL_ADDRESS}" />
-							</li>
-							<li>
-								<h:link title="#{msg.LINK_LOGIN_CHANGE_PASSWORD_TITLE}" outcome="login_change_password" value="#{msg.LINK_LOGIN_CHANGE_PASSWORD}" />
-							</li>
-						</ul>
-					</div>
-				</div>
-			</ui:fragment>
-
-			<ui:fragment rendered="#{not loginController.isUserLoggedIn()}">
-				<ui:include id="login_only" src="/WEB-INF/templates/generic/user_not_logged_in.tpl" />
-			</ui:fragment>
-		</ui:define>
-	</ui:composition>
-</html>
diff --git a/web/login/login_index.xhtml b/web/login/login_index.xhtml
deleted file mode 100644
index ef4281d8..00000000
--- a/web/login/login_index.xhtml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html
-	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
-	xmlns="http://www.w3.org/1999/xhtml"
-	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
-	  xmlns:h="http://xmlns.jcp.org/jsf/html"
-	  xmlns:f="http://xmlns.jcp.org/jsf/core"
-	  >
-
-	<ui:composition template="/WEB-INF/templates/login/login_base.tpl">
-		<ui:define name="login_title">#{msg.PAGE_TITLE_LOGIN_HOME}</ui:define>
-
-		<ui:define name="content_header">
-			#{msg.CONTENT_TITLE_LOGIN_HOME}
-		</ui:define>
-
-		<ui:define name="content">
-			<ui:fragment rendered="#{loginController.isUserLoggedIn()}">
-				Here goes your content.
-			</ui:fragment>
-
-			<ui:fragment rendered="#{not loginController.isUserLoggedIn()}">
-				<ui:include id="login_only" src="/WEB-INF/templates/generic/user_not_logged_in.tpl" />
-			</ui:fragment>
-		</ui:define>
-	</ui:composition>
-</html>
diff --git a/web/login/login_list_sharing_addressbooks.xhtml b/web/login/login_list_sharing_addressbooks.xhtml
deleted file mode 100644
index 1698cb3d..00000000
--- a/web/login/login_list_sharing_addressbooks.xhtml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html
-	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
-	xmlns="http://www.w3.org/1999/xhtml"
-	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
-	  xmlns:h="http://xmlns.jcp.org/jsf/html"
-	  xmlns:f="http://xmlns.jcp.org/jsf/core"
-	  >
-
-	<f:metadata>
-		<f:viewParam id="userId" name="userId" value="#{shareController.shareeUserId}" required="true" requiredMessage="#{msg.PARAMETER_USER_ID_MISSING}" converterMessage="#{msg.PARAMETER_USER_ID_INVALID}" validatorMessage="#{msg.PARAMETER_USER_ID_NOT_FOUND}">
-			<f:convertNumber for="userId" type="number" minIntegerDigits="1" maxIntegerDigits="20" />
-			<f:validator for="userId" validatorId="UserIdValidator" />
-		</f:viewParam>
-	</f:metadata>
-
-	<ui:composition template="/WEB-INF/templates/login/login_base.tpl">
-		<ui:define name="login_title">#{msg.PAGE_TITLE_LOGIN_LIST_SHARING_ADDRESSBOOKS}</ui:define>
-
-		<ui:define name="content_header">
-			#{msg.CONTENT_TITLE_LOGIN_LIST_SHARING_ADDRESSBOOKS}
-		</ui:define>
-
-		<ui:define name="content">
-			<ui:fragment rendered="#{loginController.isUserLoggedIn()}">
-				<ui:fragment rendered="#{shareController.isShareeUserIdSet()}">
-					Here goes your content.
-				</ui:fragment>
-
-				<ui:fragment rendered="#{shareController.isShareeUserIdEmpty()}">
-					<ui:include src="/WEB-INF/templates/generic/userid_error.tpl" />
-				</ui:fragment>
-			</ui:fragment>
-
-			<ui:fragment rendered="#{not loginController.isUserLoggedIn()}">
-				<ui:include id="login_only" src="/WEB-INF/templates/generic/user_not_logged_in.tpl" />
-			</ui:fragment>
-		</ui:define>
-	</ui:composition>
-</html>
diff --git a/web/login/login_other_addressbooks.xhtml b/web/login/login_other_addressbooks.xhtml
deleted file mode 100644
index eef9d0bb..00000000
--- a/web/login/login_other_addressbooks.xhtml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html
-	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
-	xmlns="http://www.w3.org/1999/xhtml"
-	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
-	  xmlns:h="http://xmlns.jcp.org/jsf/html"
-	  xmlns:f="http://xmlns.jcp.org/jsf/core"
-	  >
-
-	<ui:composition template="/WEB-INF/templates/login/login_base.tpl">
-		<ui:define name="login_title">#{msg.PAGE_TITLE_LOGIN_OTHER_ADDRESSBOOKS}</ui:define>
-
-		<ui:define name="content_header">
-			#{msg.CONTENT_TITLE_LOGIN_OTHER_ADDRESSBOOKS}
-		</ui:define>
-
-		<ui:define name="content">
-			<ui:fragment rendered="#{loginController.isUserLoggedIn()}">
-				Here goes your content.
-			</ui:fragment>
-
-			<ui:fragment rendered="#{not loginController.isUserLoggedIn()}">
-				<ui:include id="login_only" src="/WEB-INF/templates/generic/user_not_logged_in.tpl" />
-			</ui:fragment>
-		</ui:define>
-	</ui:composition>
-</html>
diff --git a/web/login/login_own_addressbooks.xhtml b/web/login/login_own_addressbooks.xhtml
deleted file mode 100644
index 48c08973..00000000
--- a/web/login/login_own_addressbooks.xhtml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html
-	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
-	xmlns="http://www.w3.org/1999/xhtml"
-	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
-	  xmlns:h="http://xmlns.jcp.org/jsf/html"
-	  xmlns:f="http://xmlns.jcp.org/jsf/core"
-	  >
-
-	<ui:composition template="/WEB-INF/templates/login/login_base.tpl">
-		<ui:define name="login_title">#{msg.PAGE_TITLE_LOGIN_OWN_ADDRESSBOOKS}</ui:define>
-
-		<ui:define name="content_header">
-			#{msg.CONTENT_TITLE_LOGIN_OWN_ADDRESSBOOKS}
-		</ui:define>
-
-		<ui:define name="content">
-			<ui:fragment rendered="#{loginController.isUserLoggedIn()}">
-				<div class="table">
-					<div class="table_header">
-						#{msg.TABLE_HEADER_LIST_OWN_ADDRESSBOOKS}
-					</div>
-
-					<div class="para">
-						<h:dataTable id="table_own_addressbooks" var="addressbook" value="#{addressbookController.allAddressbooks()}" styleClass="table" headerClass="table_data_column" summary="#{msg.TABLE_SUMMARY_LOGIN_LIST_OWN_ADDRESSBOOKS}" rendered="#{addressbookController.hasCreatedAddressbooks()}">
-							<h:column>
-								<f:facet name="header">#{msg.ADDRESSBOOK_NAME}</f:facet>
-
-								<h:link outcome="user_show_addressbook" title="#{msg.LINK_SHOW_ADDRESSBOOK_TITLE}">
-									<f:param name="addressbookId" value="#{addressbook.addressbookId}" />
-									<h:outputText id="addressbookName" value="#{addressbook.addressbookName}" title="#{msg.ADDRESSBOOK_NAME_TITLE}" />
-								</h:link>
-							</h:column>
-
-							<h:column>
-								<f:facet name="header">#{msg.ADDRESSBOOK_TOTAL_ENTRIES}</f:facet>
-
-								<h:link outcome="show_addressbook_entries" title="#{msg.LINK_SHOW_ADDRESSBOOK_ENTRIES_TITLE}">
-									<f:param name="addressbookId" value="#{addressbook.addressbookId}" />
-									<h:outputText id="addressbookEntries" value="#{addressbookController.allEntriesSize(addressbook)}" title="#{msg.ADDRESSBOOK_TOTAL_ENTRIES_TITLE}" />
-								</h:link>
-							</h:column>
-
-							<h:column>
-								<f:facet name="header">#{msg.ADDRESSBOOK_CREATED}</f:facet>
-
-								<h:outputFormat id="addressbookCreated" value="#{addressbook.addressbookCreated.time}" title="#{msg.ADDRESSBOOK_CREATED_TITLE}">
-									<f:convertDateTime for="addressbookCreated" type="both" timeStyle="short" dateStyle="medium" />
-								</h:outputFormat>
-							</h:column>
-						</h:dataTable>
-					</div>
-
-					<div class="table_footer">
-						<h:link id="add_first_addressbook" outcome="login_add_addressbook" value="#{msg.LINK_LOGIN_ADD_FIRST_ADDRESSBOOK}" title="#{msg.LINK_LOGIN_ADD_FIRST_ADDRESSBOOK_TITLE}" rendered="#{addressbookController.hasCreatedAddressbooks() == false}" />
-						<h:link id="add_additional_addressbook" outcome="login_add_addressbook" value="#{msg.LINK_LOGIN_ADD_ADDITIONAL_ADDRESSBOOK}" title="#{msg.LINK_LOGIN_ADD_ADDITIONAL_ADDRESSBOOK_TITLE}" rendered="#{addressbookController.hasCreatedAddressbooks()}" />
-					</div>
-				</div>
-			</ui:fragment>
-
-			<ui:fragment rendered="#{not loginController.isUserLoggedIn()}">
-				<ui:include id="login_only" src="/WEB-INF/templates/generic/user_not_logged_in.tpl" />
-			</ui:fragment>
-		</ui:define>
-	</ui:composition>
-</html>
diff --git a/web/login/login_shared_addressbooks.xhtml b/web/login/login_shared_addressbooks.xhtml
deleted file mode 100644
index 2c52fabe..00000000
--- a/web/login/login_shared_addressbooks.xhtml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html
-	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
-	xmlns="http://www.w3.org/1999/xhtml"
-	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
-	  xmlns:h="http://xmlns.jcp.org/jsf/html"
-	  xmlns:f="http://xmlns.jcp.org/jsf/core">
-
-	<ui:composition template="/WEB-INF/templates/login/login_base.tpl">
-		<ui:define name="login_title">#{msg.PAGE_TITLE_LOGIN_SHARED_ADDRESSBOOKS}</ui:define>
-
-		<ui:define name="content_header">
-			#{msg.CONTENT_TITLE_LOGIN_SHARED_ADDRESSBOOKS}
-		</ui:define>
-
-		<ui:define name="content">
-			<ui:fragment rendered="#{loginController.isUserLoggedIn()}">
-				<div class="table">
-					<div class="table_header">
-						#{msg.LOGIN_TABLE_HEADER_SHARED_ADDRESSBOOKS}
-					</div>
-
-					<div class="para">
-						<h:dataTable id="sharedAddressbooks" var="share" value="#{shareController.allShares()}" headerClass="table_data_column" summary="#{msg.TABLE_SUMMARY_LOGIN_SHARED_ADDRESSBOOKS}" rendered="#{shareController.isSharingAddressbooks()}">
-							<h:column>
-								<f:facet name="header">#{msg.SHARED_ADDRESSBOOK}</f:facet>
-
-								<h:link outcome="user_show_addressbook" title="#{msg.LINK_SHOW_ADDRESSBOOK_TITLE}">
-									<f:param name="addressbookId" value="#{share.shareAddressbook.addressbookId}" />
-									<h:outputText id="addressbookName" value="#{share.shareAddressbook.addressbookName}" title="#{msg.SHARED_ADDRESSBOOK_TITLE}" />
-								</h:link>
-							</h:column>
-
-							<h:column>
-								<f:facet name="header">#{msg.SHAREE_USER_NAME}</f:facet>
-								<ui:include src="/WEB-INF/templates/generic/user_profile_link.tpl">
-									<ui:param name="user" value="#{share.setShareUserSharee(shareUserSharer)}" />
-								</ui:include>
-							</h:column>
-
-							<h:column>
-								<f:facet name="header">#{msg.SHARE_CREATED}</f:facet>
-								<h:outputText id="shareCreated" value="#{share.shareCreated.time}" title="#{msg.SHARE_CREATED_TITLE}">
-									<f:convertDateTime for="shareCreated" type="both" timeStyle="short" dateStyle="medium" />
-								</h:outputText>
-							</h:column>
-						</h:dataTable>
-					</div>
-
-					<div class="para">
-						<h:outputText class="notice" value="#{msg.LOGIN_USER_HAS_NOT_SHARED_ADDRESSBOOKS}" rendered="#{not shareController.isSharingAddressbooks()}" />
-					</div>
-
-					<div class="table_footer">
-						<h:link id="shareAddressbook" outcome="user_list" title="#{msg.LINK_LOGIN_START_SHARING_ADDRESSBOOKS_TITLE}" value="#{msg.LINK_LOGIN_START_SHARING_ADDRESSBOOKS}" />
-					</div>
-				</div>
-			</ui:fragment>
-
-			<ui:fragment rendered="#{not loginController.isUserLoggedIn()}">
-				<ui:include id="login_only" src="/WEB-INF/templates/generic/user_not_logged_in.tpl" />
-			</ui:fragment>
-		</ui:define>
-	</ui:composition>
-</html>
diff --git a/web/login/login_start_sharing_addressbook.xhtml b/web/login/login_start_sharing_addressbook.xhtml
deleted file mode 100644
index 442610a3..00000000
--- a/web/login/login_start_sharing_addressbook.xhtml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html
-	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
-	xmlns="http://www.w3.org/1999/xhtml"
-	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
-	  xmlns:h="http://xmlns.jcp.org/jsf/html"
-	  xmlns:f="http://xmlns.jcp.org/jsf/core"
-	  xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">
-
-	<ui:composition template="/WEB-INF/templates/#{loginController.templateType}/#{loginController.templateType}_base.tpl">
-		<ui:define name="login_title">#{msg.PAGE_TITLE_LOGIN_START_SHARING_ADDRESSBOOK}</ui:define>
-
-		<ui:define name="content_header">
-			#{msg.CONTENT_TITLE_LOGIN_START_SHARING_ADDRESSBOOK}
-		</ui:define>
-
-		<ui:define name="content">
-			<ui:fragment rendered="#{loginController.isUserLoggedIn()}">
-				<div class="table_big">
-
-					<div class="table_header">
-						#{msg.TABLE_HEADER_CHOOSE_USER_FOR_SHARING}
-					</div>
-
-					<div class="para">
-						<h:outputText id="userNotLoggedIn" class="notice" value="#{msg.USER_NOT_LOGGED_IN}" rendered="#{not loginController.isUserLoggedIn()}" />
-
-						<h:dataTable id="userList" headerClass="table_header_column" var="user" value="#{addressbookController.allUsersNotSharing()}" rendered="#{loginController.isUserLoggedIn() and not empty addressbookController.addressbook and not loginController.isInvisible()}">
-
-							<h:column>
-								<f:facet name="header">#{msg.USER_ID}</f:facet>
-								<h:outputText value="#{user.userId}" />
-							</h:column>
-
-							<h:column>
-								<f:facet name="header">#{msg.USER_NAME}</f:facet>
-								<ui:include src="/WEB-INF/templates/generic/user_profile_link.tpl">
-									<ui:param name="user" value="#{user}" />
-								</ui:include>
-							</h:column>
-
-							<h:column>
-								<f:facet name="header">#{msg.LOGIN_START_SHARING_TITLE}</f:facet>
-								<h:form acceptcharset="utf-8" id="startSharing" rendered="#{profileController.isProfileLinkVisibleByUser(user)}">
-									<h:commandButton class="submit" id="submit" value="#{msg.LOGIN_START_SHARING_BUTTON}" action="#{shareController.startSharing(user, addressbookController.addressbook)}" title="#{msg.LOGIN_START_SHARING_BUTTON_TITLE}" />
-								</h:form>
-							</h:column>
-						</h:dataTable>
-
-						<h:outputText id="addressbokUnset" class="notice" value="#{msg.LOGIN_ADDRESSBOOK_NOT_SET}" rendered="#{empty addressbookController.addressbook}" />
-
-						<h:outputText id="ownProfileInvisible" class="notice" value="#{msg.LOGIN_OWN_PROFILE_INVISIBLE}" rendered="#{loginController.isUserLoggedIn() and not empty addressbookController.addressbook and not loginController.isInvisible()}" />
-					</div>
-
-					<div class="table_footer">
-						<ul>
-							<li>#{msg.LOGIN_START_SHARING_NOTICE1}</li>
-							<li>#{msg.LOGIN_START_SHARING_NOTICE2}</li>
-						</ul>
-					</div>
-				</div>
-			</ui:fragment>
-
-			<ui:fragment rendered="#{not loginController.isUserLoggedIn()}">
-				<ui:include id="login_only" src="/WEB-INF/templates/generic/user_not_logged_in.tpl" />
-			</ui:fragment>
-		</ui:define>
-	</ui:composition>
-</html>
diff --git a/web/login/login_user_data_saved.xhtml b/web/login/login_user_data_saved.xhtml
deleted file mode 100644
index e42c555f..00000000
--- a/web/login/login_user_data_saved.xhtml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html
-	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
-	xmlns="http://www.w3.org/1999/xhtml"
-	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
-	  xmlns:h="http://xmlns.jcp.org/jsf/html"
-	  xmlns:f="http://xmlns.jcp.org/jsf/core"
-	  >
-
-	<ui:composition template="/WEB-INF/templates/login/login_base.tpl">
-		<ui:define name="login_title">#{msg.PAGE_TITLE_LOGIN_USER_DATA_SAVED}</ui:define>
-
-		<ui:define name="content_header">
-			#{msg.CONTENT_TITLE_LOGIN_USER_DATA_SAVED}
-		</ui:define>
-
-		<ui:define name="content">
-			<ui:fragment rendered="#{loginController.isUserLoggedIn()}">
-				<ui:include id="message_box" src="/WEB-INF/templates/generic/message_box.tpl">
-					<ui:param name="message" value="#{msg.LOGIN_MESSAGE_DATA_SAVED}" />
-				</ui:include>
-			</ui:fragment>
-
-			<ui:fragment rendered="#{not loginController.isUserLoggedIn()}">
-				<ui:include id="login_only" src="/WEB-INF/templates/generic/user_not_logged_in.tpl" />
-			</ui:fragment>
-		</ui:define>
-	</ui:composition>
-</html>
diff --git a/web/user/index.xhtml b/web/user/index.xhtml
new file mode 100644
index 00000000..dafff409
--- /dev/null
+++ b/web/user/index.xhtml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+	  xmlns:ui="http://java.sun.com/jsf/facelets"
+	  xmlns:h="http://xmlns.jcp.org/jsf/html"
+	  xmlns:f="http://xmlns.jcp.org/jsf/core"
+	  >
+
+	<ui:composition template="/WEB-INF/templates/login/login_base.tpl">
+		<ui:define name="guest_title">#{msg.PAGE_TITLE_LOGIN_FOO}</ui:define>
+
+		<ui:define name="menu">
+			<ui:include id="menu" class="login_menu" src="/WEB-INF/templates/login/login_menu.tpl" />
+		</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.SUB_TITLE_LOGIN_FOO}
+		</ui:define>
+
+		<ui:define name="content">
+			Here goes your content.
+		</ui:define>
+
+		<ui:define name="footer">
+			<ui:include id="footer" class="login_footer" src="/WEB-INF/templates/login/login_footer.tpl" />
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/user/login.xhtml b/web/user/login.xhtml
deleted file mode 100644
index 0b0efb62..00000000
--- a/web/user/login.xhtml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html
-	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
-	xmlns="http://www.w3.org/1999/xhtml"
-	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
-	  xmlns:h="http://xmlns.jcp.org/jsf/html"
-	  xmlns:f="http://xmlns.jcp.org/jsf/core"
-	  >
-
-	<ui:composition template="/WEB-INF/templates/guest/guest_base.tpl" id="user_login">
-		<ui:define name="guest_title">#{msg.PAGE_TITLE_USER_LOGIN}</ui:define>
-
-		<ui:define name="content_header">
-			#{msg.CONTENT_TITLE_USER_LOGIN}
-		</ui:define>
-
-		<ui:define name="content">
-			<div class="para">
-				<!-- TODO Internatialize this somehow //-->
-				Noch kein Benutzerkonto? Einfach <h:link id="user_register" outcome="user_register" title="Als Benutzer anmelden">hier</h:link> anmelden.
-			</div>
-
-			<div class="para">
-				<ui:include id="login_form" class="login_form" src="/WEB-INF/templates/guest/guest_login_form.tpl" />
-			</div>
-
-			<div class="para">
-				<h:link id="user_lost_password" outcome="user_lost_passwd" title="#{msg.LINK_TITLE_GUEST_LOGIN_LOST_PASSWORD}" value="#{msg.LINK_GUEST_LOGIN_LOST_PASSWORD}" />
-			</div>
-		</ui:define>
-	</ui:composition>
-</html>
diff --git a/web/user/login_add_addressbook.xhtml b/web/user/login_add_addressbook.xhtml
new file mode 100644
index 00000000..7f1c8579
--- /dev/null
+++ b/web/user/login_add_addressbook.xhtml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
+	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
+	xmlns="http://www.w3.org/1999/xhtml"
+	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+	  xmlns:h="http://xmlns.jcp.org/jsf/html"
+	  xmlns:f="http://xmlns.jcp.org/jsf/core"
+	  >
+
+	<ui:composition template="/WEB-INF/templates/login/login_base.tpl">
+		<ui:define name="login_title">#{msg.PAGE_TITLE_LOGIN_ADD_ADDRESSBOOK}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_LOGIN_ADD_ADDRESSBOOK}
+		</ui:define>
+
+		<ui:define name="content">
+			<ui:fragment rendered="#{loginController.isUserLoggedIn()}">
+				<h:form id="add_addressbook" acceptcharset="utf-8">
+					<div class="table">
+						<div class="table_header">
+							#{msg.FORM_LOGIN_ADD_ADDRESSBOOK_TITLE}
+						</div>
+
+						<div class="table_row">
+							<div class="table_left">
+								<h:outputLabel for="addressbookName" value="#{msg.LOGIN_ENTER_ADDRESSBOOK_NAME}"/>
+							</div>
+
+							<div class="table_right">
+								<h:inputText class="input" id="addressbookName" value="#{addressbookController.addressbookName}" maxlength="50" size="20" title="#{msg.LOGIN_ENTER_ADDRESSBOOK_NAME_TITLE}" required="true" requiredMessage="#{msg.LOGIN_ADDRESSBOOK_NAME_REQUIRED_MESSAGE}">
+									<f:validator for="addressbookName" validatorId="AddressbookNameValidator" />
+								</h:inputText>
+							</div>
+						</div>
+
+						<div class="table_footer">
+							<h:commandButton class="reset" type="reset" value="#{msg.BUTTON_RESET_FORM}" />
+							<h:commandButton class="submit" type="submit" id="register" value="#{msg.BUTTON_LOGIN_ADD_ADDRESSBOOK}" action="#{addressbookController.addAddressbook()}" />
+						</div>
+					</div>
+				</h:form>
+			</ui:fragment>
+
+			<ui:fragment rendered="#{not loginController.isUserLoggedIn()}">
+				<ui:include id="login_only" src="/WEB-INF/templates/generic/user_not_logged_in.tpl" />
+			</ui:fragment>
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/user/login_change_email_address.xhtml b/web/user/login_change_email_address.xhtml
new file mode 100644
index 00000000..702312d8
--- /dev/null
+++ b/web/user/login_change_email_address.xhtml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
+	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
+	xmlns="http://www.w3.org/1999/xhtml"
+	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+	  xmlns:h="http://xmlns.jcp.org/jsf/html"
+	  xmlns:f="http://xmlns.jcp.org/jsf/core"
+	  >
+
+	<ui:composition template="/WEB-INF/templates/login/login_base.tpl">
+		<ui:define name="login_title">#{msg.PAGE_TITLE_LOGIN_CHANGE_EMAIL_ADDRESS}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_LOGIN_CHANGE_EMAIL_ADDRESS}
+		</ui:define>
+
+		<ui:define name="content">
+			<ui:fragment rendered="#{loginController.isUserLoggedIn()}">
+				<div class="table">
+					<div class="table_header">
+						#{msg.LOGIN_CHANGE_EMAIL_ADDRESS_TITLE}
+					</div>
+
+					<h:form id="login_form">
+						<div class="para">
+							<fieldset id="change_email">
+								<legend title="#{msg.LOGIN_CHANGE_EMAIL_LEGEND_TITLE}">#{msg.LOGIN_CHANGE_EMAIL_LEGEND}</legend>
+
+								<div class="table_row">
+									<div class="table_left">
+										#{msg.LOGIN_CHANGE_EMAIL_OLD_ADDRESS}
+									</div>
+
+									<div class="table_right">
+										#{userController.emailAddress}
+									</div>
+
+									<div class="clear"></div>
+								</div>
+
+								<div class="table_row">
+									<div class="table_left">
+										<h:outputLabel for="emailAddress1" value="#{msg.LOGIN_CHANGE_EMAIL_ENTER_EMAIL1}" />
+									</div>
+
+									<div class="table_right">
+										<h:inputText class="input" id="emailAddress1" size="20" maxlength="255" value="#{emailChangeController.emailAddress1}" required="true" />
+									</div>
+
+									<div class="clear"></div>
+								</div>
+
+								<div class="table_row">
+									<div class="table_left">
+										<h:outputLabel for="emailAddress2" value="#{msg.LOGIN_CHANGE_EMAIL_ENTER_EMAIL2}" />
+									</div>
+
+									<div class="table_right">
+										<h:inputText class="input" id="emailAddress2" size="20" maxlength="255" value="#{emailChangeController.emailAddress2}" required="true" />
+									</div>
+
+									<div class="clear"></div>
+								</div>
+							</fieldset>
+						</div>
+
+						<ui:include src="/WEB-INF/templates/login/login_enter_current_password.tpl" />
+
+						<div class="table_footer">
+							<h:commandButton class="reset" type="reset" value="#{msg.BUTTON_RESET_FORM}" />
+							<h:commandButton class="submit" type="submit" id="change_email" value="#{msg.BUTTON_CHANGE_EMAIL_ADDRESS}" action="#{emailChangeController.doChangeEmailAddress()}" />
+						</div>
+					</h:form>
+				</div>
+			</ui:fragment>
+
+			<ui:fragment rendered="#{not loginController.isUserLoggedIn()}">
+				<ui:include id="login_only" src="/WEB-INF/templates/generic/user_not_logged_in.tpl" />
+			</ui:fragment>
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/user/login_change_password.xhtml b/web/user/login_change_password.xhtml
new file mode 100644
index 00000000..bfd384d4
--- /dev/null
+++ b/web/user/login_change_password.xhtml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
+	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
+	xmlns="http://www.w3.org/1999/xhtml"
+	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+	  xmlns:h="http://xmlns.jcp.org/jsf/html"
+	  xmlns:f="http://xmlns.jcp.org/jsf/core"
+	  >
+
+	<ui:composition template="/WEB-INF/templates/login/login_base.tpl">
+		<ui:define name="login_title">#{msg.PAGE_TITLE_LOGIN_CHANGE_PASSWORD}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_LOGIN_CHANGE_PASSWORD}
+		</ui:define>
+
+		<ui:define name="content">
+			<ui:fragment rendered="#{loginController.isUserLoggedIn()}">
+				<div class="table">
+					<div class="table_header">
+						#{msg.LOGIN_CHANGE_PASSWORD_TITLE}
+					</div>
+
+					<h:form id="login_form">
+						<div class="para">
+							<fieldset id="change_password">
+								<legend title="#{msg.LOGIN_CHANGE_PASSWORD_LEGEND_TITLE}">#{msg.LOGIN_CHANGE_PASSWORD_LEGEND}</legend>
+
+								<div class="table_row">
+									<div class="table_left">
+										<h:outputLabel for="password1" value="#{msg.GUEST_REGISTRATION_ENTER_PASSWORD1}" />
+									</div>
+
+									<div class="table_right">
+										<h:inputSecret class="input" id="password1" size="10" maxlength="255" value="#{loginController.userPassword}" required="true" />
+									</div>
+
+									<div class="clear"></div>
+								</div>
+
+								<div class="table_row">
+									<div class="table_left">
+										<h:outputLabel for="password2" value="#{msg.GUEST_REGISTRATION_ENTER_PASSWORD2}" />
+									</div>
+
+									<div class="table_right">
+										<h:inputSecret class="input" id="password2" size="10" maxlength="255" value="#{loginController.userPasswordRepeat}" required="true" />
+									</div>
+
+									<div class="clear"></div>
+								</div>
+							</fieldset>
+						</div>
+
+						<ui:include src="/WEB-INF/templates/login/login_enter_current_password.tpl" />
+
+						<div class="table_footer">
+							<h:commandButton class="reset" type="reset" value="#{msg.BUTTON_RESET_FORM}" />
+							<h:commandButton class="submit" type="submit" id="change_password" value="#{msg.BUTTON_CHANGE_PASSWORD}" action="#{userController.changePassword()}" />
+						</div>
+					</h:form>
+				</div>
+			</ui:fragment>
+
+			<ui:fragment rendered="#{not loginController.isUserLoggedIn()}">
+				<ui:include id="login_only" src="/WEB-INF/templates/generic/user_not_logged_in.tpl" />
+			</ui:fragment>
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/user/login_change_personal_data.xhtml b/web/user/login_change_personal_data.xhtml
new file mode 100644
index 00000000..e4c482c9
--- /dev/null
+++ b/web/user/login_change_personal_data.xhtml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
+	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
+	xmlns="http://www.w3.org/1999/xhtml"
+	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+	  xmlns:h="http://xmlns.jcp.org/jsf/html"
+	  xmlns:f="http://xmlns.jcp.org/jsf/core"
+	  >
+
+	<ui:composition template="/WEB-INF/templates/login/login_base.tpl">
+		<ui:define name="login_title">#{msg.PAGE_TITLE_LOGIN_CHANGE_PERSONAL_DATA}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_LOGIN_CHANGE_PERSONAL_DATA}
+		</ui:define>
+
+		<ui:define name="content">
+			<ui:fragment rendered="#{loginController.isUserLoggedIn()}">
+				<div class="table">
+					<div class="table_header">
+						#{msg.LOGIN_CHANGE_PERSONAL_DATA_TITLE}
+					</div>
+
+					<h:form id="login_change_personal_form">
+						<ui:include src="/WEB-INF/templates/generic/form_personal_data.tpl" />
+
+						<ui:include src="/WEB-INF/templates/login/login_enter_current_password.tpl" />
+
+						<ui:include src="/WEB-INF/templates/guest/guest_privacy_terms.tpl" />
+
+						<div class="table_footer">
+							<h:commandButton class="reset" type="reset" value="#{msg.BUTTON_RESET_FORM}" />
+							<h:commandButton class="submit" type="submit" id="change_personal_data" value="#{msg.BUTTON_CHANGE_PERSONAL_DATA}" action="#{userController.doChangePersonalData()}" />
+						</div>
+					</h:form>
+				</div>
+			</ui:fragment>
+
+			<ui:fragment rendered="#{not loginController.isUserLoggedIn()}">
+				<ui:include id="login_only" src="/WEB-INF/templates/generic/user_not_logged_in.tpl" />
+			</ui:fragment>
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/user/login_contact_data_saved.xhtml b/web/user/login_contact_data_saved.xhtml
new file mode 100644
index 00000000..25b69679
--- /dev/null
+++ b/web/user/login_contact_data_saved.xhtml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
+	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
+	xmlns="http://www.w3.org/1999/xhtml"
+	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+	  xmlns:h="http://xmlns.jcp.org/jsf/html"
+	  xmlns:f="http://xmlns.jcp.org/jsf/core"
+	  >
+
+	<ui:composition template="/WEB-INF/templates/login/login_base.tpl">
+		<ui:define name="login_title">#{msg.PAGE_TITLE_LOGIN_CONTACT_DATA_SAVED}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_LOGIN_CONTACT_DATA_SAVED}
+		</ui:define>
+
+		<ui:define name="content">
+			<ui:fragment rendered="#{loginController.isUserLoggedIn()}">
+				<ui:include id="message_box" src="/WEB-INF/templates/generic/message_box.tpl">
+					<ui:param name="message" value="#{msg.LOGIN_MESSAGE_DATA_SAVED}" />
+				</ui:include>
+			</ui:fragment>
+
+			<ui:fragment rendered="#{not loginController.isUserLoggedIn()}">
+				<ui:include id="login_only" src="/WEB-INF/templates/generic/user_not_logged_in.tpl" />
+			</ui:fragment>
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/user/login_data_saved.xhtml b/web/user/login_data_saved.xhtml
new file mode 100644
index 00000000..0fd6316a
--- /dev/null
+++ b/web/user/login_data_saved.xhtml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
+	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
+	xmlns="http://www.w3.org/1999/xhtml"
+	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+	  xmlns:h="http://xmlns.jcp.org/jsf/html"
+	  xmlns:f="http://xmlns.jcp.org/jsf/core"
+	  >
+
+	<ui:composition template="/WEB-INF/templates/login/login_base.tpl">
+		<ui:define name="login_title">#{msg.PAGE_TITLE_LOGIN_DATA_SAVED}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_LOGIN_DATA_SAVED}
+		</ui:define>
+
+		<ui:define name="content">
+			<ui:fragment rendered="#{loginController.isUserLoggedIn()}">
+				<ui:include id="message_box" src="/WEB-INF/templates/generic/message_box.tpl">
+					<ui:param name="message" value="#{msg.LOGIN_MESSAGE_DATA_SAVED}" />
+				</ui:include>
+			</ui:fragment>
+
+			<ui:fragment rendered="#{not loginController.isUserLoggedIn()}">
+				<ui:include id="login_only" src="/WEB-INF/templates/generic/user_not_logged_in.tpl" />
+			</ui:fragment>
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/user/login_edit_user_data.xhtml b/web/user/login_edit_user_data.xhtml
new file mode 100644
index 00000000..8cd727cb
--- /dev/null
+++ b/web/user/login_edit_user_data.xhtml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
+	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
+	xmlns="http://www.w3.org/1999/xhtml"
+	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+	  xmlns:h="http://xmlns.jcp.org/jsf/html"
+	  xmlns:f="http://xmlns.jcp.org/jsf/core"
+	  >
+
+	<ui:composition template="/WEB-INF/templates/login/login_base.tpl">
+		<ui:define name="login_title">#{msg.PAGE_TITLE_LOGIN_EDIT_USER_DATA}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_LOGIN_EDIT_USER_DATA}
+		</ui:define>
+
+		<ui:define name="content">
+			<ui:fragment rendered="#{loginController.isUserLoggedIn()}">
+				<div class="table">
+					<div class="table_header">
+						#{msg.LOGIN_EDIT_USER_DATA_TITLE}
+					</div>
+
+					<div class="para notice">
+						<h:outputText value="#{msg.LOGIN_CHOOSE_PERSONAL_DATA_EMAIL_PASSWORD_NOTICE}" />
+					</div>
+
+					<div class="para">
+						<ul>
+							<li>
+								<h:link title="#{msg.LINK_LOGIN_CHANGE_PERSONAL_DATA_TITLE}" outcome="login_change_personal_data" value="#{msg.LINK_LOGIN_CHANGE_PERSONAL_DATA}" />
+							</li>
+							<li>
+								<h:link title="#{msg.LINK_LOGIN_CHANGE_EMAIL_ADDRESS_TITLE}" outcome="login_change_email_address" value="#{msg.LINK_LOGIN_CHANGE_EMAIL_ADDRESS}" />
+							</li>
+							<li>
+								<h:link title="#{msg.LINK_LOGIN_CHANGE_PASSWORD_TITLE}" outcome="login_change_password" value="#{msg.LINK_LOGIN_CHANGE_PASSWORD}" />
+							</li>
+						</ul>
+					</div>
+				</div>
+			</ui:fragment>
+
+			<ui:fragment rendered="#{not loginController.isUserLoggedIn()}">
+				<ui:include id="login_only" src="/WEB-INF/templates/generic/user_not_logged_in.tpl" />
+			</ui:fragment>
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/user/login_error.xhtml b/web/user/login_error.xhtml
deleted file mode 100644
index 85361e74..00000000
--- a/web/user/login_error.xhtml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html
-	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
-	xmlns="http://www.w3.org/1999/xhtml"
-	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
-	  xmlns:h="http://xmlns.jcp.org/jsf/html"
-	  xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
-	  xmlns:f="http://xmlns.jcp.org/jsf/core"
-	  >
-
-	<ui:composition template="/WEB-INF/templates/guest/guest_base.tpl" id="login_error">
-		<ui:define name="guest_title">#{msg.PAGE_TITLE_USER_LOGIN_ERROR}</ui:define>
-
-		<ui:define name="content_header">
-			#{msg.CONTENT_TITLE_USER_LOGIN_ERROR}
-		</ui:define>
-
-		<ui:define name="content">
-			Hier kommt die Fehlermeldung hin.
-		</ui:define>
-	</ui:composition>
-</html>
diff --git a/web/user/login_index.xhtml b/web/user/login_index.xhtml
new file mode 100644
index 00000000..ef4281d8
--- /dev/null
+++ b/web/user/login_index.xhtml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
+	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
+	xmlns="http://www.w3.org/1999/xhtml"
+	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+	  xmlns:h="http://xmlns.jcp.org/jsf/html"
+	  xmlns:f="http://xmlns.jcp.org/jsf/core"
+	  >
+
+	<ui:composition template="/WEB-INF/templates/login/login_base.tpl">
+		<ui:define name="login_title">#{msg.PAGE_TITLE_LOGIN_HOME}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_LOGIN_HOME}
+		</ui:define>
+
+		<ui:define name="content">
+			<ui:fragment rendered="#{loginController.isUserLoggedIn()}">
+				Here goes your content.
+			</ui:fragment>
+
+			<ui:fragment rendered="#{not loginController.isUserLoggedIn()}">
+				<ui:include id="login_only" src="/WEB-INF/templates/generic/user_not_logged_in.tpl" />
+			</ui:fragment>
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/user/login_list_sharing_addressbooks.xhtml b/web/user/login_list_sharing_addressbooks.xhtml
new file mode 100644
index 00000000..1698cb3d
--- /dev/null
+++ b/web/user/login_list_sharing_addressbooks.xhtml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
+	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
+	xmlns="http://www.w3.org/1999/xhtml"
+	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+	  xmlns:h="http://xmlns.jcp.org/jsf/html"
+	  xmlns:f="http://xmlns.jcp.org/jsf/core"
+	  >
+
+	<f:metadata>
+		<f:viewParam id="userId" name="userId" value="#{shareController.shareeUserId}" required="true" requiredMessage="#{msg.PARAMETER_USER_ID_MISSING}" converterMessage="#{msg.PARAMETER_USER_ID_INVALID}" validatorMessage="#{msg.PARAMETER_USER_ID_NOT_FOUND}">
+			<f:convertNumber for="userId" type="number" minIntegerDigits="1" maxIntegerDigits="20" />
+			<f:validator for="userId" validatorId="UserIdValidator" />
+		</f:viewParam>
+	</f:metadata>
+
+	<ui:composition template="/WEB-INF/templates/login/login_base.tpl">
+		<ui:define name="login_title">#{msg.PAGE_TITLE_LOGIN_LIST_SHARING_ADDRESSBOOKS}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_LOGIN_LIST_SHARING_ADDRESSBOOKS}
+		</ui:define>
+
+		<ui:define name="content">
+			<ui:fragment rendered="#{loginController.isUserLoggedIn()}">
+				<ui:fragment rendered="#{shareController.isShareeUserIdSet()}">
+					Here goes your content.
+				</ui:fragment>
+
+				<ui:fragment rendered="#{shareController.isShareeUserIdEmpty()}">
+					<ui:include src="/WEB-INF/templates/generic/userid_error.tpl" />
+				</ui:fragment>
+			</ui:fragment>
+
+			<ui:fragment rendered="#{not loginController.isUserLoggedIn()}">
+				<ui:include id="login_only" src="/WEB-INF/templates/generic/user_not_logged_in.tpl" />
+			</ui:fragment>
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/user/login_other_addressbooks.xhtml b/web/user/login_other_addressbooks.xhtml
new file mode 100644
index 00000000..eef9d0bb
--- /dev/null
+++ b/web/user/login_other_addressbooks.xhtml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
+	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
+	xmlns="http://www.w3.org/1999/xhtml"
+	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+	  xmlns:h="http://xmlns.jcp.org/jsf/html"
+	  xmlns:f="http://xmlns.jcp.org/jsf/core"
+	  >
+
+	<ui:composition template="/WEB-INF/templates/login/login_base.tpl">
+		<ui:define name="login_title">#{msg.PAGE_TITLE_LOGIN_OTHER_ADDRESSBOOKS}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_LOGIN_OTHER_ADDRESSBOOKS}
+		</ui:define>
+
+		<ui:define name="content">
+			<ui:fragment rendered="#{loginController.isUserLoggedIn()}">
+				Here goes your content.
+			</ui:fragment>
+
+			<ui:fragment rendered="#{not loginController.isUserLoggedIn()}">
+				<ui:include id="login_only" src="/WEB-INF/templates/generic/user_not_logged_in.tpl" />
+			</ui:fragment>
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/user/login_own_addressbooks.xhtml b/web/user/login_own_addressbooks.xhtml
new file mode 100644
index 00000000..48c08973
--- /dev/null
+++ b/web/user/login_own_addressbooks.xhtml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
+	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
+	xmlns="http://www.w3.org/1999/xhtml"
+	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+	  xmlns:h="http://xmlns.jcp.org/jsf/html"
+	  xmlns:f="http://xmlns.jcp.org/jsf/core"
+	  >
+
+	<ui:composition template="/WEB-INF/templates/login/login_base.tpl">
+		<ui:define name="login_title">#{msg.PAGE_TITLE_LOGIN_OWN_ADDRESSBOOKS}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_LOGIN_OWN_ADDRESSBOOKS}
+		</ui:define>
+
+		<ui:define name="content">
+			<ui:fragment rendered="#{loginController.isUserLoggedIn()}">
+				<div class="table">
+					<div class="table_header">
+						#{msg.TABLE_HEADER_LIST_OWN_ADDRESSBOOKS}
+					</div>
+
+					<div class="para">
+						<h:dataTable id="table_own_addressbooks" var="addressbook" value="#{addressbookController.allAddressbooks()}" styleClass="table" headerClass="table_data_column" summary="#{msg.TABLE_SUMMARY_LOGIN_LIST_OWN_ADDRESSBOOKS}" rendered="#{addressbookController.hasCreatedAddressbooks()}">
+							<h:column>
+								<f:facet name="header">#{msg.ADDRESSBOOK_NAME}</f:facet>
+
+								<h:link outcome="user_show_addressbook" title="#{msg.LINK_SHOW_ADDRESSBOOK_TITLE}">
+									<f:param name="addressbookId" value="#{addressbook.addressbookId}" />
+									<h:outputText id="addressbookName" value="#{addressbook.addressbookName}" title="#{msg.ADDRESSBOOK_NAME_TITLE}" />
+								</h:link>
+							</h:column>
+
+							<h:column>
+								<f:facet name="header">#{msg.ADDRESSBOOK_TOTAL_ENTRIES}</f:facet>
+
+								<h:link outcome="show_addressbook_entries" title="#{msg.LINK_SHOW_ADDRESSBOOK_ENTRIES_TITLE}">
+									<f:param name="addressbookId" value="#{addressbook.addressbookId}" />
+									<h:outputText id="addressbookEntries" value="#{addressbookController.allEntriesSize(addressbook)}" title="#{msg.ADDRESSBOOK_TOTAL_ENTRIES_TITLE}" />
+								</h:link>
+							</h:column>
+
+							<h:column>
+								<f:facet name="header">#{msg.ADDRESSBOOK_CREATED}</f:facet>
+
+								<h:outputFormat id="addressbookCreated" value="#{addressbook.addressbookCreated.time}" title="#{msg.ADDRESSBOOK_CREATED_TITLE}">
+									<f:convertDateTime for="addressbookCreated" type="both" timeStyle="short" dateStyle="medium" />
+								</h:outputFormat>
+							</h:column>
+						</h:dataTable>
+					</div>
+
+					<div class="table_footer">
+						<h:link id="add_first_addressbook" outcome="login_add_addressbook" value="#{msg.LINK_LOGIN_ADD_FIRST_ADDRESSBOOK}" title="#{msg.LINK_LOGIN_ADD_FIRST_ADDRESSBOOK_TITLE}" rendered="#{addressbookController.hasCreatedAddressbooks() == false}" />
+						<h:link id="add_additional_addressbook" outcome="login_add_addressbook" value="#{msg.LINK_LOGIN_ADD_ADDITIONAL_ADDRESSBOOK}" title="#{msg.LINK_LOGIN_ADD_ADDITIONAL_ADDRESSBOOK_TITLE}" rendered="#{addressbookController.hasCreatedAddressbooks()}" />
+					</div>
+				</div>
+			</ui:fragment>
+
+			<ui:fragment rendered="#{not loginController.isUserLoggedIn()}">
+				<ui:include id="login_only" src="/WEB-INF/templates/generic/user_not_logged_in.tpl" />
+			</ui:fragment>
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/user/login_shared_addressbooks.xhtml b/web/user/login_shared_addressbooks.xhtml
new file mode 100644
index 00000000..2c52fabe
--- /dev/null
+++ b/web/user/login_shared_addressbooks.xhtml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
+	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
+	xmlns="http://www.w3.org/1999/xhtml"
+	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+	  xmlns:h="http://xmlns.jcp.org/jsf/html"
+	  xmlns:f="http://xmlns.jcp.org/jsf/core">
+
+	<ui:composition template="/WEB-INF/templates/login/login_base.tpl">
+		<ui:define name="login_title">#{msg.PAGE_TITLE_LOGIN_SHARED_ADDRESSBOOKS}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_LOGIN_SHARED_ADDRESSBOOKS}
+		</ui:define>
+
+		<ui:define name="content">
+			<ui:fragment rendered="#{loginController.isUserLoggedIn()}">
+				<div class="table">
+					<div class="table_header">
+						#{msg.LOGIN_TABLE_HEADER_SHARED_ADDRESSBOOKS}
+					</div>
+
+					<div class="para">
+						<h:dataTable id="sharedAddressbooks" var="share" value="#{shareController.allShares()}" headerClass="table_data_column" summary="#{msg.TABLE_SUMMARY_LOGIN_SHARED_ADDRESSBOOKS}" rendered="#{shareController.isSharingAddressbooks()}">
+							<h:column>
+								<f:facet name="header">#{msg.SHARED_ADDRESSBOOK}</f:facet>
+
+								<h:link outcome="user_show_addressbook" title="#{msg.LINK_SHOW_ADDRESSBOOK_TITLE}">
+									<f:param name="addressbookId" value="#{share.shareAddressbook.addressbookId}" />
+									<h:outputText id="addressbookName" value="#{share.shareAddressbook.addressbookName}" title="#{msg.SHARED_ADDRESSBOOK_TITLE}" />
+								</h:link>
+							</h:column>
+
+							<h:column>
+								<f:facet name="header">#{msg.SHAREE_USER_NAME}</f:facet>
+								<ui:include src="/WEB-INF/templates/generic/user_profile_link.tpl">
+									<ui:param name="user" value="#{share.setShareUserSharee(shareUserSharer)}" />
+								</ui:include>
+							</h:column>
+
+							<h:column>
+								<f:facet name="header">#{msg.SHARE_CREATED}</f:facet>
+								<h:outputText id="shareCreated" value="#{share.shareCreated.time}" title="#{msg.SHARE_CREATED_TITLE}">
+									<f:convertDateTime for="shareCreated" type="both" timeStyle="short" dateStyle="medium" />
+								</h:outputText>
+							</h:column>
+						</h:dataTable>
+					</div>
+
+					<div class="para">
+						<h:outputText class="notice" value="#{msg.LOGIN_USER_HAS_NOT_SHARED_ADDRESSBOOKS}" rendered="#{not shareController.isSharingAddressbooks()}" />
+					</div>
+
+					<div class="table_footer">
+						<h:link id="shareAddressbook" outcome="user_list" title="#{msg.LINK_LOGIN_START_SHARING_ADDRESSBOOKS_TITLE}" value="#{msg.LINK_LOGIN_START_SHARING_ADDRESSBOOKS}" />
+					</div>
+				</div>
+			</ui:fragment>
+
+			<ui:fragment rendered="#{not loginController.isUserLoggedIn()}">
+				<ui:include id="login_only" src="/WEB-INF/templates/generic/user_not_logged_in.tpl" />
+			</ui:fragment>
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/user/login_start_sharing_addressbook.xhtml b/web/user/login_start_sharing_addressbook.xhtml
new file mode 100644
index 00000000..442610a3
--- /dev/null
+++ b/web/user/login_start_sharing_addressbook.xhtml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
+	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
+	xmlns="http://www.w3.org/1999/xhtml"
+	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+	  xmlns:h="http://xmlns.jcp.org/jsf/html"
+	  xmlns:f="http://xmlns.jcp.org/jsf/core"
+	  xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">
+
+	<ui:composition template="/WEB-INF/templates/#{loginController.templateType}/#{loginController.templateType}_base.tpl">
+		<ui:define name="login_title">#{msg.PAGE_TITLE_LOGIN_START_SHARING_ADDRESSBOOK}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_LOGIN_START_SHARING_ADDRESSBOOK}
+		</ui:define>
+
+		<ui:define name="content">
+			<ui:fragment rendered="#{loginController.isUserLoggedIn()}">
+				<div class="table_big">
+
+					<div class="table_header">
+						#{msg.TABLE_HEADER_CHOOSE_USER_FOR_SHARING}
+					</div>
+
+					<div class="para">
+						<h:outputText id="userNotLoggedIn" class="notice" value="#{msg.USER_NOT_LOGGED_IN}" rendered="#{not loginController.isUserLoggedIn()}" />
+
+						<h:dataTable id="userList" headerClass="table_header_column" var="user" value="#{addressbookController.allUsersNotSharing()}" rendered="#{loginController.isUserLoggedIn() and not empty addressbookController.addressbook and not loginController.isInvisible()}">
+
+							<h:column>
+								<f:facet name="header">#{msg.USER_ID}</f:facet>
+								<h:outputText value="#{user.userId}" />
+							</h:column>
+
+							<h:column>
+								<f:facet name="header">#{msg.USER_NAME}</f:facet>
+								<ui:include src="/WEB-INF/templates/generic/user_profile_link.tpl">
+									<ui:param name="user" value="#{user}" />
+								</ui:include>
+							</h:column>
+
+							<h:column>
+								<f:facet name="header">#{msg.LOGIN_START_SHARING_TITLE}</f:facet>
+								<h:form acceptcharset="utf-8" id="startSharing" rendered="#{profileController.isProfileLinkVisibleByUser(user)}">
+									<h:commandButton class="submit" id="submit" value="#{msg.LOGIN_START_SHARING_BUTTON}" action="#{shareController.startSharing(user, addressbookController.addressbook)}" title="#{msg.LOGIN_START_SHARING_BUTTON_TITLE}" />
+								</h:form>
+							</h:column>
+						</h:dataTable>
+
+						<h:outputText id="addressbokUnset" class="notice" value="#{msg.LOGIN_ADDRESSBOOK_NOT_SET}" rendered="#{empty addressbookController.addressbook}" />
+
+						<h:outputText id="ownProfileInvisible" class="notice" value="#{msg.LOGIN_OWN_PROFILE_INVISIBLE}" rendered="#{loginController.isUserLoggedIn() and not empty addressbookController.addressbook and not loginController.isInvisible()}" />
+					</div>
+
+					<div class="table_footer">
+						<ul>
+							<li>#{msg.LOGIN_START_SHARING_NOTICE1}</li>
+							<li>#{msg.LOGIN_START_SHARING_NOTICE2}</li>
+						</ul>
+					</div>
+				</div>
+			</ui:fragment>
+
+			<ui:fragment rendered="#{not loginController.isUserLoggedIn()}">
+				<ui:include id="login_only" src="/WEB-INF/templates/generic/user_not_logged_in.tpl" />
+			</ui:fragment>
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/user/login_user_data_saved.xhtml b/web/user/login_user_data_saved.xhtml
new file mode 100644
index 00000000..e42c555f
--- /dev/null
+++ b/web/user/login_user_data_saved.xhtml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
+	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
+	xmlns="http://www.w3.org/1999/xhtml"
+	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+	  xmlns:h="http://xmlns.jcp.org/jsf/html"
+	  xmlns:f="http://xmlns.jcp.org/jsf/core"
+	  >
+
+	<ui:composition template="/WEB-INF/templates/login/login_base.tpl">
+		<ui:define name="login_title">#{msg.PAGE_TITLE_LOGIN_USER_DATA_SAVED}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_LOGIN_USER_DATA_SAVED}
+		</ui:define>
+
+		<ui:define name="content">
+			<ui:fragment rendered="#{loginController.isUserLoggedIn()}">
+				<ui:include id="message_box" src="/WEB-INF/templates/generic/message_box.tpl">
+					<ui:param name="message" value="#{msg.LOGIN_MESSAGE_DATA_SAVED}" />
+				</ui:include>
+			</ui:fragment>
+
+			<ui:fragment rendered="#{not loginController.isUserLoggedIn()}">
+				<ui:include id="login_only" src="/WEB-INF/templates/generic/user_not_logged_in.tpl" />
+			</ui:fragment>
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/user/lost_passwd.xhtml b/web/user/lost_passwd.xhtml
deleted file mode 100644
index c6c0848c..00000000
--- a/web/user/lost_passwd.xhtml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html
-	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
-	xmlns="http://www.w3.org/1999/xhtml"
-	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
-	  xmlns:h="http://xmlns.jcp.org/jsf/html"
-	  xmlns:f="http://xmlns.jcp.org/jsf/core"
-	  >
-
-	<ui:composition template="/WEB-INF/templates/guest/guest_base.tpl">
-		<ui:define name="guest_title">#{msg.PAGE_TITLE_USER_LOST_PASSWORD}</ui:define>
-
-		<ui:define name="content_header">
-			#{msg.CONTENT_TITLE_USER_LOST_PASSWORD}
-		</ui:define>
-
-		<ui:define name="content">
-			<div class="para" id="user_lost_password_content">
-				<h:form id="lost_password_form">
-					<div class="table">
-						<div class="table_header">
-							#{msg.GUEST_LOST_PASSWORD_TITLE}
-						</div>
-
-						<fieldset id="login_data">
-							<legend title="#{msg.GUEST_LOST_PASSWORD_LEGEND_TITLE}">#{msg.GUEST_LOST_PASSWORD_LEGEND}</legend>
-
-							<div class="table_row">
-								<div class="table_left">
-									<h:outputLabel for="id" value="#{msg.ENTER_USER_NAME}" />
-								</div>
-
-								<div class="table_right">
-									<h:inputText class="input" id="id" size="10" maxlength="20" value="#{passwordRecoveryController.userId}" />
-								</div>
-
-								<div class="clear"></div>
-							</div>
-
-							<div class="table_header">
-								#{msg.GUEST_LOST_PASSWORD_NUMBER_OR_EMAIL}
-							</div>
-
-							<div class="table_row">
-								<div class="table_left">
-									<h:outputLabel for="email" value="#{msg.ENTER_EMAIL_ADDRESS}" />
-								</div>
-
-								<div class="table_right">
-									<h:inputText class="input" id="email" size="20" maxlength="255" value="#{passwordRecoveryController.emailAddress}" />
-								</div>
-
-								<div class="clear"></div>
-							</div>
-
-						</fieldset>
-
-						<div class="table_footer">
-							<h:commandButton class="reset" type="reset" value="#{msg.BUTTON_RESET_FORM}" />
-							<h:commandButton class="submit" type="submit" value="#{msg.BUTTON_CONTINUE_STEP_2}" action="#{passwordRecoveryController.doLostPasswordStep2()}" />
-						</div>
-					</div>
-				</h:form>
-			</div>
-		</ui:define>
-	</ui:composition>
-</html>
diff --git a/web/user/register.xhtml b/web/user/register.xhtml
deleted file mode 100644
index b03c31e9..00000000
--- a/web/user/register.xhtml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html
-	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
-	xmlns="http://www.w3.org/1999/xhtml"
-	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
-	  xmlns:h="http://xmlns.jcp.org/jsf/html"
-	  xmlns:f="http://xmlns.jcp.org/jsf/core"
-	  >
-
-	<ui:composition template="/WEB-INF/templates/guest/guest_base.tpl">
-		<ui:define name="guest_title">#{msg.PAGE_TITLE_USER_REGISTER}</ui:define>
-
-		<ui:define name="content_header">
-			#{msg.CONTENT_TITLE_USER_REGISTER}
-		</ui:define>
-
-		<ui:define name="content">
-			<div class="para">
-				#{msg.GUEST_ALREADY_USER_CONTINUE_LOGIN_1}
-				<h:link outcome="user_login" value="#{msg.CLICK_HERE}" />
-				#{msg.GUEST_ALREADY_USER_CONTINUE_LOGIN_2}
-			</div>
-
-			<div class="registration_form">
-				<ui:include src="/WEB-INF/templates/guest/guest_registration_form.tpl" />
-			</div>
-		</ui:define>
-	</ui:composition>
-</html>
diff --git a/web/user/register_done.xhtml b/web/user/register_done.xhtml
deleted file mode 100644
index bbec38e6..00000000
--- a/web/user/register_done.xhtml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html
-	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
-	xmlns="http://www.w3.org/1999/xhtml"
-	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
-	  xmlns:h="http://xmlns.jcp.org/jsf/html"
-	  xmlns:f="http://xmlns.jcp.org/jsf/core"
-	  >
-
-	<ui:composition template="/WEB-INF/templates/guest/guest_base.tpl">
-		<ui:define name="guest_title">#{msg.PAGE_TITLE_USER_REGISTER_DONE}</ui:define>
-
-		<ui:define name="content_header">
-			#{msg.CONTENT_TITLE_USER_REGISTER_DONE}
-		</ui:define>
-
-		<ui:define name="content">
-			<div class="para">
-				#{msg.GUEST_USER_REGISTRATION_COMPLETED}
-			</div>
-
-			<div class="registration_form">
-				<h:link id="resend_link" class="resend_link" value="#{msg.LINK_GUEST_RESENT_CONFIRMATION_LINK}" outcome="user_resend_link">
-					<f:param name="user_id" value="#{userController.userId}" />
-				</h:link>
-			</div>
-		</ui:define>
-	</ui:composition>
-</html>
diff --git a/web/user/resend_link.xhtml b/web/user/resend_link.xhtml
deleted file mode 100644
index 89da7508..00000000
--- a/web/user/resend_link.xhtml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html
-	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
-	xmlns="http://www.w3.org/1999/xhtml"
-	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
-	  xmlns:h="http://xmlns.jcp.org/jsf/html"
-	  xmlns:f="http://xmlns.jcp.org/jsf/core"
-	  >
-
-	<ui:composition template="/WEB-INF/templates/guest/guest_base.tpl">
-		<ui:define name="guest_title">#{msg.PAGE_TITLE_INDEX_RESEND_LINK}</ui:define>
-
-		<ui:define name="content_header">
-			#{msg.CONTENT_TITLE_INDEX_RESEND_LINK}
-		</ui:define>
-
-		<ui:define name="content">
-			Here goes your content.
-		</ui:define>
-	</ui:composition>
-</html>
diff --git a/web/user/show_addressbook.xhtml b/web/user/show_addressbook.xhtml
deleted file mode 100644
index 1a1193fc..00000000
--- a/web/user/show_addressbook.xhtml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html
-	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
-	xmlns="http://www.w3.org/1999/xhtml"
-	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
-	  xmlns:h="http://xmlns.jcp.org/jsf/html"
-	  xmlns:f="http://xmlns.jcp.org/jsf/core">
-
-	<f:metadata>
-		<f:viewParam id="addressbookId" name="addressbookId" value="#{addressbookController.addressbookId}" required="true" requiredMessage="#{msg.PARAMETER_ADDRESSBOOK_ID_MISSING}" converterMessage="#{msg.PARAMETER_ADDRESSBOOK_ID_INVALID}" validatorMessage="#{msg.PARAMETER_ADDRESSBOOK_ID_NOT_FOUND}">
-			<f:convertNumber for="addressbookId" type="number" minIntegerDigits="1" maxIntegerDigits="20" />
-			<f:validator for="addressbookId" validatorId="AddressbookIdValidator" />
-		</f:viewParam>
-	</f:metadata>
-
-	<ui:composition template="/WEB-INF/templates/#{loginController.templateType}/#{loginController.templateType}_base.tpl">
-		<ui:define name="login_title">#{msg.PAGE_TITLE_USER_SHOW_ADDRESSBOOK}</ui:define>
-		<ui:define name="guest_title">#{msg.PAGE_TITLE_INDEX_SHOW_ADDRESSBOOK}</ui:define>
-
-		<ui:define name="content_header">
-			#{msg.CONTENT_TITLE_USER_SHOW_ADDRESSBOOK}
-		</ui:define>
-
-		<ui:define name="content">
-			<h:panelGrid headerClass="table_header" styleClass="table" columns="2" rendered="#{addressbookController.loadAddressbook()}">
-				<f:facet name="header">#{msg.TABLE_HEADER_SHOW_ADDRESSBOOK}</f:facet>
-
-				<h:outputLabel for="addressbookName" class="table_label">#{msg.ADDRESSBOOK_NAME}</h:outputLabel>
-				<h:outputText id="addressbookName" value="#{addressbookController.addressbookName}" />
-
-				<h:outputLabel for="userProfileLink" class="table_label">#{msg.ADDRESSBOOK_OWNER}</h:outputLabel>
-				<ui:include src="/WEB-INF/templates/generic/user_profile_link.tpl">
-					<ui:param name="user" value="#{addressbookController.addressbookUser}" />
-				</ui:include>
-
-				<h:outputLabel for="addressbookCreated" class="table_label">#{msg.ADDRESSBOOK_CREATED}</h:outputLabel>
-				<h:outputFormat id="addressbookCreated" value="#{addressbookController.addressbook.addressbookCreated.time}" title="#{msg.ADDRESSBOOK_CREATED_TITLE}">
-					<f:convertDateTime for="addressbookCreated" type="both" timeStyle="short" dateStyle="medium" />
-				</h:outputFormat>
-
-				<h:outputLabel for="addressbookStatus" class="table_label">#{msg.ADDRESSBOOK_STATUS}</h:outputLabel>
-				<h:outputText id="addressbookStatus" value="#{msg[addressbookController.addressbook.addressbookStatus.messageKey]}" title="#{msg.ADDRESSBOOK_STATUS_TITLE}" />
-
-				<f:facet name="footer">
-					<h:outputText id="ownProfileInvible" class="notice" value="#{msg.USER_NOT_LOGGED_IN}" rendered="#{not loginController.isUserLoggedIn()}" />
-					<h:outputText id="ownProfileInvible" class="notice" value="#{msg.LOGIN_OWN_PROFILE_INVISIBLE}" rendered="#{loginController.isUserLoggedIn() and loginController.isInvisible()}" />
-
-					<ui:fragment rendered="#{loginController.isUserLoggedIn() and not loginController.isInvisible()}">
-						<h:link id="startSharing" outcome="login_start_sharing_addressbook" value="#{msg.LINK_LOGIN_START_SHARING_ADDRESSBOOK}" title="#{msg.LINK_LOGIN_START_SHARING_ADDRESSBOOK_TITLE}" rendered="#{addressbookController.isOwnAddressbook()}" />
-
-						<h:outputText value="Bla bla" rendered="#{addressbookController.isOtherAddressbook()}" />
-					</ui:fragment>
-				</f:facet>
-			</h:panelGrid>
-		</ui:define>
-	</ui:composition>
-</html>
diff --git a/web/user/show_addressbook_entries.xhtml b/web/user/show_addressbook_entries.xhtml
deleted file mode 100644
index 0164c1a5..00000000
--- a/web/user/show_addressbook_entries.xhtml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html
-	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
-	xmlns="http://www.w3.org/1999/xhtml"
-	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
-	  xmlns:h="http://xmlns.jcp.org/jsf/html"
-	  xmlns:f="http://xmlns.jcp.org/jsf/core"
-	  >
-
-	<ui:composition template="/WEB-INF/templates/login/login_base.tpl">
-		<ui:define name="login_title">#{msg.PAGE_TITLE_USER_SHOW_ADDRESSBOOK_ENTRIES}</ui:define>
-
-		<ui:define name="content_header">
-			#{msg.CONTENT_TITLE_USER_SHOW_ADDRESSBOOK_ENTRIES}
-		</ui:define>
-
-		<ui:define name="content">
-			Here goes your content.
-		</ui:define>
-	</ui:composition>
-</html>
diff --git a/web/user/user_list.xhtml b/web/user/user_list.xhtml
deleted file mode 100644
index 60b60b7c..00000000
--- a/web/user/user_list.xhtml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html
-	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
-	xmlns="http://www.w3.org/1999/xhtml"
-	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
-	  xmlns:h="http://xmlns.jcp.org/jsf/html"
-	  xmlns:f="http://xmlns.jcp.org/jsf/core">
-
-	<ui:composition template="/WEB-INF/templates/#{loginController.templateType}/#{loginController.templateType}_base.tpl">
-		<ui:define name="login_title">#{msg.PAGE_TITLE_USER_LIST}</ui:define>
-
-		<ui:define name="content_header">
-			#{msg.CONTENT_TITLE_USER_LIST}
-		</ui:define>
-
-		<ui:define name="content">
-			<div class="table_big">
-				<div class="table_header">
-					#{msg.TABLE_HEADER_USER_LIST}
-				</div>
-
-				<h:dataTable id="userList" var="user" value="#{userController.allVisibleUsers()}" headerClass="table_header_column25" summary="#{msg.TABLE_SUMMARY_USER_LIST}" rendered="#{userController.isVisibleUserFound()}">
-					<h:column>
-						<f:facet name="header">#{msg.USER_NAME}</f:facet>
-						<ui:include src="/WEB-INF/templates/generic/user_profile_link.tpl">
-							<ui:param name="user" value="#{user}" />
-						</ui:include>
-					</h:column>
-
-					<h:column>
-						<f:facet name="header">#{msg.USER_CREATED}</f:facet>
-						<h:outputFormat id="userCreated" value="#{user.userCreated.time}" title="#{msg.USER_CREATED_TITLE}" />
-					</h:column>
-
-					<h:column>
-						<f:facet name="header">#{msg.USER_LIST_SHARING_ADDRESSBOOKS}</f:facet>
-						<ui:fragment rendered="#{loginController.isUserLoggedIn()}">
-							<h:link outcome="login_list_sharing_addressbooks" value="#{msg.LINK_LOGIN_LIST_SHARING_ADDRESSBOOKS}" title="#{msg.LINK_LOGIN_LIST_SHARING_ADDRESSBOOKS_TITLE}">
-								<f:param name="userId" value="#{user.userId}" />
-							</h:link>
-						</ui:fragment>
-						<ui:fragment rendered="#{loginController.isGuest()}">
-							<h:outputText id="userShared" value="#{addressbookController.countAllUserSharedAddressbooks(user)}" />
-						</ui:fragment>
-					</h:column>
-				</h:dataTable>
-			</div>
-		</ui:define>
-	</ui:composition>
-</html>
diff --git a/web/user/user_profile.xhtml b/web/user/user_profile.xhtml
deleted file mode 100644
index 0e58740f..00000000
--- a/web/user/user_profile.xhtml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html
-	lang="#{localizationController.language}" xml:lang="#{localizationController.language}"
-	xmlns="http://www.w3.org/1999/xhtml"
-	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
-	  xmlns:h="http://xmlns.jcp.org/jsf/html"
-	  xmlns:f="http://xmlns.jcp.org/jsf/core"
-	  xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">
-
-	<f:metadata>
-		<f:viewParam id="userId" name="userId" value="#{userController.userId}" required="true" requiredMessage="#{msg.PARAMETER_USER_ID_MISSING}" converterMessage="#{msg.PARAMETER_USER_ID_INVALID}" validatorMessage="#{msg.PARAMETER_USER_ID_NOT_FOUND}">
-			<f:convertNumber for="userId" type="number" minIntegerDigits="1" maxIntegerDigits="20" />
-			<f:validator for="userId" validatorId="UserIdValidator" />
-		</f:viewParam>
-	</f:metadata>
-
-	<ui:composition template="/WEB-INF/templates/#{loginController.templateType}/#{loginController.templateType}_base.tpl">
-		<ui:define name="login_title">#{msg.PAGE_TITLE_LOGIN_USER_PROFILE}</ui:define>
-		<ui:define name="guest_title">#{msg.PAGE_TITLE_INDEX_USER_PROFILE}</ui:define>
-
-		<ui:define name="content_header">
-			#{msg.CONTENT_TITLE_INDEX_USER_PROFILE}
-		</ui:define>
-
-		<ui:define name="content">
-			<c:choose>
-				<c:when test="#{userController.isUserIdEmpty()}">
-					<ui:include src="/WEB-INF/templates/generic/userid_error.tpl" />
-				</c:when>
-
-				<c:when test="#{profileController.isProfileLinkVisibleById(userController.userId)}">
-					<div align="center">
-						<h:panelGrid styleClass="table" headerClass="table_header" footerClass="table_footer">
-							<f:facet name="header">
-								#{msg.PUBLIC_USER_PROFILE}
-							</f:facet>
-						</h:panelGrid>
-					</div>
-				</c:when>
-
-				<c:otherwise>
-					#{msg.ERROR_PROFILE_NOT_VISIBLE}
-				</c:otherwise>
-			</c:choose>
-		</ui:define>
-	</ui:composition>
-</html>