From 97664a99d45bc0ef0e3378ca8ac31e801475e355 Mon Sep 17 00:00:00 2001
From: Roland Haeder <roland@mxchange.org>
Date: Sun, 17 Apr 2016 15:51:08 +0200
Subject: [PATCH] Continued with admin area: - added a lot new administrative
 pages for contact's cellphone, mobile provider and user - used templates for
 repeated content - added a lot new language strings - added converter for
 contacts and cellphone - added new project dependency jcontacts-lib.jar -
 updated some older (hope, it doesn't conflict) - added mini-navigation CSS
 classes - removed old controller
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit

Signed-off-by: Roland Häder <roland@mxchange.org>
---
 monitor/README.txt                            |   6 +-
 nbproject/faces-config.NavData                |  92 +++++----
 ...ookAdminMobileProviderWebRequestBean.java} |  12 +-
 ...inMobileProviderWebRequestController.java} |   4 +-
 ...sbookMobileProviderWebApplicationBean.java |  85 --------
 ...obileProviderWebApplicationController.java |  37 ----
 ...ressbookMobileProviderWebRequestBean.java} |   8 +-
 ...okMobileProviderWebRequestController.java} |   4 +-
 ...ssbookAdminContactPhoneWebRequestBean.java | 145 ++++++++++++++
 ...AdminContactPhoneWebRequestController.java |  93 +++++++++
 .../AddressbookAdminUserWebSessionBean.java   |  18 +-
 .../user/AddressbookUserWebSessionBean.java   |  39 +++-
 .../AddressbookUserWebSessionController.java  |  14 ++
 .../AddressbookCellphoneConverter.java        | 133 +++++++++++++
 .../contact/AddressbookContactConverter.java  | 133 +++++++++++++
 .../localization/bundle_de_DE.properties      |  98 +++++++++-
 .../localization/bundle_en_US.properties      |  74 ++++++-
 web/WEB-INF/faces-config.xml                  | 142 ++++++++++++--
 .../templates/admin/admin_cellphone_data.tpl  |  48 +++++
 .../templates/admin/admin_cellphone_links.tpl |  46 +++++
 .../admin/admin_form_mobile_provider.tpl      |   8 +-
 web/WEB-INF/templates/admin/admin_menu.tpl    |   3 -
 .../templates/admin/admin_user_links.tpl      |  40 ++++
 .../generic/gender_selection_box.tpl          |   4 +-
 .../generic/mobile_selection_box.tpl          |   4 +-
 .../admin_contact_cellphone_delete.xhtml      |  24 +++
 web/admin/admin_contact_cellphone_edit.xhtml  |  24 +++
 web/admin/admin_contact_cellphone_list.xhtml  |  20 ++
 web/admin/admin_contact_cellphone_show.xhtml  |  92 +++++++++
 .../admin_contact_cellphone_unlink.xhtml      |  25 +++
 web/admin/admin_contact_show.xhtml            |  20 ++
 web/admin/admin_mobile_provider_list.xhtml    |   4 +-
 web/admin/admin_mobile_provider_show.xhtml    |  20 ++
 web/admin/admin_user_list.xhtml               |   4 +-
 web/admin/admin_user_show.xhtml               | 182 ++++++++++++++++++
 web/resources/css/cssLayout.css               |  38 +++-
 36 files changed, 1500 insertions(+), 243 deletions(-)
 rename src/java/org/mxchange/{pizzaapplication/beans/mobileprovider/PizzaAdminMobileProviderWebRequestBean.java => addressbook/beans/mobileprovider/AddressbookAdminMobileProviderWebRequestBean.java} (92%)
 rename src/java/org/mxchange/{pizzaapplication/beans/mobileprovider/PizzaAdminMobileProviderWebRequestController.java => addressbook/beans/mobileprovider/AddressbookAdminMobileProviderWebRequestController.java} (94%)
 delete mode 100644 src/java/org/mxchange/addressbook/beans/mobileprovider/AddressbookMobileProviderWebApplicationBean.java
 delete mode 100644 src/java/org/mxchange/addressbook/beans/mobileprovider/AddressbookMobileProviderWebApplicationController.java
 rename src/java/org/mxchange/{pizzaapplication/beans/mobileprovider/PizzaMobileProviderWebRequestBean.java => addressbook/beans/mobileprovider/AddressbookMobileProviderWebRequestBean.java} (90%)
 rename src/java/org/mxchange/{pizzaapplication/beans/mobileprovider/PizzaMobileProviderWebRequestController.java => addressbook/beans/mobileprovider/AddressbookMobileProviderWebRequestController.java} (90%)
 create mode 100644 src/java/org/mxchange/addressbook/beans/phone/AddressbookAdminContactPhoneWebRequestBean.java
 create mode 100644 src/java/org/mxchange/addressbook/beans/phone/AddressbookAdminContactPhoneWebRequestController.java
 create mode 100644 src/java/org/mxchange/addressbook/converter/cellphone/AddressbookCellphoneConverter.java
 create mode 100644 src/java/org/mxchange/addressbook/converter/contact/AddressbookContactConverter.java
 create mode 100644 web/WEB-INF/templates/admin/admin_cellphone_data.tpl
 create mode 100644 web/WEB-INF/templates/admin/admin_cellphone_links.tpl
 create mode 100644 web/WEB-INF/templates/admin/admin_user_links.tpl
 create mode 100644 web/admin/admin_contact_cellphone_delete.xhtml
 create mode 100644 web/admin/admin_contact_cellphone_edit.xhtml
 create mode 100644 web/admin/admin_contact_cellphone_list.xhtml
 create mode 100644 web/admin/admin_contact_cellphone_show.xhtml
 create mode 100644 web/admin/admin_contact_cellphone_unlink.xhtml
 create mode 100644 web/admin/admin_contact_show.xhtml
 create mode 100644 web/admin/admin_mobile_provider_show.xhtml
 create mode 100644 web/admin/admin_user_show.xhtml

diff --git a/monitor/README.txt b/monitor/README.txt
index 6527106e..e5d0dc9c 100644
--- a/monitor/README.txt
+++ b/monitor/README.txt
@@ -1,8 +1,8 @@
 How to use this monitoring scripts:
 -----------------------------------
 
-1) Copy .monitor-config.sh to ${HOME}/.monitor-pizzaservice-war-cron.sh
-   Please note that your clone path must be 'pizzaservice-war' then.
+1) Copy .monitor-config.sh to ${HOME}/.monitor-addressbook-war-cron.sh
+   Please note that your clone path must be 'addressbook-war' then.
 
 2) Execute "crontab -e" as same user
 
@@ -11,7 +11,7 @@ How to use this monitoring scripts:
 PATH="/bla/foo/bin:/bar/bin"
 SHELL="/bin/bash"
 
-*/10 * * * * cd ${HOME}/checkouts/pizzaservice-war/monitor/ && ./monitor-cron.sh
+*/10 * * * * cd ${HOME}/checkouts/addressbook-war/monitor/ && ./monitor-cron.sh
 
 Please make sure PATH and SHELL are set (maybe prevents some problems).
 
diff --git a/nbproject/faces-config.NavData b/nbproject/faces-config.NavData
index 4841e9ad..52787ffd 100644
--- a/nbproject/faces-config.NavData
+++ b/nbproject/faces-config.NavData
@@ -2,48 +2,58 @@
 <Scene Scope="Project" version="2">
     <Scope Scope="Faces Configuration Only"/>
     <Scope Scope="Project">
-        <Node id="login/login_shared_addressbooks.xhtml" x="1150" y="600" zoom="true"/>
-        <Node id="admin/admin_country_list.xhtml" x="400" y="300" zoom="true"/>
-        <Node id="admin/admin_user_delete.xhtml" x="400" y="900" zoom="true"/>
-        <Node id="privacy.xhtml" x="1650" y="150" zoom="true"/>
-        <Node id="login/login_change_password.xhtml" x="1400" y="300" zoom="true"/>
-        <Node id="admin/index.xhtml" x="900" y="300" zoom="true"/>
-        <Node id="basket.xhtml" x="1150" y="300" zoom="true"/>
-        <Node id="login/login_data_saved.xhtml" x="650" y="300" zoom="true"/>
+        <Node id="admin/admin_user_delete.xhtml" x="1150" y="900" zoom="true"/>
+        <Node id="privacy.xhtml" x="400" y="600" zoom="true"/>
+        <Node id="login/login_change_password.xhtml" x="1150" y="750" zoom="true"/>
+        <Node id="admin/index.xhtml" x="400" y="450" zoom="true"/>
+        <Node id="login/login_start_sharing_addressbook.xhtml" x="400" y="150" zoom="true"/>
+        <Node id="admin/admin_country_delete.xhtml" x="1900" y="450" zoom="true"/>
+        <Node id="admin/admin_mobile_provider_show.xhtml" x="1150" y="600" zoom="true"/>
+        <Node id="admin/admin_mobile_provider_edit.xhtml" x="1150" y="150" zoom="true"/>
+        <Node id="user/resend_link.xhtml" x="650" y="900" zoom="true"/>
+        <Node id="admin/admin_logout.xhtml" x="900" y="1050" zoom="true"/>
+        <Node id="admin/admin_user_show.xhtml" x="150" y="300" zoom="true"/>
+        <Node id="admin/admin_user_edit.xhtml" x="1900" y="300" zoom="true"/>
+        <Node id="index.xhtml" x="650" y="600" zoom="true"/>
+        <Node id="admin/admin_contact_show.xhtml" x="400" y="300" zoom="true"/>
+        <Node id="user/register_done.xhtml" x="2150" y="300" zoom="true"/>
+        <Node id="admin/admin_category_delete.xhtml" x="150" y="450" zoom="true"/>
+        <Node id="*" x="900" y="300" zoom="true"/>
+        <Node id="user/login_error.xhtml" x="150" y="1350" zoom="true"/>
+        <Node id="user/show_addressbook_entries.xhtml" x="1400" y="600" zoom="true"/>
+        <Node id="user/lost_passwd.xhtml" x="900" y="900" zoom="true"/>
+        <Node id="user/login.xhtml" x="150" y="750" zoom="true"/>
+        <Node id="login/login_list_sharing_addressbooks.xhtml" x="1900" y="150" zoom="true"/>
+        <Node id="login/login_edit_user_data.xhtml" x="1650" y="300" zoom="true"/>
+        <Node id="login/login_shared_addressbooks.xhtml" x="1150" y="450" zoom="true"/>
+        <Node id="admin/admin_country_list.xhtml" x="900" y="150" zoom="true"/>
+        <Node id="admin/admin_contact_cellphone_delete.xhtml" x="650" y="150" zoom="true"/>
+        <Node id="basket.xhtml" x="150" y="150" zoom="true"/>
+        <Node id="admin/admin_contact_cellphone_edit.xhtml" x="650" y="450" zoom="true"/>
+        <Node id="login/login_data_saved.xhtml" x="1150" y="300" zoom="true"/>
         <Node id="exception.xhtml" x="400" y="1050" zoom="true"/>
-        <Node id="admin/admin_country_delete.xhtml" x="150" y="300" zoom="true"/>
-        <Node id="login/login_start_sharing_addressbook.xhtml" x="150" y="1200" zoom="true"/>
-        <Node id="user/register.xhtml" x="400" y="150" zoom="true"/>
-        <Node id="admin/admin_mobile_provider_edit.xhtml" x="150" y="450" zoom="true"/>
-        <Node id="admin/admin_country_edit.xhtml" x="1400" y="150" zoom="true"/>
-        <Node id="user/resend_link.xhtml" x="150" y="900" zoom="true"/>
-        <Node id="login/login_index.xhtml" x="900" y="750" zoom="true"/>
-        <Node id="login/login_add_addressbook.xhtml" x="900" y="900" zoom="true"/>
-        <Node id="login/login_own_addressbooks.xhtml" x="650" y="750" zoom="true"/>
-        <Node id="admin/admin_mobile_provider_delete.xhtml" x="1150" y="450" zoom="true"/>
-        <Node id="admin/admin_user_list.xhtml" x="1400" y="600" zoom="true"/>
-        <Node id="terms.xhtml" x="150" y="600" zoom="true"/>
-        <Node id="admin/admin_logout.xhtml" x="400" y="600" zoom="true"/>
-        <Node id="admin/admin_user_edit.xhtml" x="1150" y="750" zoom="true"/>
-        <Node id="user/user_list.xhtml" x="900" y="600" zoom="true"/>
-        <Node id="admin/admin_mobile_provider_list.xhtml" x="650" y="150" zoom="true"/>
-        <Node id="index.xhtml" x="150" y="150" zoom="true"/>
-        <Node id="logout.xhtml" x="1900" y="300" zoom="true"/>
-        <Node id="user/register_done.xhtml" x="1150" y="150" zoom="true"/>
-        <Node id="login/login_change_personal_data.xhtml" x="400" y="450" zoom="true"/>
-        <Node id="user/user_profile.xhtml" x="1900" y="150" zoom="true"/>
-        <Node id="admin/admin_user_unlock.xhtml" x="400" y="750" zoom="true"/>
-        <Node id="*" x="900" y="450" zoom="true"/>
-        <Node id="user/show_addressbook.xhtml" x="150" y="1050" zoom="true"/>
-        <Node id="imprint.xhtml" x="650" y="900" zoom="true"/>
-        <Node id="user/login_error.xhtml" x="650" y="600" zoom="true"/>
-        <Node id="login/login_other_addressbooks.xhtml" x="1650" y="300" zoom="true"/>
-        <Node id="user/show_addressbook_entries.xhtml" x="1650" y="450" zoom="true"/>
-        <Node id="login/login_change_email_address.xhtml" x="2150" y="150" zoom="true"/>
-        <Node id="user/lost_passwd.xhtml" x="150" y="750" zoom="true"/>
-        <Node id="login/login_list_sharing_addressbooks.xhtml" x="900" y="150" zoom="true"/>
-        <Node id="user/login.xhtml" x="650" y="450" zoom="true"/>
-        <Node id="login/login_edit_user_data.xhtml" x="1400" y="450" zoom="true"/>
+        <Node id="user/register.xhtml" x="900" y="750" zoom="true"/>
+        <Node id="admin/admin_country_edit.xhtml" x="1650" y="450" zoom="true"/>
+        <Node id="login/login_add_addressbook.xhtml" x="400" y="900" zoom="true"/>
+        <Node id="login/login_index.xhtml" x="1400" y="750" zoom="true"/>
+        <Node id="login/login_own_addressbooks.xhtml" x="2400" y="150" zoom="true"/>
+        <Node id="admin/admin_mobile_provider_delete.xhtml" x="150" y="600" zoom="true"/>
+        <Node id="admin/admin_user_list.xhtml" x="150" y="1050" zoom="true"/>
+        <Node id="terms.xhtml" x="1650" y="150" zoom="true"/>
+        <Node id="user/user_list.xhtml" x="650" y="750" zoom="true"/>
+        <Node id="admin/admin_mobile_provider_list.xhtml" x="1400" y="450" zoom="true"/>
+        <Node id="logout.xhtml" x="900" y="450" zoom="true"/>
+        <Node id="admin/admin_contact_cellphone_list.xhtml" x="2150" y="150" zoom="true"/>
+        <Node id="login/login_change_personal_data.xhtml" x="150" y="900" zoom="true"/>
+        <Node id="user/user_profile.xhtml" x="1650" y="600" zoom="true"/>
+        <Node id="admin/admin_user_unlock.xhtml" x="650" y="1050" zoom="true"/>
+        <Node id="user/show_addressbook.xhtml" x="650" y="300" zoom="true"/>
+        <Node id="imprint.xhtml" x="1400" y="300" zoom="true"/>
+        <Node id="admin/admin_contact_cellphone_show.xhtml" x="400" y="750" zoom="true"/>
+        <Node id="login/login_other_addressbooks.xhtml" x="150" y="1200" zoom="true"/>
+        <Node id="admin/admin_product_delete.xhtml" x="400" y="1200" zoom="true"/>
+        <Node id="login/login_change_email_address.xhtml" x="900" y="600" zoom="true"/>
+        <Node id="admin/admin_contact_cellphone_unlink.xhtml" x="1400" y="150" zoom="true"/>
     </Scope>
     <Scope Scope="All Faces Configurations"/>
 </Scene>
diff --git a/src/java/org/mxchange/pizzaapplication/beans/mobileprovider/PizzaAdminMobileProviderWebRequestBean.java b/src/java/org/mxchange/addressbook/beans/mobileprovider/AddressbookAdminMobileProviderWebRequestBean.java
similarity index 92%
rename from src/java/org/mxchange/pizzaapplication/beans/mobileprovider/PizzaAdminMobileProviderWebRequestBean.java
rename to src/java/org/mxchange/addressbook/beans/mobileprovider/AddressbookAdminMobileProviderWebRequestBean.java
index 02aae750..e3a30785 100644
--- a/src/java/org/mxchange/pizzaapplication/beans/mobileprovider/PizzaAdminMobileProviderWebRequestBean.java
+++ b/src/java/org/mxchange/addressbook/beans/mobileprovider/AddressbookAdminMobileProviderWebRequestBean.java
@@ -14,7 +14,7 @@
  * You should have received a copy of the GNU Affero General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package org.mxchange.pizzaapplication.beans.mobileprovider;
+package org.mxchange.addressbook.beans.mobileprovider;
 
 import java.util.Iterator;
 import java.util.List;
@@ -41,9 +41,9 @@ import org.mxchange.jphone.phonenumbers.mobileprovider.MobileProvider;
  * <p>
  * @author Roland Haeder<roland@mxchange.org>
  */
-@Named ("adminMobileController")
+@Named ("adminMobileProviderController")
 @RequestScoped
-public class PizzaAdminMobileProviderWebRequestBean implements PizzaAdminMobileProviderWebRequestController {
+public class AddressbookAdminMobileProviderWebRequestBean implements AddressbookAdminMobileProviderWebRequestController {
 
 	/**
 	 * Serial number
@@ -59,7 +59,7 @@ public class PizzaAdminMobileProviderWebRequestBean implements PizzaAdminMobileP
 	 * Regular bean
 	 */
 	@Inject
-	private PizzaMobileProviderWebRequestController mobileController;
+	private AddressbookMobileProviderWebRequestController mobileController;
 
 	/**
 	 * Event being fired when the mobile provider was added
@@ -91,14 +91,14 @@ public class PizzaAdminMobileProviderWebRequestBean implements PizzaAdminMobileP
 	/**
 	 * Default constructor
 	 */
-	public PizzaAdminMobileProviderWebRequestBean () {
+	public AddressbookAdminMobileProviderWebRequestBean () {
 		// Try it
 		try {
 			// Get initial context
 			Context context = new InitialContext();
 
 			// Try to lookup the beans
-			this.adminRemoteBean = (AdminMobileProviderSingletonBeanRemote) context.lookup("java:global/PizzaService-ejb/adminmobileprovider!org.mxchange.jphone.phonenumbers.mobileprovider.AdminMobileProviderSingletonBeanRemote"); //NOI18N
+			this.adminRemoteBean = (AdminMobileProviderSingletonBeanRemote) context.lookup("java:global/addressbook-ejb/adminmobileprovider!org.mxchange.jphone.phonenumbers.mobileprovider.AdminMobileProviderSingletonBeanRemote"); //NOI18N
 		} catch (final NamingException e) {
 			// Throw it again
 			throw new FaceletException(e);
diff --git a/src/java/org/mxchange/pizzaapplication/beans/mobileprovider/PizzaAdminMobileProviderWebRequestController.java b/src/java/org/mxchange/addressbook/beans/mobileprovider/AddressbookAdminMobileProviderWebRequestController.java
similarity index 94%
rename from src/java/org/mxchange/pizzaapplication/beans/mobileprovider/PizzaAdminMobileProviderWebRequestController.java
rename to src/java/org/mxchange/addressbook/beans/mobileprovider/AddressbookAdminMobileProviderWebRequestController.java
index 558de55b..6a79fd32 100644
--- a/src/java/org/mxchange/pizzaapplication/beans/mobileprovider/PizzaAdminMobileProviderWebRequestController.java
+++ b/src/java/org/mxchange/addressbook/beans/mobileprovider/AddressbookAdminMobileProviderWebRequestController.java
@@ -14,7 +14,7 @@
  * You should have received a copy of the GNU Affero General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package org.mxchange.pizzaapplication.beans.mobileprovider;
+package org.mxchange.addressbook.beans.mobileprovider;
 
 import java.io.Serializable;
 import java.util.List;
@@ -27,7 +27,7 @@ import org.mxchange.jphone.phonenumbers.mobileprovider.MobileProvider;
  * <p>
  * @author Roland Haeder<roland@mxchange.org>
  */
-public interface PizzaAdminMobileProviderWebRequestController extends Serializable {
+public interface AddressbookAdminMobileProviderWebRequestController extends Serializable {
 
 	/**
 	 * Adds a mobile provider to database by calling the EJB. A pre-check on
diff --git a/src/java/org/mxchange/addressbook/beans/mobileprovider/AddressbookMobileProviderWebApplicationBean.java b/src/java/org/mxchange/addressbook/beans/mobileprovider/AddressbookMobileProviderWebApplicationBean.java
deleted file mode 100644
index 57a9fdc2..00000000
--- a/src/java/org/mxchange/addressbook/beans/mobileprovider/AddressbookMobileProviderWebApplicationBean.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2016 Roland Haeder
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.mxchange.addressbook.beans.mobileprovider;
-
-import java.util.Collections;
-import java.util.List;
-import javax.annotation.PostConstruct;
-import javax.enterprise.context.ApplicationScoped;
-import javax.faces.view.facelets.FaceletException;
-import javax.inject.Named;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-import org.mxchange.jphone.phonenumbers.mobileprovider.MobileProvider;
-import org.mxchange.jphone.phonenumbers.mobileprovider.MobileProviderSingletonBeanRemote;
-
-/**
- * A SMS provider bean
- * <p>
- * @author Roland Haeder<roland@mxchange.org>
- */
-@Named ("cellphone")
-@ApplicationScoped
-public class AddressbookMobileProviderWebApplicationBean implements AddressbookMobileProviderWebApplicationController {
-
-	/**
-	 * Serial number
-	 */
-	private static final long serialVersionUID = 176_985_298_681_742_960L;
-
-	/**
-	 * Remote country EJB
-	 */
-	private MobileProviderSingletonBeanRemote cellphoneBean;
-
-	/**
-	 * List of all countries
-	 */
-	private List<MobileProvider> cellphoneList;
-
-	/**
-	 * Default constructor
-	 */
-	public AddressbookMobileProviderWebApplicationBean () {
-		// Try this
-		try {
-			// Get initial context
-			Context context = new InitialContext();
-
-			// Try to lookup the bean
-			this.cellphoneBean = (MobileProviderSingletonBeanRemote) context.lookup("java:global/addressbook-ejb/mobileprovider!org.mxchange.jphone.phonenumbers.MobileProvider.MobileProviderSingletonBeanRemote"); //NOI18N
-		} catch (final NamingException ex) {
-			// Continue to throw
-			throw new FaceletException(ex);
-		}
-	}
-
-	@Override
-	public List<MobileProvider> allMobileProvider () {
-		// Return "cached" version
-		return Collections.unmodifiableList(this.cellphoneList);
-	}
-
-	/**
-	 * Post-initialization of this class
-	 */
-	@PostConstruct
-	public void init () {
-		this.cellphoneList = this.cellphoneBean.allMobileProvider();
-	}
-}
diff --git a/src/java/org/mxchange/addressbook/beans/mobileprovider/AddressbookMobileProviderWebApplicationController.java b/src/java/org/mxchange/addressbook/beans/mobileprovider/AddressbookMobileProviderWebApplicationController.java
deleted file mode 100644
index 6e48565a..00000000
--- a/src/java/org/mxchange/addressbook/beans/mobileprovider/AddressbookMobileProviderWebApplicationController.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2016 Roland Haeder
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-package org.mxchange.addressbook.beans.mobileprovider;
-
-import java.io.Serializable;
-import java.util.List;
-import org.mxchange.jphone.phonenumbers.mobileprovider.MobileProvider;
-
-/**
- * An interface for country beans
- * <p>
- * @author Roland Haeder<roland@mxchange.org>
- */
-public interface AddressbookMobileProviderWebApplicationController extends Serializable {
-
-	/**
-	 * A list of all countries
-	 * <p>
-	 * @return All countries
-	 */
-	List<MobileProvider> allMobileProvider ();
-
-}
diff --git a/src/java/org/mxchange/pizzaapplication/beans/mobileprovider/PizzaMobileProviderWebRequestBean.java b/src/java/org/mxchange/addressbook/beans/mobileprovider/AddressbookMobileProviderWebRequestBean.java
similarity index 90%
rename from src/java/org/mxchange/pizzaapplication/beans/mobileprovider/PizzaMobileProviderWebRequestBean.java
rename to src/java/org/mxchange/addressbook/beans/mobileprovider/AddressbookMobileProviderWebRequestBean.java
index 32656b23..47b30b17 100644
--- a/src/java/org/mxchange/pizzaapplication/beans/mobileprovider/PizzaMobileProviderWebRequestBean.java
+++ b/src/java/org/mxchange/addressbook/beans/mobileprovider/AddressbookMobileProviderWebRequestBean.java
@@ -14,7 +14,7 @@
  * You should have received a copy of the GNU Affero General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package org.mxchange.pizzaapplication.beans.mobileprovider;
+package org.mxchange.addressbook.beans.mobileprovider;
 
 import java.text.MessageFormat;
 import java.util.List;
@@ -37,7 +37,7 @@ import org.mxchange.jphone.phonenumbers.mobileprovider.MobileProviderSingletonBe
  */
 @Named ("mobileController")
 @SessionScoped
-public class PizzaMobileProviderWebRequestBean implements PizzaMobileProviderWebRequestController {
+public class AddressbookMobileProviderWebRequestBean implements AddressbookMobileProviderWebRequestController {
 
 	/**
 	 * Serial number
@@ -57,14 +57,14 @@ public class PizzaMobileProviderWebRequestBean implements PizzaMobileProviderWeb
 	/**
 	 * Default constructor
 	 */
-	public PizzaMobileProviderWebRequestBean () {
+	public AddressbookMobileProviderWebRequestBean () {
 		// Try it
 		try {
 			// Get initial context
 			Context context = new InitialContext();
 
 			// Try to lookup the beans
-			this.mobileRemoteBean = (MobileProviderSingletonBeanRemote) context.lookup("java:global/PizzaService-ejb/mobileprovider!org.mxchange.jphone.phonenumbers.mobileprovider.MobileProviderSingletonBeanRemote"); //NOI18N
+			this.mobileRemoteBean = (MobileProviderSingletonBeanRemote) context.lookup("java:global/addressbook-ejb/mobileprovider!org.mxchange.jphone.phonenumbers.mobileprovider.MobileProviderSingletonBeanRemote"); //NOI18N
 		} catch (final NamingException e) {
 			// Throw it again
 			throw new FaceletException(e);
diff --git a/src/java/org/mxchange/pizzaapplication/beans/mobileprovider/PizzaMobileProviderWebRequestController.java b/src/java/org/mxchange/addressbook/beans/mobileprovider/AddressbookMobileProviderWebRequestController.java
similarity index 90%
rename from src/java/org/mxchange/pizzaapplication/beans/mobileprovider/PizzaMobileProviderWebRequestController.java
rename to src/java/org/mxchange/addressbook/beans/mobileprovider/AddressbookMobileProviderWebRequestController.java
index ba780e5c..66ce6d53 100644
--- a/src/java/org/mxchange/pizzaapplication/beans/mobileprovider/PizzaMobileProviderWebRequestController.java
+++ b/src/java/org/mxchange/addressbook/beans/mobileprovider/AddressbookMobileProviderWebRequestController.java
@@ -14,7 +14,7 @@
  * You should have received a copy of the GNU Affero General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package org.mxchange.pizzaapplication.beans.mobileprovider;
+package org.mxchange.addressbook.beans.mobileprovider;
 
 import java.io.Serializable;
 import java.util.List;
@@ -26,7 +26,7 @@ import org.mxchange.jphone.phonenumbers.mobileprovider.MobileProvider;
  * <p>
  * @author Roland Haeder<roland@mxchange.org>
  */
-public interface PizzaMobileProviderWebRequestController extends Serializable {
+public interface AddressbookMobileProviderWebRequestController extends Serializable {
 
 	/**
 	 * Returns a list of all mobile providers
diff --git a/src/java/org/mxchange/addressbook/beans/phone/AddressbookAdminContactPhoneWebRequestBean.java b/src/java/org/mxchange/addressbook/beans/phone/AddressbookAdminContactPhoneWebRequestBean.java
new file mode 100644
index 00000000..b422fead
--- /dev/null
+++ b/src/java/org/mxchange/addressbook/beans/phone/AddressbookAdminContactPhoneWebRequestBean.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright (C) 2016 Roland Haeder
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.mxchange.addressbook.beans.phone;
+
+import java.util.List;
+import javax.enterprise.context.RequestScoped;
+import javax.faces.view.facelets.FaceletException;
+import javax.inject.Named;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import org.mxchange.jcontacts.contact.Contact;
+import org.mxchange.jcontacts.phone.AdminContactsPhoneSessionBeanRemote;
+import org.mxchange.jphone.phonenumbers.cellphone.DialableCellphoneNumber;
+import org.mxchange.jphone.phonenumbers.fax.DialableFaxNumber;
+import org.mxchange.jphone.phonenumbers.landline.DialableLandLineNumber;
+import org.mxchange.jusercore.model.user.User;
+
+/**
+ * Administrative bean (controller) for contact's phone numbers
+ * <p>
+ * @author Roland Haeder<roland@mxchange.org>
+ */
+@Named ("adminContactPhoneController")
+@RequestScoped
+public class AddressbookAdminContactPhoneWebRequestBean implements AddressbookAdminContactPhoneWebRequestController {
+
+	/**
+	 * Serial number
+	 */
+	private static final long serialVersionUID = 184_598_175_371_269_016L;
+
+	/**
+	 * Remote EJB for phone number (administrative)
+	 */
+	private AdminContactsPhoneSessionBeanRemote adminRemoteBean;
+
+	/**
+	 * Cell phone number
+	 */
+	private DialableCellphoneNumber cellPhone;
+
+	/**
+	 * Fax number
+	 */
+	private DialableFaxNumber fax;
+
+	/**
+	 * Land-line number
+	 */
+	private DialableLandLineNumber landLine;
+
+	/**
+	 * Instance of linked user account
+	 */
+	private User user;
+
+	/**
+	 * Default constructor
+	 */
+	public AddressbookAdminContactPhoneWebRequestBean () {
+		// Try it
+		try {
+			// Get initial context
+			Context context = new InitialContext();
+
+			// Try to lookup the beans
+			this.adminRemoteBean = (AdminContactsPhoneSessionBeanRemote) context.lookup("java:global/addressbook-ejb/admincontactphone!org.mxchange.jcontacts.phone.AdminContactsPhoneSessionBeanRemote"); //NOI18N
+		} catch (final NamingException e) {
+			// Throw it again
+			throw new FaceletException(e);
+		}
+	}
+
+	@Override
+	public List<Contact> allCellphoneContacts () {
+		return this.adminRemoteBean.allContacts(this.getCellPhone());
+	}
+
+	@Override
+	public DialableCellphoneNumber getCellPhone () {
+		return this.cellPhone;
+	}
+
+	@Override
+	public void setCellPhone (final DialableCellphoneNumber cellPhone) {
+		this.cellPhone = cellPhone;
+	}
+
+	@Override
+	public DialableFaxNumber getFax () {
+		return this.fax;
+	}
+
+	@Override
+	public void setFax (final DialableFaxNumber fax) {
+		this.fax = fax;
+	}
+
+	@Override
+	public DialableLandLineNumber getLandLine () {
+		return this.landLine;
+	}
+
+	@Override
+	public void setLandLine (final DialableLandLineNumber landLine) {
+		this.landLine = landLine;
+	}
+
+	@Override
+	public User getUser () {
+		return this.user;
+	}
+
+	@Override
+	public void setUser (final User user) {
+		this.user = user;
+	}
+
+	/**
+	 * Clears this bean
+	 */
+	private void clear () {
+		// Clear all instances
+		this.setCellPhone(null);
+		this.setFax(null);
+		this.setLandLine(null);
+		this.setUser(null);
+	}
+
+}
diff --git a/src/java/org/mxchange/addressbook/beans/phone/AddressbookAdminContactPhoneWebRequestController.java b/src/java/org/mxchange/addressbook/beans/phone/AddressbookAdminContactPhoneWebRequestController.java
new file mode 100644
index 00000000..63c1a348
--- /dev/null
+++ b/src/java/org/mxchange/addressbook/beans/phone/AddressbookAdminContactPhoneWebRequestController.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2016 Roland Haeder
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.mxchange.addressbook.beans.phone;
+
+import java.io.Serializable;
+import java.util.List;
+import org.mxchange.jcontacts.contact.Contact;
+import org.mxchange.jphone.phonenumbers.cellphone.DialableCellphoneNumber;
+import org.mxchange.jphone.phonenumbers.fax.DialableFaxNumber;
+import org.mxchange.jphone.phonenumbers.landline.DialableLandLineNumber;
+import org.mxchange.jusercore.model.user.User;
+
+/**
+ * An interface for a request web controller (bean) for administrative phone
+ * number purposes.
+ * <p>
+ * @author Roland Haeder<roland@mxchange.org>
+ */
+public interface AddressbookAdminContactPhoneWebRequestController extends Serializable {
+
+	List<Contact> allCellphoneContacts ();
+
+	/**
+	 * Getter for dialable cellphone number instance
+	 * <p>
+	 * @return Dialable cellphone number instance
+	 */
+	DialableCellphoneNumber getCellPhone ();
+
+	/**
+	 * Setter for dialable land-line number instance
+	 * <p>
+	 * @param landLine Dialable land-line number instance
+	 */
+	void setLandLine (final DialableLandLineNumber landLine);
+
+	/**
+	 * Getter for dialable land-line number instance
+	 * <p>
+	 * @return Dialable land-line number instance
+	 */
+	DialableLandLineNumber getLandLine ();
+
+	/**
+	 * Setter for dialable fax number instance
+	 * <p>
+	 * @param fax Dialable fax number instance
+	 */
+	void setFax (final DialableFaxNumber fax);
+
+	/**
+	 * Getter for dialable fax number instance
+	 * <p>
+	 * @return Dialable fax number instance
+	 */
+	DialableFaxNumber getFax ();
+
+	/**
+	 * Setter for dialable cellphone number instance
+	 * <p>
+	 * @param cellPhone Dialable cellphone number instance
+	 */
+	void setCellPhone (final DialableCellphoneNumber cellPhone);
+
+	/**
+	 * Getter for linked user account
+	 * <p>
+	 * @return Linked user account
+	 */
+	User getUser ();
+
+	/**
+	 * Setter for linked user account
+	 * <p>
+	 * @param user Linked user account
+	 */
+	void setUser (final User user);
+
+}
diff --git a/src/java/org/mxchange/addressbook/beans/user/AddressbookAdminUserWebSessionBean.java b/src/java/org/mxchange/addressbook/beans/user/AddressbookAdminUserWebSessionBean.java
index a55f4e38..1ac72d0b 100644
--- a/src/java/org/mxchange/addressbook/beans/user/AddressbookAdminUserWebSessionBean.java
+++ b/src/java/org/mxchange/addressbook/beans/user/AddressbookAdminUserWebSessionBean.java
@@ -578,15 +578,6 @@ public class AddressbookAdminUserWebSessionBean implements AddressbookAdminUserW
 		this.userList = this.userBean.allUsers();
 	}
 
-	/**
-	 * Checks if same password is entered and that they are not empty.
-	 * <p>
-	 * @return Whether the same password was entered
-	 */
-	private boolean isSamePasswordEntered () {
-		return ((!this.getUserPassword().isEmpty()) && (Objects.equals(this.getUserPassword(), this.getUserPasswordRepeat())));
-	}
-
 	@Override
 	public User lookupUserById (final Long userId) throws UserNotFoundException {
 		// Init variable
@@ -644,4 +635,13 @@ public class AddressbookAdminUserWebSessionBean implements AddressbookAdminUserW
 		this.setZipCode(null);
 	}
 
+	/**
+	 * Checks if same password is entered and that they are not empty.
+	 * <p>
+	 * @return Whether the same password was entered
+	 */
+	private boolean isSamePasswordEntered () {
+		return ((!this.getUserPassword().isEmpty()) && (Objects.equals(this.getUserPassword(), this.getUserPasswordRepeat())));
+	}
+
 }
diff --git a/src/java/org/mxchange/addressbook/beans/user/AddressbookUserWebSessionBean.java b/src/java/org/mxchange/addressbook/beans/user/AddressbookUserWebSessionBean.java
index a95e0607..4c2d87d9 100644
--- a/src/java/org/mxchange/addressbook/beans/user/AddressbookUserWebSessionBean.java
+++ b/src/java/org/mxchange/addressbook/beans/user/AddressbookUserWebSessionBean.java
@@ -182,6 +182,11 @@ public class AddressbookUserWebSessionBean implements AddressbookUserWebSessionC
 	 */
 	private String street;
 
+	/**
+	 * User instance
+	 */
+	private User user;
+
 	/**
 	 * Remote user bean
 	 */
@@ -280,7 +285,7 @@ public class AddressbookUserWebSessionBean implements AddressbookUserWebSessionC
 		this.addUserNameEmailAddress(registeredUser);
 
 		// Clear all data
-		this.clearData();
+		this.clear();
 
 		// Set user id again
 		this.setUserId(registeredUser.getUserId());
@@ -426,7 +431,6 @@ public class AddressbookUserWebSessionBean implements AddressbookUserWebSessionC
 
 		// Trace message
 		//this.getLogger().logTrace(MessageFormat.format("createUserInstance: user={0} - EXIT!", user));
-
 		// Return it
 		return user;
 	}
@@ -641,6 +645,16 @@ public class AddressbookUserWebSessionBean implements AddressbookUserWebSessionC
 		this.street = street;
 	}
 
+	@Override
+	public User getUser () {
+		return this.user;
+	}
+
+	@Override
+	public void setUser (final User user) {
+		this.user = user;
+	}
+
 	@Override
 	public Long getUserId () {
 		return this.userId;
@@ -784,7 +798,10 @@ public class AddressbookUserWebSessionBean implements AddressbookUserWebSessionC
 	@Override
 	public User lookupUserById (final Long userId) throws UserNotFoundException {
 		// Init variable
-		User user = null;
+		User localUser = null;
+
+		// Clear this bean
+		this.clear();
 
 		// Try to lookup it in visible user list
 		for (final Iterator<User> iterator = this.visibleUserList.iterator(); iterator.hasNext();) {
@@ -794,19 +811,22 @@ public class AddressbookUserWebSessionBean implements AddressbookUserWebSessionC
 			// Is the user id found?
 			if (Objects.equals(next.getUserId(), userId)) {
 				// Copy to other variable
-				user = next;
+				localUser = next;
 				break;
 			}
 		}
 
 		// Is it still null?
-		if (null == user) {
+		if (null == localUser) {
 			// Not visible for the current user
 			throw new UserNotFoundException(userId);
 		}
 
+		// Copy all data to this bean
+		this.copyUser(localUser);
+
 		// Return it
-		return user;
+		return localUser;
 	}
 
 	/**
@@ -833,9 +853,9 @@ public class AddressbookUserWebSessionBean implements AddressbookUserWebSessionC
 	}
 
 	/**
-	 * Clears all data in this bean
+	 * Clears this bean
 	 */
-	private void clearData () {
+	private void clear () {
 		// Clear all data
 		// - personal data
 		this.setUserId(null);
@@ -862,6 +882,9 @@ public class AddressbookUserWebSessionBean implements AddressbookUserWebSessionC
 		this.setUserName(null);
 		this.setUserPassword(null);
 		this.setUserPasswordRepeat(null);
+
+		// - user instance
+		this.setUser(null);
 	}
 
 	/**
diff --git a/src/java/org/mxchange/addressbook/beans/user/AddressbookUserWebSessionController.java b/src/java/org/mxchange/addressbook/beans/user/AddressbookUserWebSessionController.java
index 769c8795..c2f385cf 100644
--- a/src/java/org/mxchange/addressbook/beans/user/AddressbookUserWebSessionController.java
+++ b/src/java/org/mxchange/addressbook/beans/user/AddressbookUserWebSessionController.java
@@ -374,6 +374,20 @@ public interface AddressbookUserWebSessionController extends Serializable {
 	 */
 	void setStreet (final String street);
 
+	/**
+	 * Getter for user instance (e.g. from show_user)
+	 * <p>
+	 * @return User instance
+	 */
+	User getUser ();
+
+	/**
+	 * Setter for user instance (e.g. from show_user)
+	 * <p>
+	 * @param user User instance
+	 */
+	void setUser (final User user);
+
 	/**
 	 * Getter for user id
 	 * <p>
diff --git a/src/java/org/mxchange/addressbook/converter/cellphone/AddressbookCellphoneConverter.java b/src/java/org/mxchange/addressbook/converter/cellphone/AddressbookCellphoneConverter.java
new file mode 100644
index 00000000..0c62db94
--- /dev/null
+++ b/src/java/org/mxchange/addressbook/converter/cellphone/AddressbookCellphoneConverter.java
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2016 Roland Haeder
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.mxchange.addressbook.converter.cellphone;
+
+import java.text.MessageFormat;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.convert.ConverterException;
+import javax.faces.convert.FacesConverter;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import org.mxchange.jcoreeelogger.beans.local.logger.Log;
+import org.mxchange.jcoreeelogger.beans.local.logger.LoggerBeanLocal;
+import org.mxchange.jphone.exceptions.PhoneEntityNotFoundException;
+import org.mxchange.jphone.phonenumbers.DialableNumber;
+import org.mxchange.jphone.phonenumbers.cellphone.DialableCellphoneNumber;
+import org.mxchange.jphone.phonenumbers.phone.PhoneSessionBeanRemote;
+
+/**
+ * Converter for cellphone id <-> valid cellphone instance
+ * <p>
+ * @author Roland Haeder<roland@mxchange.org>
+ */
+@FacesConverter (value = "CellphoneConverter")
+public class AddressbookCellphoneConverter implements Converter {
+
+	/**
+	 * Logger instance
+	 */
+	@Log
+	private LoggerBeanLocal loggerBeanLocal;
+
+	/**
+	 * Phone EJB
+	 */
+	private PhoneSessionBeanRemote phoneBean;
+
+	/**
+	 * Initialization of this converter
+	 */
+	public AddressbookCellphoneConverter () {
+		// Try to get it
+		try {
+			// Get initial context
+			Context context = new InitialContext();
+
+			// Lookup logger
+			this.loggerBeanLocal = (LoggerBeanLocal) context.lookup("java:global/jcore-logger-ejb/logger!org.mxchange.jcoreeelogger.beans.local.logger.LoggerBeanLocal"); //NOI18N
+
+			// ... and user controller
+			this.phoneBean = (PhoneSessionBeanRemote) context.lookup("java:global/addressbook-ejb/phone!org.mxchange.jphone.phonenumbers.phone.PhoneSessionBeanRemote"); //NOI18N
+		} catch (final NamingException ex) {
+			// Continue to throw it
+			throw new RuntimeException(MessageFormat.format("context.lookup() failed: {0}", ex.getMessage()), ex); //NOI18N
+		}
+	}
+
+	@Override
+	public Object getAsObject (final FacesContext context, final UIComponent component, final String submittedValue) {
+		// Trace message
+		// NOISY-DEBUG: this.loggerBeanLocal.logTrace(MessageFormat.format("getAsObject: context={0},component={1},submittedValue={2} - CALLED!", context, component, submittedValue)); //NOI18N
+
+		// Is the value null or empty?
+		if ((null == submittedValue) || (submittedValue.trim().isEmpty())) {
+			// Warning message
+			this.loggerBeanLocal.logWarning("getAsObject: submittedValue is null or empty - EXIT!"); //NOI18N
+
+			// Return null
+			return null;
+		}
+
+		// Init instance
+		DialableCellphoneNumber cellphone = null;
+
+		try {
+			// Try to parse the value as long
+			Long cellphoneId = Long.valueOf(submittedValue);
+
+			// Debug message
+			// NOISY-DEBUG: this.loggerBeanLocal.logDebug(MessageFormat.format("getAsObject: userId{0}", userId)); //NOI18N
+
+			// Try to get cellphone instance from it
+			cellphone = this.phoneBean.findCellphoneById(cellphoneId);
+
+			// Debug message
+			// NOISY-DEBUG: this.loggerBeanLocal.logDebug(MessageFormat.format("getAsObject: cellphone={0}", cellphone)); //NOI18N
+		} catch (final NumberFormatException ex) {
+			// Throw again
+			throw new ConverterException(ex);
+		} catch (final PhoneEntityNotFoundException ex) {
+			// Debug message
+			this.loggerBeanLocal.logDebug(MessageFormat.format("getAsObject: Exception: {0} - Returning null ...", ex)); //NOI18N
+		}
+
+		// Trace message
+		// NOISY-DEBUG: this.loggerBeanLocal.logTrace(MessageFormat.format("getAsObject: cellphone={0} - EXIT!", cellphone)); //NOI18N
+
+		// Return it
+		return cellphone;
+	}
+
+	@Override
+	public String getAsString (final FacesContext context, final UIComponent component, final Object value) {
+		// Is the object null?
+		if ((null == value) || ((String.valueOf(value)).isEmpty())) {
+			// Is null
+			return ""; //NOI18N
+		} else if (!(value instanceof DialableNumber)) {
+			// Not same interface
+			throw new IllegalArgumentException(MessageFormat.format("value {0} does not implement DialableNumber.", value)); //NOI18N
+		}
+
+		// Return category id
+		return String.valueOf(((DialableNumber) value).getPhoneId());
+	}
+
+}
diff --git a/src/java/org/mxchange/addressbook/converter/contact/AddressbookContactConverter.java b/src/java/org/mxchange/addressbook/converter/contact/AddressbookContactConverter.java
new file mode 100644
index 00000000..f0c67ab4
--- /dev/null
+++ b/src/java/org/mxchange/addressbook/converter/contact/AddressbookContactConverter.java
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2016 Roland Haeder
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.mxchange.addressbook.converter.contact;
+
+import java.text.MessageFormat;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.convert.ConverterException;
+import javax.faces.convert.FacesConverter;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import org.mxchange.jcontacts.contact.Contact;
+import org.mxchange.jcontacts.contact.ContactSessionBeanRemote;
+import org.mxchange.jcontacts.exceptions.ContactNotFoundException;
+import org.mxchange.jcoreeelogger.beans.local.logger.Log;
+import org.mxchange.jcoreeelogger.beans.local.logger.LoggerBeanLocal;
+import org.mxchange.jusercore.model.user.User;
+
+/**
+ * Converter for contact id <-> valid contact instance
+ * <p>
+ * @author Roland Haeder<roland@mxchange.org>
+ */
+@FacesConverter (value = "ContactConverter")
+public class AddressbookContactConverter implements Converter {
+
+	/**
+	 * Logger instance
+	 */
+	@Log
+	private LoggerBeanLocal loggerBeanLocal;
+
+	/**
+	 * User EJB
+	 */
+	private ContactSessionBeanRemote contactBean;
+
+	/**
+	 * Initialization of this converter
+	 */
+	public AddressbookContactConverter () {
+		// Try to get it
+		try {
+			// Get initial context
+			Context context = new InitialContext();
+
+			// Lookup logger
+			this.loggerBeanLocal = (LoggerBeanLocal) context.lookup("java:global/jcore-logger-ejb/logger!org.mxchange.jcoreeelogger.beans.local.logger.LoggerBeanLocal"); //NOI18N
+
+			// ... and user controller
+			this.contactBean = (ContactSessionBeanRemote) context.lookup("java:global/addressbook-ejb/contact!org.mxchange.jcontacts.contact.ContactSessionBeanRemote"); //NOI18N
+		} catch (final NamingException ex) {
+			// Continue to throw it
+			throw new RuntimeException(MessageFormat.format("context.lookup() failed: {0}", ex.getMessage()), ex); //NOI18N
+		}
+	}
+
+	@Override
+	public Object getAsObject (final FacesContext context, final UIComponent component, final String submittedValue) {
+		// Trace message
+		// NOISY-DEBUG: this.loggerBeanLocal.logTrace(MessageFormat.format("getAsObject: context={0},component={1},submittedValue={2} - CALLED!", context, component, submittedValue)); //NOI18N
+
+		// Is the value null or empty?
+		if ((null == submittedValue) || (submittedValue.trim().isEmpty())) {
+			// Warning message
+			this.loggerBeanLocal.logWarning("getAsObject: submittedValue is null or empty - EXIT!"); //NOI18N
+
+			// Return null
+			return null;
+		}
+
+		// Init instance
+		Contact contact = null;
+
+		try {
+			// Try to parse the value as long
+			Long contactId = Long.valueOf(submittedValue);
+
+			// Debug message
+			// NOISY-DEBUG: this.loggerBeanLocal.logDebug(MessageFormat.format("getAsObject: contactId{0}", contactId)); //NOI18N
+
+			// Try to get user instance from it
+			contact = this.contactBean.findContactById(contactId);
+
+			// Debug message
+			// NOISY-DEBUG: this.loggerBeanLocal.logDebug(MessageFormat.format("getAsObject: user={0}", user)); //NOI18N
+		} catch (final NumberFormatException ex) {
+			// Throw again
+			throw new ConverterException(ex);
+		} catch (final ContactNotFoundException ex) {
+			// Debug message
+			this.loggerBeanLocal.logDebug(MessageFormat.format("getAsObject: Exception: {0} - Returning null ...", ex)); //NOI18N
+		}
+
+		// Trace message
+		// NOISY-DEBUG: this.loggerBeanLocal.logTrace(MessageFormat.format("getAsObject: contact={0} - EXIT!", contact)); //NOI18N
+
+		// Return it
+		return contact;
+	}
+
+	@Override
+	public String getAsString (final FacesContext context, final UIComponent component, final Object value) {
+		// Is the object null?
+		if ((null == value) || ((String.valueOf(value)).isEmpty())) {
+			// Is null
+			return ""; //NOI18N
+		} else if (!(value instanceof User)) {
+			// Not same interface
+			throw new IllegalArgumentException(MessageFormat.format("value {0} does not implement User.", value)); //NOI18N
+		}
+
+		// Return category id
+		return String.valueOf(((User) value).getUserId());
+	}
+
+}
diff --git a/src/java/org/mxchange/localization/bundle_de_DE.properties b/src/java/org/mxchange/localization/bundle_de_DE.properties
index 24c0f8b0..ff9bb004 100644
--- a/src/java/org/mxchange/localization/bundle_de_DE.properties
+++ b/src/java/org/mxchange/localization/bundle_de_DE.properties
@@ -335,8 +335,7 @@ LINK_ADMIN_UNLOCK_USER=Ent-/Sperren von Benutzeraccounts
 LINK_ADMIN_UNLOCK_USER_TITLE=Sperren oder entsperren Sie hier Benutzeraccounts.
 PAGE_TITLE_ADMIN_LIST_USER=Benutzeraccounts auflisten
 CONTENT_TITLE_ADMIN_LIST_USER=Auflisten von Benutzeraccounts:
-#@TODO Please fix German umlauts!
-PAGE_TITLE_ADMIN_EDIT_USER=Benuzteraccount aendern
+PAGE_TITLE_ADMIN_EDIT_USER=Benuzteraccount editieren
 #@TODO Please fix German umlauts!
 CONTENT_TITLE_ADMIN_EDIT_USER=Aendern von Benutzeraccounts:
 PAGE_TITLE_ADMIN_UNLOCK_USER=Ent-/Sperren von Benutzeraccounts
@@ -420,18 +419,18 @@ ADMIN_LIST_COUNTRY_DATA_COUNTRY_CODE=Laendercode:
 ADMIN_LIST_COUNTRY_DATA_COUNTRY_EXTERNAL_DIAL_PREFIX=Vorwahl ausserorts:
 ADMIN_LIST_COUNTRY_DATA_COUNTRY_NAME=Land:
 #@TODO Please fix German umlauts!
-ADMIN_LINK_EDIT_DELETE_COUNTRY_TITLE=Aendern oder loeschen der Laenderdaten
+ADMIN_LINK_EDIT_DELETE_COUNTRY_TITLE=Editieren oder loeschen der Laenderdaten
 #@TODO Please fix German umlauts!
 TABLE_SUMMARY_ADMIN_LIST_COUNTRIES=Listet alle bereits angelegten Laenderdaten auf.
 COUNTRY_GERMANY=Deutschland
-ERROR_TARGET_CONTROLLER_PARAMETER_NOT_SET=Fehler: Der Parameter 'targetController' ist nicht gesetzt.
+ERROR_PARAMETER_TARGET_CONTROLLER_NOT_SET=Fehler: Der Parameter 'targetController' ist nicht gesetzt.
 ADMIN_MENU_MOBILE_PROVIDER_TITLE=Handyanbieter verwalten
 #@TODO Please fix German umlauts!
 LINK_ADMIN_LIST_MOBILE_PROVIDER_TITLE=Hinzufuegen, auflisten, aendern und loeschen von Handyanbietern.
 PAGE_TITLE_ADMIN_MOBILE_PROVIDER_LIST=Handyanbieter verwalten
 CONTENT_TITLE_ADMIN_MOBILE_PROVIDER_LIST=Verwalten von Handyanbietern:
 #@TODO Please fix German umlauts!
-PAGE_TITLE_ADMIN_MOBILE_PROVIDER_EDIT=Handyanbieter aendern
+PAGE_TITLE_ADMIN_MOBILE_PROVIDER_EDIT=Handyanbieter editieren
 #@TODO Please fix German umlauts!
 CONTENT_TITLE_ADMIN_MOBILE_PROVIDER_EDIT=Aendern des Handyanbieters:
 #@TODO Please fix German umlauts!
@@ -466,7 +465,7 @@ ADMIN_LIST_MOBILE_PROVIDER_DIAL_PREFIX=Vorwahl:
 ADMIN_LIST_MOBILE_PROVIDER_COUNTRY=Land:
 ADMIN_LIST_MOBILE_PROVIDER_ENTRY_CREATED=Erstellt:
 #@TODO Please fix German umlauts!
-ADMIN_LINK_EDIT_DELETE_MOBILE_PROVIDER_TITLE=Aendern oder loeschen des Handyanbieters
+ADMIN_LINK_EDIT_DELETE_MOBILE_PROVIDER_TITLE=Editieren oder loeschen des Handyanbieters
 ADMIN_ADD_USER_ENTER_PASSWORD1=Passwort eingeben:
 ADMIN_ADD_USER_ENTER_PASSWORD2=Passwort wiederholen:
 ADMIN_LIST_USER_ID=Benutzer-Id:
@@ -486,3 +485,90 @@ USER_PROFILE_MODE_INVISIBLE=Durchsichtig
 USER_PROFILE_MODE_MEMBERS=Nur Mitglieder
 #@TODO Please fix German umlauts!
 USER_PROFILE_MODE_PUBLIC=Oeffentlich
+ADMIN_LINK_SHOW_USER_TITLE=Administratives Benutzerprofil anzeigen
+PAGE_TITLE_ADMIN_SHOW_USER=Benutzerprofil anzeigen
+CONTENT_TITLE_ADMIN_SHOW_USER=Profil eines Benutzers anzeigen:
+ERROR_PARAMETER_USER_ID_NOT_SET=Fehler: Benutzer-Id nicht gesetzt (Parameter: userId).
+ERROR_USER_ID_NOT_FOUND=Fehler: Benutzer-Id nicht gefunden.
+#@TODO Please fix German umlauts!
+ADMIN_TABLE_SUMMARY_SHOW_USER=Zeigt ein Benutzerprofil fuer administrative Zwecke an.
+ADMIN_HEADER_SHOW_USER=Benutzer {0} (Nummer {1}):
+ADMIN_SHOW_USER_ID=Benutzer-Id:
+ADMIN_SHOW_USER_NAME=Benutzername:
+ADMIN_SHOW_USER_CREATED=Wann Benutzer erstellt:
+#@TODO Please fix German umlauts!
+ADMIN_SHOW_USER_UPDATED=Wann Benutzer geaendert:
+ADMIN_SHOW_USER_ACCOUNT_STATUS=Account-Status:
+ADMIN_SHOW_USER_PROFILE_MODE=Profilmodus:
+ADMIN_SHOW_USER_LAST_LOCKED=Zuletzt gesperrt:
+ADMIN_SHOW_USER_LAST_LOCKED_REASON=Letzter Sperrgrund:
+ADMIN_SHOW_USER_CONTACT_CREATED=Wann Kontaktdaten erstellt:
+#@TODO Please fix German umlauts!
+ADMIN_SHOW_USER_CONTACT_UPDATED=Wann Kontaktdaten geaendert:
+ADMIN_SHOW_USER_IS_OWN_CONTACT=Eigenes Account:
+ADMIN_SHOW_USER_GENDER=Anrede:
+ADMIN_SHOW_USER_TITLE=Titel:
+ADMIN_SHOW_USER_FIRST_NAME=Vorname:
+ADMIN_SHOW_USER_FAMILY_NAME=Nachname:
+ADMIN_SHOW_USER_STREET=Strasse:
+ADMIN_SHOW_USER_HOUSE_NUMBER=Hausnummer:
+ADMIN_SHOW_USER_ZIP_CODE=Postleitzahl:
+ADMIN_SHOW_USER_CITY=Stadt:
+ADMIN_SHOW_USER_EMAIL_ADDRESS=Email-Adresse:
+ADMIN_SHOW_USER_BIRTHDAY=Geburtstag:
+ADMIN_LINKS_HEADER=Administrative Links:
+ADMIN_LINK_EDIT_USER=Benutzeraccount editieren
+ADMIN_LINK_EDIT_USER_TITLE=Editieren der Benutzer- und Kontaktdaten.
+ADMIN_LINK_UNLOCK_USER=Ent-/Sperren des Benutzeraccounts
+ADMIN_LINK_UNLOCK_USER_TITLE=Sperren und entsperren des Benutzeraccounts.
+#@TODO Please fix German umlauts!
+ADMIN_LINK_DELETE_USER=Benutzeraccount loeschen
+#@TODO Please fix German umlauts!
+ADMIN_LINK_DELETE_USER_TITLE=Loescht das Benutzeraccount (nach Bestaetigung).
+#@TODO Please fix German umlauts!
+CONTENT_TITLE_ADMIN_DELETE_USER=Benutzeraccount loeschen:
+#@TODO Please fix German umlauts!
+PAGE_TITLE_ADMIN_DELETE_USER=Benutzeraccount loeschen
+ADMIN_HEADER_SHOW_CELLPHONE_DATA=Daten des Mobiltelefons:
+ADMIN_SHOW_CELLPHONE_ID=Id-Nummer:
+ADMIN_SHOW_CELLPHONE_PROVIDER_NAME=Mobilanbieter:
+ADMIN_SHOW_CELLPHONE_NUMBER_COMPLETE=Komplette Nummer:
+ADMIN_SHOW_CELLPHONE_LINKS=Administrative Links:
+ERROR_PARAMETER_USER_NOT_SET=Fehler: Parameter 'user' nicht gesetzt.
+ADMIN_LINK_SHOW_SHORT=Anzeigen
+ADMIN_LINK_SHOW_SHORT_TITLE=Eintrag einzelnt anzeigen.
+ADMIN_LINK_EDIT_SHORT=Editieren
+ADMIN_LINK_EDIT_SHORT_TITLE=Eintrag editieren.
+#@TODO Please fix German umlauts!
+ADMIN_LINK_DELETE_SHORT=Loeschen
+#@TODO Please fix German umlauts!
+ADMIN_LINK_DELETE_SHORT_TITLE=Eintrag loeschen.
+ADMIN_LINK_UNLINK_SHORT=Abtrennen
+#@TODO Please fix German umlauts!
+ADMIN_LINK_UNLINK_SHORT_TITLE=Entfernt Verknuepfung zum Eintrag.
+#@TODO Please fix German umlauts!
+PAGE_TITLE_ADMIN_DELETE_CELLPHONE=Mobiletelefoneintrag eines Kontaktes loeschen
+#@TODO Fix German umlauts!
+CONTENT_TITLE_ADMIN_DELETE_CONTACT_CELLPHONE=Mobiltelefoneintrag eines Kontaktes loeschen:
+PAGE_TITLE_ADMIN_EDIT_CELLPHONE=Mobiltelefoneintrag eines Kontaktes editieren
+CONTENT_TITLE_ADMIN_EDIT_CONTACT_CELLPHONE=Mobiltelefoneintrag eines Kontaktes editieren:
+#@TODO Please fix German umlauts!
+PAGE_TITLE_ADMIN_LIST_CONTACT_CELLPHONE=Eintraege von Mobiletelefonen auflisten
+PAGE_TITLE_ADMIN_SHOW_CONTACT_CELLPHONE=Mobiltelefoneintrag eines Kontaktes anzeigen
+CONTENT_TITLE_ADMIN_SHOW_CONTACT_CELLPHONE=Anzeigen eines Mobiltelefoneintrags eines Kontaktes:
+#@TODO Please fix German umlauts!
+PAGE_TITLE_ADMIN_UNLINK_CONTACT_CELLPHONE=Verknuepfung Kontakt-Mobiletelfon loeschen
+CONTENT_TITLE_ADMIN_UNLINK_CONTACT_CELLPHONE=Entfernen einer Verknuepfung Kontakt-Mobiltelefon:
+ERROR_PARAMETER_PHONE_ID_NOT_SET=Fehler: Parameter 'phoneId' ist nicht gesetzt.
+PAGE_TITLE_ADMIN_SHOW_MOBILE_PROVIDER=Mobilfunkbetreiber anzeigen
+CONTENT_TITLE_ADMIN_SHOW_MOBILE_PROVIDER=Mobilfunkbetreiber anzeigen:
+TABLE_SUMMARY_ADMIN_SHOW_CONTACT_CELLPHONE=Ein einzelner Mobiltelefoneintrag eines Kontaktes.
+#@TODO Please fix German umlauts!
+TABLE_SUMMARY_ADMIN_SHOW_CONTACT_CELLPHONE_LINKS=Diese Tabelle zeigt Verknuepfungen von der Mobilfunknummern zu allen Kontaktdaten an.
+#@TODO Please fix German umlauts!
+ADMIN_HEADER_SHOW_CONTACT_CELLPHONE_LINKS=Alle Kontakt-Mobiltelefon-Verknuepfungen fuer Id-Nummer {0}:
+ERROR_PARAMETER_CONTACT_ID_NOT_SET=Fehler: Parameter 'contactId' ist nicht gesetzt.
+ADMIN_SHOW_CELLPHONE_UNLINK=Trennen:
+ADMIN_SHOW_CONTACT_ID=Kontakt-Id:
+PAGE_TITLE_ADMIN_SHOW_CONTACT=Kontaktdaten anzeigen
+CONTENT_TITLE_ADMIN_SHOW_CONTACT=Kontaktdaten anzeigen:
diff --git a/src/java/org/mxchange/localization/bundle_en_US.properties b/src/java/org/mxchange/localization/bundle_en_US.properties
index a1ca5140..f9ed6da5 100644
--- a/src/java/org/mxchange/localization/bundle_en_US.properties
+++ b/src/java/org/mxchange/localization/bundle_en_US.properties
@@ -365,7 +365,7 @@ ADMIN_LIST_COUNTRY_DATA_COUNTRY_NAME=Country:
 ADMIN_LINK_EDIT_DELETE_COUNTRY_TITLE=Edit or delete country
 TABLE_SUMMARY_ADMIN_LIST_COUNTRIES=List of all already added countries.
 COUNTRY_GERMANY=Germany
-ERROR_TARGET_CONTROLLER_PARAMETER_NOT_SET=Error: The parameter 'targetController' is not set.
+ERROR_PARAMETER_TARGET_CONTROLLER_NOT_SET=Error: The parameter 'targetController' is not set.
 ADMIN_MENU_MOBILE_PROVIDER_TITLE=Mobile providers
 LINK_ADMIN_LIST_MOBILE_PROVIDER=Manage ...
 LINK_ADMIN_LIST_MOBILE_PROVIDER_TITLE=Add, list, edit and delete mobile providers.
@@ -410,3 +410,75 @@ USER_ACCOUNT_STATUS_LOCKED=Locked
 USER_PROFILE_MODE_INVISIBLE=Invisible
 USER_PROFILE_MODE_MEMBERS=Only members
 USER_PROFILE_MODE_PUBLIC=Public
+ADMIN_LINK_SHOW_USER_TITLE=Show administrative user profile
+PAGE_TITLE_ADMIN_SHOW_USER=Show user profile
+CONTENT_TITLE_ADMIN_SHOW_USER=Show profile of a user:
+ERROR_PARAMETER_USER_ID_NOT_SET=Error: User id not set (parameter userId).
+ERROR_USER_ID_NOT_FOUND=Error: User id not found.
+ADMIN_TABLE_SUMMARY_SHOW_USER=Shows a single user profile for administrative purposes.
+ADMIN_HEADER_SHOW_USER=User {0} (id {1}):
+ADMIN_SHOW_USER_ID=User id:
+ADMIN_SHOW_USER_NAME=User name:
+ADMIN_SHOW_USER_CREATED=When user created:
+ADMIN_SHOW_USER_UPDATED=When user changed:
+ADMIN_SHOW_USER_ACCOUNT_STATUS=Account status:
+ADMIN_SHOW_USER_PROFILE_MODE=Profile mode:
+ADMIN_SHOW_USER_LAST_LOCKED=Last locked:
+ADMIN_SHOW_USER_LAST_LOCKED_REASON=Last lock reason:
+ADMIN_SHOW_USER_CONTACT_CREATED=When contact data created:
+ADMIN_SHOW_USER_CONTACT_UPDATED=When contact data updated:
+ADMIN_SHOW_USER_IS_OWN_CONTACT=Own account:
+ADMIN_SHOW_USER_GENDER=Gender:
+ADMIN_SHOW_USER_TITLE=Title:
+ADMIN_SHOW_USER_FIRST_NAME=First name:
+ADMIN_SHOW_USER_FAMILY_NAME=Family name:
+ADMIN_SHOW_USER_STREET=Street:
+ADMIN_SHOW_USER_HOUSE_NUMBER=House number:
+ADMIN_SHOW_USER_ZIP_CODE=ZIP code:
+ADMIN_SHOW_USER_CITY=City:
+ADMIN_SHOW_USER_EMAIL_ADDRESS=Email address:
+ADMIN_SHOW_USER_BIRTHDAY=Birthday:
+ADMIN_LINKS_HEADER=Administrative links:
+ADMIN_LINK_EDIT_USER=Edit user account
+ADMIN_LINK_EDIT_USER_TITLE=Editing of user and contact data.
+ADMIN_LINK_UNLOCK_USER=Lock/Unlock user account
+ADMIN_LINK_UNLOCK_USER_TITLE=Lock and unlock of user account
+ADMIN_LINK_DELETE_USER=Delete user account
+ADMIN_LINK_DELETE_USER_TITLE=Deletes user account (after confirmation).
+CONTENT_TITLE_ADMIN_DELETE_USER=Delete user account:
+PAGE_TITLE_ADMIN_DELETE_USER=Delete user account
+ADMIN_HEADER_SHOW_CELLPHONE_DATA=Data of mobile phone:
+ADMIN_SHOW_CELLPHONE_ID=Id number:
+ADMIN_SHOW_CELLPHONE_PROVIDER_NAME=Mobile provider:
+ADMIN_SHOW_CELLPHONE_NUMBER_COMPLETE=Complete number:
+ADMIN_SHOW_CELLPHONE_LINKS=Administrative links:
+ERROR_PARAMETER_USER_NOT_SET=Error: Parameter 'user' not set.
+ADMIN_LINK_SHOW_SHORT=Show
+ADMIN_LINK_SHOW_SHORT_TITLE=Show single entry.
+ADMIN_LINK_EDIT_SHORT=Edit
+ADMIN_LINK_EDIT_SHORT_TITLE=Edit entry.
+ADMIN_LINK_DELETE_SHORT=Delete
+ADMIN_LINK_DELETE_SHORT_TITLE=Delete entry.
+ADMIN_LINK_UNLINK_SHORT=Unlink
+ADMIN_LINK_UNLINK_SHORT_TITLE=Removes link to entry.
+PAGE_TITLE_ADMIN_DELETE_CELLPHONE=Delete contact's cellphone entry
+CONTENT_TITLE_ADMIN_DELETE_CONTACT_CELLPHONE=Delete contact's cellphone entry:
+PAGE_TITLE_ADMIN_EDIT_CELLPHONE=Edit contact's cellphone entry
+CONTENT_TITLE_ADMIN_EDIT_CONTACT_CELLPHONE=Edit contact's cellphone entry:
+PAGE_TITLE_ADMIN_LIST_CONTACT_CELLPHONE=List all cellphone entries
+PAGE_TITLE_ADMIN_SHOW_CONTACT_CELLPHONE=Show contact's cellphone entry
+CONTENT_TITLE_ADMIN_SHOW_CONTACT_CELLPHONE=Show contact's cellphone entry:
+PAGE_TITLE_ADMIN_UNLINK_CONTACT_CELLPHONE=Remove link contact-cellphone
+#@TODO Please fix German umlauts!
+CONTENT_TITLE_ADMIN_UNLINK_CONTACT_CELLPHONE=Remove link between contact-cellphone:
+ERROR_PARAMETER_PHONE_ID_NOT_SET=Error: Parameter 'phoneId' is not set.
+PAGE_TITLE_ADMIN_SHOW_MOBILE_PROVIDER=Show mobile provider
+CONTENT_TITLE_ADMIN_SHOW_MOBILE_PROVIDER=Show mobile provider:
+TABLE_SUMMARY_ADMIN_SHOW_CONTACT_CELLPHONE=A single contact's cellphone entry.
+TABLE_SUMMARY_ADMIN_SHOW_CONTACT_CELLPHONE_LINKS=This table shows links of of this cellphone number to all contacts.
+ADMIN_HEADER_SHOW_CONTACT_CELLPHONE_LINKS=All links between contact-cellphone for id {0}:
+ERROR_PARAMETER_CONTACT_ID_NOT_SET=Error: Parameter 'contactId' is not set.
+ADMIN_SHOW_CELLPHONE_UNLINK=Unlink:
+ADMIN_SHOW_CONTACT_ID=Contact id:
+PAGE_TITLE_ADMIN_SHOW_CONTACT=Show contact data
+CONTENT_TITLE_ADMIN_SHOW_CONTACT=Show contact data:
diff --git a/web/WEB-INF/faces-config.xml b/web/WEB-INF/faces-config.xml
index 14d9b5dc..11b8c85e 100644
--- a/web/WEB-INF/faces-config.xml
+++ b/web/WEB-INF/faces-config.xml
@@ -99,22 +99,10 @@
 			<from-outcome>exception</from-outcome>
 			<to-view-id>/exception.xhtml</to-view-id>
 		</navigation-case>
-		<navigation-case>
-			<from-outcome>admin_delete_user</from-outcome>
-			<to-view-id>/admin/admin_user_delete.xhtml</to-view-id>
-		</navigation-case>
 		<navigation-case>
 			<from-outcome>admin_list_user</from-outcome>
 			<to-view-id>/admin/admin_user_list.xhtml</to-view-id>
 		</navigation-case>
-		<navigation-case>
-			<from-outcome>admin_edit_user</from-outcome>
-			<to-view-id>/admin/admin_user_edit.xhtml</to-view-id>
-		</navigation-case>
-		<navigation-case>
-			<from-outcome>admin_unlock_user</from-outcome>
-			<to-view-id>/admin/admin_user_unlock.xhtml</to-view-id>
-		</navigation-case>
 		<navigation-case>
 			<from-outcome>admin_list_countries</from-outcome>
 			<to-view-id>/admin/admin_country_list.xhtml</to-view-id>
@@ -123,6 +111,10 @@
 			<from-outcome>admin_list_mobile_provider</from-outcome>
 			<to-view-id>/admin/admin_mobile_provider_list.xhtml</to-view-id>
 		</navigation-case>
+		<navigation-case>
+			<from-outcome>admin_list_contact_cellphone</from-outcome>
+			<to-view-id>/admin/admin_contact_cellphone_list.xhtml</to-view-id>
+		</navigation-case>
 	</navigation-rule>
 	<navigation-rule>
 		<from-view-id>/user/login.xhtml</from-view-id>
@@ -209,6 +201,10 @@
 			<from-outcome>login_data_saved</from-outcome>
 			<to-view-id>/login/login_data_saved.xhtml</to-view-id>
 		</navigation-case>
+		<navigation-case>
+			<from-outcome>admin_delete_product</from-outcome>
+			<to-view-id>/admin/admin_product_delete.xhtml</to-view-id>
+		</navigation-case>
 	</navigation-rule>
 	<navigation-rule>
 		<from-view-id>/login/login_change_personal_data.xhtml</from-view-id>
@@ -216,6 +212,10 @@
 			<from-outcome>login_data_saved</from-outcome>
 			<to-view-id>/login/login_data_saved.xhtml</to-view-id>
 		</navigation-case>
+		<navigation-case>
+			<from-outcome>admin_delete_category</from-outcome>
+			<to-view-id>/admin/admin_category_delete.xhtml</to-view-id>
+		</navigation-case>
 	</navigation-rule>
 	<navigation-rule>
 		<from-view-id>/admin/admin_country_list.xhtml</from-view-id>
@@ -223,6 +223,117 @@
 			<from-outcome>admin_edit_country</from-outcome>
 			<to-view-id>/admin/admin_country_edit.xhtml</to-view-id>
 		</navigation-case>
+		<navigation-case>
+			<from-outcome>admin_delete_country</from-outcome>
+			<to-view-id>/admin/admin_country_delete.xhtml</to-view-id>
+		</navigation-case>
+	</navigation-rule>
+	<navigation-rule>
+		<from-view-id>/admin/admin_mobile_provider_list.xhtml</from-view-id>
+		<navigation-case>
+			<from-outcome>admin_edit_mobile_provider</from-outcome>
+			<to-view-id>/admin/admin_mobile_provider_edit.xhtml</to-view-id>
+		</navigation-case>
+		<navigation-case>
+			<from-outcome>admin_delete_mobile_provider</from-outcome>
+			<to-view-id>/admin/admin_mobile_provider_delete.xhtml</to-view-id>
+		</navigation-case>
+		<navigation-case>
+			<from-outcome>admin_show_mobile_provider</from-outcome>
+			<to-view-id>/admin/admin_mobile_provider_show.xhtml</to-view-id>
+		</navigation-case>
+	</navigation-rule>
+	<navigation-rule>
+		<from-view-id>/admin/admin_user_list.xhtml</from-view-id>
+		<navigation-case>
+			<from-outcome>admin_show_user</from-outcome>
+			<to-view-id>/admin/admin_user_show.xhtml</to-view-id>
+		</navigation-case>
+		<navigation-case>
+			<from-outcome>admin_edit_user</from-outcome>
+			<to-view-id>/admin/admin_user_edit.xhtml</to-view-id>
+		</navigation-case>
+		<navigation-case>
+			<from-outcome>admin_delete_user</from-outcome>
+			<to-view-id>/admin/admin_user_delete.xhtml</to-view-id>
+		</navigation-case>
+		<navigation-case>
+			<from-outcome>admin_unlock_user</from-outcome>
+			<to-view-id>/admin/admin_user_unlock.xhtml</to-view-id>
+		</navigation-case>
+	</navigation-rule>
+	<navigation-rule>
+		<from-view-id>/admin/admin_user_show.xhtml</from-view-id>
+		<navigation-case>
+			<from-outcome>admin_show_contact_cellphone</from-outcome>
+			<to-view-id>/admin/admin_contact_cellphone_show.xhtml</to-view-id>
+		</navigation-case>
+		<navigation-case>
+			<from-outcome>admin_edit_contact_cellphone</from-outcome>
+			<to-view-id>/admin/admin_contact_cellphone_edit.xhtml</to-view-id>
+		</navigation-case>
+		<navigation-case>
+			<from-outcome>admin_unlink_contact_cellphone</from-outcome>
+			<to-view-id>/admin/admin_contact_cellphone_unlink.xhtml</to-view-id>
+		</navigation-case>
+		<navigation-case>
+			<from-outcome>admin_delete_contact_cellphone</from-outcome>
+			<to-view-id>/admin/admin_contact_cellphone_delete.xhtml</to-view-id>
+		</navigation-case>
+		<navigation-case>
+			<from-outcome>admin_edit_user</from-outcome>
+			<to-view-id>/admin/admin_user_edit.xhtml</to-view-id>
+		</navigation-case>
+		<navigation-case>
+			<from-outcome>admin_delete_user</from-outcome>
+			<to-view-id>/admin/admin_user_delete.xhtml</to-view-id>
+		</navigation-case>
+		<navigation-case>
+			<from-outcome>admin_unlock_user</from-outcome>
+			<to-view-id>/admin/admin_user_unlock.xhtml</to-view-id>
+		</navigation-case>
+		<navigation-case>
+			<from-outcome>admin_show_mobile_provider</from-outcome>
+			<to-view-id>/admin/admin_mobile_provider_show.xhtml</to-view-id>
+		</navigation-case>
+	</navigation-rule>
+	<navigation-rule>
+		<from-view-id>/admin/admin_contact_cellphone_list.xhtml</from-view-id>
+		<navigation-case>
+			<from-outcome>admin_show_contact_cellphone</from-outcome>
+			<to-view-id>/admin/admin_contact_cellphone_show.xhtml</to-view-id>
+		</navigation-case>
+		<navigation-case>
+			<from-outcome>admin_edit_contact_cellphone</from-outcome>
+			<to-view-id>/admin/admin_contact_cellphone_edit.xhtml</to-view-id>
+		</navigation-case>
+		<navigation-case>
+			<from-outcome>admin_delete_contact_cellphone</from-outcome>
+			<to-view-id>/admin/admin_contact_cellphone_delete.xhtml</to-view-id>
+		</navigation-case>
+	</navigation-rule>
+	<navigation-rule>
+		<from-view-id>/admin/admin_contact_cellphone_show.xhtml</from-view-id>
+		<navigation-case>
+			<from-outcome>admin_show_mobile_provider</from-outcome>
+			<to-view-id>/admin/admin_mobile_provider_show.xhtml</to-view-id>
+		</navigation-case>
+		<navigation-case>
+			<from-outcome>admin_edit_contact_cellphone</from-outcome>
+			<to-view-id>/admin/admin_contact_cellphone_edit.xhtml</to-view-id>
+		</navigation-case>
+		<navigation-case>
+			<from-outcome>admin_delete_contact_cellphone</from-outcome>
+			<to-view-id>/admin/admin_contact_cellphone_delete.xhtml</to-view-id>
+		</navigation-case>
+		<navigation-case>
+			<from-outcome>admin_unlink_contact_cellphone</from-outcome>
+			<to-view-id>/admin/admin_contact_cellphone_unlink.xhtml</to-view-id>
+		</navigation-case>
+		<navigation-case>
+			<from-outcome>admin_show_contact</from-outcome>
+			<to-view-id>/admin/admin_contact_show.xhtml</to-view-id>
+		</navigation-case>
 	</navigation-rule>
 	<!--
 	<factory>
@@ -231,11 +342,4 @@
 		</exception-handler-factory>
 	</factory>
 	//-->
-    <navigation-rule>
-        <from-view-id>/admin/admin_mobile_provider_list.xhtml</from-view-id>
-        <navigation-case>
-            <from-outcome>admin_edit_mobile_provider</from-outcome>
-            <to-view-id>/admin/admin_mobile_provider_edit.xhtml</to-view-id>
-        </navigation-case>
-    </navigation-rule>
 </faces-config>
diff --git a/web/WEB-INF/templates/admin/admin_cellphone_data.tpl b/web/WEB-INF/templates/admin/admin_cellphone_data.tpl
new file mode 100644
index 00000000..030d3528
--- /dev/null
+++ b/web/WEB-INF/templates/admin/admin_cellphone_data.tpl
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<ui:composition
+	xmlns="http://www.w3.org/1999/xhtml"
+	xmlns:f="http://java.sun.com/jsf/core"
+	xmlns:h="http://java.sun.com/jsf/html"
+	xmlns:ui="http://java.sun.com/jsf/facelets">
+
+	<h:outputText styleClass="errors" value="#{ERROR_PARAMETER_CELLPHONE_NUMBER_NOT_SET}" rendered="#{empty cellphoneNumber}" />
+
+	<h:panelGrid id="cellphone_data" summary="#{msg.ADMIN_TABLE_SUMMARY_SHOW_CELLPHONE_DATA}" headerClass="table_header_column" styleClass="table_big" columns="2" rendered="#{not empty cellphoneNumber}">
+		<f:facet name="header">
+			<h:outputText value="#{msg.ADMIN_HEADER_SHOW_CELLPHONE_DATA}" />
+		</f:facet>
+
+		<h:column>
+			<h:outputLabel for="cellphoneId" styleClass="data_label" value="#{msg.ADMIN_SHOW_CELLPHONE_ID}" />
+
+			<h:outputText id="cellphoneId" styleClass="data_field" value="#{cellphoneNumber.phoneId}" />
+		</h:column>
+
+		<h:column>
+			<h:outputLabel for="cellphoneProvider" styleClass="data_label" value="#{msg.ADMIN_SHOW_CELLPHONE_PROVIDER_NAME}" />
+
+			<h:link outcome="admin_show_mobile_provider">
+				<f:param name="providerId" value="#{cellphoneNumber.cellphoneProvider.providerId}" />
+				<h:outputText id="cellphoneProvider" styleClass="data_field" value="#{cellphoneNumber.cellphoneProvider.providerName}" />
+			</h:link>
+		</h:column>
+
+		<h:column>
+			<h:outputLabel for="cellphoneNumber" styleClass="data_label" value="#{msg.ADMIN_SHOW_CELLPHONE_NUMBER_COMPLETE}" />
+
+			<h:outputText id="cellphoneNumber" styleClass="data_field" value="#{cellphoneNumber.cellphoneProvider.providerCountry.countryExternalDialPrefix}#{cellphoneNumber.cellphoneProvider.providerDialPrefix}-#{cellphoneNumber.phoneNumber}" />
+		</h:column>
+
+		<h:column>
+			<h:outputLabel for="cellphoneLinks" styleClass="data_label" value="#{msg.ADMIN_SHOW_CELLPHONE_LINKS}" />
+
+			<div id="cellphoneLinks" class="data_field">
+				<ui:include src="/WEB-INF/templates/admin/admin_cellphone_links.tpl">
+					<ui:param name="cellphoneNumber" value="#{cellphoneNumber}" />
+					<ui:param name="contact" value="#{user.userContact}" />
+					<ui:param name="isShowPage" value="#{isShowPage}" />
+				</ui:include>
+			</div>
+		</h:column>
+	</h:panelGrid>
+</ui:composition>
diff --git a/web/WEB-INF/templates/admin/admin_cellphone_links.tpl b/web/WEB-INF/templates/admin/admin_cellphone_links.tpl
new file mode 100644
index 00000000..f3201442
--- /dev/null
+++ b/web/WEB-INF/templates/admin/admin_cellphone_links.tpl
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<ui:composition
+	xmlns="http://www.w3.org/1999/xhtml"
+	xmlns:f="http://java.sun.com/jsf/core"
+	xmlns:h="http://java.sun.com/jsf/html"
+	xmlns:ui="http://java.sun.com/jsf/facelets">
+
+	<h:outputText styleClass="errors" value="#{ERROR_PARAMETER_CELLPHONE_NUMBER_NOT_SET}" rendered="#{empty cellphoneNumber}" />
+
+	<ui:fragment rendered="#{not empty cellphoneNumber}">
+		<ul class="mini_nav">
+			<ui:fragment rendered="#{empty isShowPage or not isShowPage}">
+				<li class="mini_link">
+					<h:link outcome="admin_show_contact_cellphone">
+						<h:outputText value="#{msg.ADMIN_LINK_SHOW_SHORT}" title="#{msg.ADMIN_LINK_SHOW_SHORT_TITLE}" />
+						<f:param name="phoneId" value="#{cellphoneNumber.phoneId}" />
+					</h:link>
+				</li>
+			</ui:fragment>
+
+			<li class="mini_link">
+				<h:link outcome="admin_edit_contact_cellphone">
+					<h:outputText value="#{msg.ADMIN_LINK_EDIT_SHORT}" title="#{msg.ADMIN_LINK_EDIT_SHORT_TITLE}" />
+					<f:param name="phoneId" value="#{cellphoneNumber.phoneId}" />
+				</h:link>
+			</li>
+
+			<ui:fragment rendered="#{not empty contact}">
+				<li class="mini_link">
+					<h:link outcome="admin_unlink_contact_cellphone">
+						<h:outputText styleClass="unlink_link" value="#{msg.ADMIN_LINK_UNLINK_SHORT}" title="#{msg.ADMIN_LINK_UNLINK_SHORT_TITLE}" />
+						<f:param name="phoneId" value="#{cellphoneNumber.phoneId}" />
+						<f:param name="contactId" value="#{contact.contactId}" />
+					</h:link>
+				</li>
+			</ui:fragment>
+
+			<li class="mini_link">
+				<h:link outcome="admin_delete_contact_cellphone">
+					<h:outputText styleClass="delete_link" value="#{msg.ADMIN_LINK_DELETE_SHORT}" title="#{msg.ADMIN_LINK_DELETE_SHORT_TITLE}" />
+					<f:param name="phoneId" value="#{cellphoneNumber.phoneId}" />
+				</h:link>
+			</li>
+		</ul>
+	</ui:fragment>
+</ui:composition>
diff --git a/web/WEB-INF/templates/admin/admin_form_mobile_provider.tpl b/web/WEB-INF/templates/admin/admin_form_mobile_provider.tpl
index 7d2232c3..25f954eb 100644
--- a/web/WEB-INF/templates/admin/admin_form_mobile_provider.tpl
+++ b/web/WEB-INF/templates/admin/admin_form_mobile_provider.tpl
@@ -19,7 +19,7 @@
 				</div>
 
 				<div class="table_right_medium">
-					<h:inputText class="input" id="providerDialPrefix" size="5" maxlength="20" value="#{adminMobileController.providerDialPrefix}" required="true">
+					<h:inputText class="input" id="providerDialPrefix" size="5" maxlength="20" value="#{adminMobileProviderController.providerDialPrefix}" required="true">
 						<f:validateLongRange for="providerDialPrefix" minimum="0" maximum="9999" />
 					</h:inputText>
 				</div>
@@ -33,7 +33,7 @@
 				</div>
 
 				<div class="table_right_medium">
-					<h:inputText class="input" id="providerMailRegex" size="10" maxlength="30" value="#{adminMobileController.providerMailPattern}" required="true" />
+					<h:inputText class="input" id="providerMailRegex" size="10" maxlength="30" value="#{adminMobileProviderController.providerMailPattern}" required="true" />
 
 					<h:outputText class="small notice" value="#{msg.ADMIN_ENTER_MOBILE_PROVIDER_PATTERN_EXAMPLE}" />
 				</div>
@@ -47,7 +47,7 @@
 				</div>
 
 				<div class="table_right_medium">
-					<h:inputText class="input" id="providerName" size="20" maxlength="100" value="#{adminMobileController.providerName}" required="true" />
+					<h:inputText class="input" id="providerName" size="20" maxlength="100" value="#{adminMobileProviderController.providerName}" required="true" />
 				</div>
 
 				<div class="clear"></div>
@@ -59,7 +59,7 @@
 				</div>
 
 				<div class="table_right_medium">
-					<h:selectOneMenu class="select" id="providerCountry" value="#{adminMobileController.providerCountry}" converter="country">
+					<h:selectOneMenu class="select" id="providerCountry" value="#{adminMobileProviderController.providerCountry}" converter="country">
 						<f:selectItems value="#{countryController.allCountries()}" var="c" itemValue="#{c}" itemLabel="#{c.countryCode} (#{msg[c.countryI18nkey]})" />
 					</h:selectOneMenu>
 				</div>
diff --git a/web/WEB-INF/templates/admin/admin_menu.tpl b/web/WEB-INF/templates/admin/admin_menu.tpl
index 60095a66..5bae5b8b 100644
--- a/web/WEB-INF/templates/admin/admin_menu.tpl
+++ b/web/WEB-INF/templates/admin/admin_menu.tpl
@@ -20,9 +20,6 @@
 
 			<ul>
 				<li><h:link title="#{msg.LINK_ADMIN_LIST_USER_TITLE}" outcome="admin_list_user" value="#{msg.LINK_ADMIN_LIST_USER}" /></li>
-				<li><h:link title="#{msg.LINK_ADMIN_EDIT_USER_TITLE}" outcome="admin_edit_user" value="#{msg.LINK_ADMIN_EDIT_USER}" /></li>
-				<li><h:link title="#{msg.LINK_ADMIN_DELETE_USER_TITLE}" outcome="admin_delete_user" value="#{msg.LINK_ADMIN_DELETE_USER}" /></li>
-				<li><h:link title="#{msg.LINK_ADMIN_UNLOCK_USER_TITLE}" outcome="admin_unlock_user" value="#{msg.LINK_ADMIN_UNLOCK_USER}" /></li>
 			</ul>
 
 			<div class="menu_header">
diff --git a/web/WEB-INF/templates/admin/admin_user_links.tpl b/web/WEB-INF/templates/admin/admin_user_links.tpl
new file mode 100644
index 00000000..86529553
--- /dev/null
+++ b/web/WEB-INF/templates/admin/admin_user_links.tpl
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<ui:composition
+	xmlns="http://www.w3.org/1999/xhtml"
+	xmlns:f="http://java.sun.com/jsf/core"
+	xmlns:h="http://java.sun.com/jsf/html"
+	xmlns:ui="http://java.sun.com/jsf/facelets">
+
+	<h:outputText styleClass="errors" value="#{msg.ERROR_PARAMETER_USER_NOT_SET}" rendered="#{empty user}" />
+
+	<ui:fragment rendered="#{not empty user}">
+		<div class="table">
+			<div class="table_header">
+				<h:outputText value="#{msg.ADMIN_LINKS_HEADER}" />
+			</div>
+
+			<div class="table_row">
+				<ul>
+					<li>
+						<h:link outcome="admin_edit_user" value="#{msg.ADMIN_LINK_EDIT_USER}" title="#{msg.ADMIN_LINK_EDIT_USER_TITLE}">
+							<f:param name="userId" value="#{user.userId}" />
+						</h:link>
+					</li>
+
+					<li>
+						<h:link outcome="admin_unlock_user" value="#{msg.ADMIN_LINK_UNLOCK_USER}" title="#{msg.ADMIN_LINK_UNLOCK_USER_TITLE}">
+							<f:param name="userId" value="#{user.userId}" />
+						</h:link>
+					</li>
+
+					<li>
+						<h:link outcome="admin_delete_user" title="#{msg.ADMIN_LINK_DELETE_USER_TITLE}">
+							<h:outputText styleClass="delete_link" value="#{msg.ADMIN_LINK_DELETE_USER}" />
+							<f:param name="userId" value="#{user.userId}" />
+						</h:link>
+					</li>
+				</ul>
+			</div>
+		</div>
+	</ui:fragment>
+</ui:composition>
diff --git a/web/WEB-INF/templates/generic/gender_selection_box.tpl b/web/WEB-INF/templates/generic/gender_selection_box.tpl
index f7b93903..9a224e93 100644
--- a/web/WEB-INF/templates/generic/gender_selection_box.tpl
+++ b/web/WEB-INF/templates/generic/gender_selection_box.tpl
@@ -12,7 +12,5 @@
 		</h:selectOneMenu>
 	</ui:fragment>
 
-	<ui:fragment rendered="#{empty targetController}">
-		<h:outputText class="errors" value="#{msg.ERROR_TARGET_CONTROLLER_PARAMETER_NOT_SET}" />
-	</ui:fragment>
+	<h:outputText styleClass="errors" value="#{msg.ERROR_PARAMETER_TARGET_CONTROLLER_NOT_SET}" rendered="#{empty targetController}" />
 </ui:composition>
diff --git a/web/WEB-INF/templates/generic/mobile_selection_box.tpl b/web/WEB-INF/templates/generic/mobile_selection_box.tpl
index 38521303..67f85f37 100644
--- a/web/WEB-INF/templates/generic/mobile_selection_box.tpl
+++ b/web/WEB-INF/templates/generic/mobile_selection_box.tpl
@@ -16,7 +16,5 @@
 		</h:inputText>
 	</ui:fragment>
 
-	<ui:fragment rendered="#{empty targetController}">
-		<h:outputText class="errors" value="#{msg.ERROR_TARGET_CONTROLLER_PARAMETER_NOT_SET}" />
-	</ui:fragment>
+	<h:outputText styleClass="errors" value="#{msg.ERROR_PARAMETER_TARGET_CONTROLLER_NOT_SET}" rendered="#{empty targetController}" />
 </ui:composition>
diff --git a/web/admin/admin_contact_cellphone_delete.xhtml b/web/admin/admin_contact_cellphone_delete.xhtml
new file mode 100644
index 00000000..6811bab4
--- /dev/null
+++ b/web/admin/admin_contact_cellphone_delete.xhtml
@@ -0,0 +1,24 @@
+<?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"
+	  >
+
+	<f:metadata>
+		<f:viewParam name="phoneId" value="#{adminMobileProviderController.cellPhone}" converter="CellphoneConverter" required="true" requiredMessage="#{msg.ERROR_PARAMETER_PHONE_ID_NOT_SET}" />
+	</f:metadata>
+
+	<ui:composition template="/WEB-INF/templates/admin/admin_base.tpl">
+		<ui:define name="admin_title">#{msg.PAGE_TITLE_ADMIN_DELETE_CELLPHONE}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_ADMIN_DELETE_CONTACT_CELLPHONE}
+		</ui:define>
+
+		<ui:define name="content">
+			Here goes your content.
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/admin/admin_contact_cellphone_edit.xhtml b/web/admin/admin_contact_cellphone_edit.xhtml
new file mode 100644
index 00000000..eb3f1d96
--- /dev/null
+++ b/web/admin/admin_contact_cellphone_edit.xhtml
@@ -0,0 +1,24 @@
+<?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"
+	  >
+
+	<f:metadata>
+		<f:viewParam name="phoneId" value="#{adminMobileProviderController.cellPhone}" converter="CellphoneConverter" required="true" requiredMessage="#{msg.ERROR_PARAMETER_PHONE_ID_NOT_SET}" />
+	</f:metadata>
+
+	<ui:composition template="/WEB-INF/templates/admin/admin_base.tpl">
+		<ui:define name="admin_title">#{msg.PAGE_TITLE_ADMIN_EDIT_CELLPHONE}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_ADMIN_EDIT_CONTACT_CELLPHONE}
+		</ui:define>
+
+		<ui:define name="content">
+			Here goes your content.
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/admin/admin_contact_cellphone_list.xhtml b/web/admin/admin_contact_cellphone_list.xhtml
new file mode 100644
index 00000000..2a27f578
--- /dev/null
+++ b/web/admin/admin_contact_cellphone_list.xhtml
@@ -0,0 +1,20 @@
+<?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/admin/admin_base.tpl">
+		<ui:define name="admin_title">#{msg.PAGE_TITLE_ADMIN_LIST_CONTACT_CELLPHONE}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_ADMIN_LIST_CONTACT_CELLPHONE}
+		</ui:define>
+
+		<ui:define name="content">
+			Here goes your content.
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/admin/admin_contact_cellphone_show.xhtml b/web/admin/admin_contact_cellphone_show.xhtml
new file mode 100644
index 00000000..5997f1a7
--- /dev/null
+++ b/web/admin/admin_contact_cellphone_show.xhtml
@@ -0,0 +1,92 @@
+<?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"
+	  >
+
+	<f:metadata>
+		<f:viewParam name="phoneId" value="#{adminContactPhoneController.cellPhone}" converter="CellphoneConverter" required="true" requiredMessage="#{msg.ERROR_PARAMETER_PHONE_ID_NOT_SET}" />
+	</f:metadata>
+
+	<ui:composition template="/WEB-INF/templates/admin/admin_base.tpl">
+		<ui:define name="admin_title">#{msg.PAGE_TITLE_ADMIN_SHOW_CONTACT_CELLPHONE}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_ADMIN_SHOW_CONTACT_CELLPHONE}
+		</ui:define>
+
+		<ui:define name="content">
+			<ui:include src="/WEB-INF/templates/admin/admin_cellphone_data.tpl">
+				<ui:param name="cellphoneNumber" value="#{adminContactPhoneController.cellPhone}" />
+				<ui:param name="isShowPage" value="#{true}" />
+			</ui:include>
+
+			<h:dataTable id="contact_cellphone_link" var="contact" value="#{adminContactPhoneController.allCellphoneContacts()}" summary="#{msg.TABLE_SUMMARY_ADMIN_SHOW_CONTACT_CELLPHONE_LINKS}" headerClass="table_header_column" styleClass="table_medium">
+				<f:facet name="header">
+					<h:outputFormat value="#{msg.ADMIN_HEADER_SHOW_CONTACT_CELLPHONE_LINKS}">
+						<f:param value="#{adminContactPhoneController.cellPhone.phoneId}" />
+					</h:outputFormat>
+				</f:facet>
+
+				<h:column>
+					<h:outputLabel for="contactId" styleClass="data_label" value="#{msg.ADMIN_SHOW_CONTACT_ID}" />
+
+					<h:link id="contactId" styleClass="data_field" outcome="admin_show_contact">
+						<h:outputText value="#{contact.contactId}" />
+						<f:param name="contactId" value="#{contact.contactId}" />
+					</h:link>
+				</h:column>
+
+				<h:column>
+					<h:outputLabel for="contactGender" styleClass="data_label" value="#{msg.ADMIN_SHOW_USER_GENDER}" />
+
+					<h:outputText id="contactGender" styleClass="data_field" value="#{msg[contact.contactGender.messageKey]}" />
+				</h:column>
+
+				<h:column>
+					<h:outputLabel for="contactTitle" styleClass="data_label" value="#{msg.ADMIN_SHOW_USER_TITLE}" />
+
+					<h:outputText id="contactTitle" styleClass="data_field" value="#{contact.contactTitle}" />
+				</h:column>
+
+				<h:column>
+					<h:outputLabel for="contactFirstName" styleClass="data_label" value="#{msg.ADMIN_SHOW_USER_FIRST_NAME}" />
+
+					<h:outputText id="contactFirstName" styleClass="data_field" value="#{contact.contactFirstName}" />
+				</h:column>
+
+				<h:column>
+					<h:outputLabel for="contactFamilyName" styleClass="data_label" value="#{msg.ADMIN_SHOW_USER_FAMILY_NAME}" />
+
+					<h:outputText id="contactFamilyName" styleClass="data_field" value="#{contact.contactFamilyName}" />
+				</h:column>
+
+				<h:column>
+					<h:outputLabel for="contactEmailAddress" styleClass="data_label" value="#{msg.ADMIN_SHOW_USER_EMAIL_ADDRESS}" />
+
+					<h:outputLink id="contactEmailAddress" styleClass="data_field" value="mailto:#{contact.contactEmailAddress}">
+						<h:outputText value="#{contact.contactEmailAddress}" />
+					</h:outputLink>
+				</h:column>
+
+				<h:column>
+					<h:outputLabel for="cellphoneLinks" styleClass="data_label" value="#{msg.ADMIN_SHOW_CELLPHONE_UNLINK}" />
+
+					<div id="cellphoneLinks" class="data_field">
+						<ul class="mini_nav">
+							<li class="mini_link">
+								<h:link outcome="admin_unlink_contact_cellphone">
+									<h:outputText styleClass="unlink_link" value="#{msg.ADMIN_LINK_UNLINK_SHORT}" title="#{msg.ADMIN_LINK_UNLINK_SHORT_TITLE}" />
+									<f:param name="phoneId" value="#{adminContactPhoneController.cellPhone.phoneId}" />
+									<f:param name="contactId" value="#{contact.contactId}" />
+								</h:link>
+							</li>
+						</ul>
+					</div>
+				</h:column>
+			</h:dataTable>
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/admin/admin_contact_cellphone_unlink.xhtml b/web/admin/admin_contact_cellphone_unlink.xhtml
new file mode 100644
index 00000000..6f7500d8
--- /dev/null
+++ b/web/admin/admin_contact_cellphone_unlink.xhtml
@@ -0,0 +1,25 @@
+<?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"
+	  >
+
+	<f:metadata>
+		<f:viewParam name="phoneId" value="#{adminContactPhoneController.cellPhone}" converter="CellphoneConverter" required="true" requiredMessage="#{msg.ERROR_PARAMETER_PHONE_ID_NOT_SET}" />
+		<f:viewParam name="contactId" value="#{adminContactPhoneController.contact}" converter="ContactConverter" required="true" requiredMessage="#{msg.ERROR_PARAMETER_CONTACT_ID_NOT_SET}" />
+	</f:metadata>
+
+	<ui:composition template="/WEB-INF/templates/admin/admin_base.tpl">
+		<ui:define name="admin_title">#{msg.PAGE_TITLE_ADMIN_UNLINK_CONTACT_CELLPHONE}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_ADMIN_UNLINK_CONTACT_CELLPHONE}
+		</ui:define>
+
+		<ui:define name="content">
+			Here goes your content.
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/admin/admin_contact_show.xhtml b/web/admin/admin_contact_show.xhtml
new file mode 100644
index 00000000..173c2d4a
--- /dev/null
+++ b/web/admin/admin_contact_show.xhtml
@@ -0,0 +1,20 @@
+<?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/admin/admin_base.tpl">
+		<ui:define name="admin_title">#{msg.PAGE_TITLE_ADMIN_SHOW_CONTACT}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_ADMIN_SHOW_CONTACT}
+		</ui:define>
+
+		<ui:define name="content">
+			Here goes your content.
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/admin/admin_mobile_provider_list.xhtml b/web/admin/admin_mobile_provider_list.xhtml
index 11663ddc..c9222ce2 100644
--- a/web/admin/admin_mobile_provider_list.xhtml
+++ b/web/admin/admin_mobile_provider_list.xhtml
@@ -14,7 +14,7 @@
 		</ui:define>
 
 		<ui:define name="content">
-			<h:dataTable id="table_list_mobile" var="mobile" value="#{adminMobileController.allMobileProvider()}" styleClass="table_medium" headerClass="table_header_column" summary="#{msg.TABLE_SUMMARY_ADMIN_LIST_MOBILE_PROVIDERS}" rendered="#{adminMobileController.hasMobileProvider()}">
+			<h:dataTable id="table_list_mobile" var="mobile" value="#{adminMobileProviderController.allMobileProvider()}" styleClass="table_medium" headerClass="table_header_column" summary="#{msg.TABLE_SUMMARY_ADMIN_LIST_MOBILE_PROVIDERS}" rendered="#{adminMobileProviderController.hasMobileProvider()}">
 				<h:column>
 					<f:facet name="header">#{msg.ADMIN_LIST_MOBILE_PROVIDER_ID}</f:facet>
 
@@ -60,7 +60,7 @@
 
 					<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_ADMIN_ADD_MOBILE_PROVIDER}" action="#{adminMobileController.addMobileProvider()}" />
+						<h:commandButton class="submit" type="submit" id="register" value="#{msg.BUTTON_ADMIN_ADD_MOBILE_PROVIDER}" action="#{adminMobileProviderController.addMobileProvider()}" />
 					</div>
 				</div>
 
diff --git a/web/admin/admin_mobile_provider_show.xhtml b/web/admin/admin_mobile_provider_show.xhtml
new file mode 100644
index 00000000..5689de21
--- /dev/null
+++ b/web/admin/admin_mobile_provider_show.xhtml
@@ -0,0 +1,20 @@
+<?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/admin/admin_base.tpl">
+		<ui:define name="admin_title">#{msg.PAGE_TITLE_ADMIN_SHOW_MOBILE_PROVIDER}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_ADMIN_SHOW_MOBILE_PROVIDER}
+		</ui:define>
+
+		<ui:define name="content">
+			Here goes your content.
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/admin/admin_user_list.xhtml b/web/admin/admin_user_list.xhtml
index e8bc9179..01cb96dd 100644
--- a/web/admin/admin_user_list.xhtml
+++ b/web/admin/admin_user_list.xhtml
@@ -18,7 +18,7 @@
 				<h:column>
 					<f:facet name="header">#{msg.ADMIN_LIST_USER_ID}</f:facet>
 
-					<h:link outcome="admin_edit_user" title="#{msg.ADMIN_LINK_EDIT_DELETE_USER_TITLE}" value="#{user.userId}">
+					<h:link outcome="admin_show_user" title="#{msg.ADMIN_LINK_SHOW_USER_TITLE}" value="#{user.userId}">
 						<f:param name="userId" value="#{user.userId}" />
 					</h:link>
 				</h:column>
@@ -62,7 +62,7 @@
 				<h:column>
 					<f:facet name="header">#{msg.ADMIN_LIST_USER_CREATED}</f:facet>
 
-					<h:outputText id="userCreated" value="#{user.userCreated.time}" title="#{msg.ADMIN_USER_CREATED_TITLE}">
+					<h:outputText id="userCreated" value="#{user.userCreated.time}">
 						<f:convertDateTime for="userCreated" type="both" timeStyle="short" dateStyle="short" />
 					</h:outputText>
 				</h:column>
diff --git a/web/admin/admin_user_show.xhtml b/web/admin/admin_user_show.xhtml
new file mode 100644
index 00000000..dff90801
--- /dev/null
+++ b/web/admin/admin_user_show.xhtml
@@ -0,0 +1,182 @@
+<?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://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 name="userId" value="#{userController.user}" converter="UserConverter" required="true" requiredMessage="#{msg.ERROR_PARAMETER_USER_ID_NOT_SET}" />
+	</f:metadata>
+
+	<ui:composition template="/WEB-INF/templates/admin/admin_base.tpl">
+		<ui:define name="admin_title">#{msg.PAGE_TITLE_ADMIN_SHOW_USER}</ui:define>
+
+		<ui:define name="content_header">
+			#{msg.CONTENT_TITLE_ADMIN_SHOW_USER}
+		</ui:define>
+
+		<ui:define name="content">
+			<h:outputText styleClass="errors" value="#{msg.ERROR_USER_ID_NOT_FOUND}" rendered="#{empty userController.user}" />
+
+			<h:panelGrid id="user_profile" summary="#{msg.ADMIN_TABLE_SUMMARY_SHOW_USER}" headerClass="table_header_column" styleClass="table_big" columns="3" rendered="#{not empty userController.user}">
+				<f:facet name="header">
+					<h:outputFormat value="#{msg.ADMIN_HEADER_SHOW_USER}">
+						<f:param value="#{userController.user.userName}" />
+						<f:param value="#{userController.user.userId}" />
+					</h:outputFormat>
+				</f:facet>
+
+				<h:column>
+					<h:outputLabel for="userId" styleClass="data_label" value="#{msg.ADMIN_SHOW_USER_ID}" />
+
+					<h:outputText id="userId" styleClass="data_field" value="#{userController.user.userId}" />
+				</h:column>
+
+				<h:column>
+					<h:outputLabel for="userName" styleClass="data_label" value="#{msg.ADMIN_SHOW_USER_NAME}" />
+
+					<h:outputText id="userName" styleClass="data_field" value="#{userController.user.userName}" />
+				</h:column>
+
+				<h:column>
+					<h:outputLabel for="userCreated" styleClass="data_label" value="#{msg.ADMIN_SHOW_USER_CREATED}" />
+
+					<h:outputText id="userCreated" styleClass="data_field" value="#{userController.user.userCreated.time}">
+						<f:convertDateTime for="userCreated" type="both" />
+					</h:outputText>
+				</h:column>
+
+				<h:column>
+					<h:outputLabel for="userUpdated" styleClass="data_label" value="#{msg.ADMIN_SHOW_USER_UPDATED}" />
+
+					<h:outputText id="userUpdated" styleClass="data_field" value="#{userController.user.userUpdated.time}">
+						<f:convertDateTime for="userUpdated" type="both" />
+					</h:outputText>
+				</h:column>
+
+				<h:column>
+					<h:outputLabel for="userAccountStatus" styleClass="data_label" value="#{msg.ADMIN_SHOW_USER_ACCOUNT_STATUS}" />
+
+					<h:outputText id="userAccountStatus" styleClass="data_field #{userController.user.userAccountStatus.styleClass}" value="#{msg[userController.user.userAccountStatus.messageKey]}" />
+				</h:column>
+
+				<h:column>
+					<h:outputLabel for="userProfileMode" styleClass="data_label" value="#{msg.ADMIN_SHOW_USER_PROFILE_MODE}" />
+
+					<h:outputText id="userProfileMode" styleClass="data_field" value="#{msg[userController.user.userProfileMode.messageKey]}" />
+				</h:column>
+
+				<h:column>
+					<h:outputLabel for="userLastLocked" styleClass="data_label" value="#{msg.ADMIN_SHOW_USER_LAST_LOCKED}" />
+
+					<h:outputText id="userLastLocked" styleClass="data_field" value="#{userController.user.userLastLocked.time}">
+						<f:convertDateTime for="userLastLocked" type="both" />
+					</h:outputText>
+				</h:column>
+
+				<h:column>
+					<h:outputLabel for="lastLockedReason" styleClass="data_label" value="#{msg.ADMIN_SHOW_USER_LAST_LOCKED_REASON}" />
+
+					<h:outputText id="lastLockedReason" styleClass="data_field" value="#{userController.user.lastLockedReason}" />
+				</h:column>
+
+				<h:column>
+					<h:outputLabel for="contactCreated" styleClass="data_label" value="#{msg.ADMIN_SHOW_USER_CONTACT_CREATED}" />
+
+					<h:outputText id="contactCreated" styleClass="data_field" value="#{userController.user.userContact.contactCreated.time}">
+						<f:convertDateTime for="contactCreated" type="both" />
+					</h:outputText>
+				</h:column>
+
+				<h:column>
+					<h:outputLabel for="contactUpdated" styleClass="data_label" value="#{msg.ADMIN_SHOW_USER_CONTACT_UPDATED}" />
+
+					<h:outputText id="contactUpdated" styleClass="data_field" value="#{userController.user.userContact.contactUpdated.time}">
+						<f:convertDateTime for="contactUpdated" type="both" />
+					</h:outputText>
+				</h:column>
+
+				<h:column>
+					<h:outputLabel for="isOwnContact" styleClass="data_label" value="#{msg.ADMIN_SHOW_USER_IS_OWN_CONTACT}" />
+
+					<h:outputText id="isOwnContact" styleClass="data_field" value="#{userController.user.userContact.isOwnContact()}" />
+				</h:column>
+
+				<h:column>
+					<h:outputLabel for="contactGender" styleClass="data_label" value="#{msg.ADMIN_SHOW_USER_GENDER}" />
+
+					<h:outputText id="contactGender" styleClass="data_field" value="#{msg[userController.user.userContact.contactGender.messageKey]}" />
+				</h:column>
+
+				<h:column>
+					<h:outputLabel for="contactTitle" styleClass="data_label" value="#{msg.ADMIN_SHOW_USER_TITLE}" />
+
+					<h:outputText id="contactTitle" styleClass="data_field" value="#{userController.user.userContact.contactTitle}" />
+				</h:column>
+
+				<h:column>
+					<h:outputLabel for="contactFirstName" styleClass="data_label" value="#{msg.ADMIN_SHOW_USER_FIRST_NAME}" />
+
+					<h:outputText id="contactFirstName" styleClass="data_field" value="#{userController.user.userContact.contactFirstName}" />
+				</h:column>
+
+				<h:column>
+					<h:outputLabel for="contactFamilyName" styleClass="data_label" value="#{msg.ADMIN_SHOW_USER_FAMILY_NAME}" />
+
+					<h:outputText id="contactFamilyName" styleClass="data_field" value="#{userController.user.userContact.contactFamilyName}" />
+				</h:column>
+
+				<h:column>
+					<h:outputLabel for="contactStreet" styleClass="data_label" value="#{msg.ADMIN_SHOW_USER_STREET}" />
+
+					<h:outputText id="contactStreet" styleClass="data_field" value="#{userController.user.userContact.contactStreet}" />
+				</h:column>
+
+				<h:column>
+					<h:outputLabel for="contactHouseNumber" styleClass="data_label" value="#{msg.ADMIN_SHOW_USER_HOUSE_NUMBER}" />
+
+					<h:outputText id="contactHouseNumber" styleClass="data_field" value="#{userController.user.userContact.contactHouseNumber}" />
+				</h:column>
+
+				<h:column>
+					<h:outputLabel for="contactZipCode" styleClass="data_label" value="#{msg.ADMIN_SHOW_USER_ZIP_CODE}" />
+
+					<h:outputText id="contactZipCode" styleClass="data_field" value="#{userController.user.userContact.contactZipCode}" />
+				</h:column>
+
+				<h:column>
+					<h:outputLabel for="contactCity" styleClass="data_label" value="#{msg.ADMIN_SHOW_USER_CITY}" />
+
+					<h:outputText id="contactCity" styleClass="data_field" value="#{userController.user.userContact.contactCity}" />
+				</h:column>
+
+				<h:column>
+					<h:outputLabel for="contactEmailAddress" styleClass="data_label" value="#{msg.ADMIN_SHOW_USER_EMAIL_ADDRESS}" />
+
+					<h:outputLink id="contactEmailAddress" styleClass="data_field" value="mailto:#{userController.user.userContact.contactEmailAddress}">
+						<h:outputText value="#{userController.user.userContact.contactEmailAddress}" />
+					</h:outputLink>
+				</h:column>
+
+				<h:column>
+					<h:outputLabel for="contactBirthday" styleClass="data_label" value="#{msg.ADMIN_SHOW_USER_BIRTHDAY}" />
+
+					<h:outputText id="contactBirthday" styleClass="data_field" value="#{userController.user.userContact.contactBirthday.time}">
+						<f:convertDateTime for="contactBirthday" type="date" />
+					</h:outputText>
+				</h:column>
+			</h:panelGrid>
+
+			<ui:include src="/WEB-INF/templates/admin/admin_user_links.tpl">
+				<ui:param name="user" value="#{userController.user}" />
+			</ui:include>
+
+			<ui:include src="/WEB-INF/templates/admin/admin_cellphone_data.tpl">
+				<ui:param name="cellphoneNumber" value="#{userController.user.userContact.contactCellphoneNumber}" />
+				<ui:param name="user" value="#{userController.user}" />
+			</ui:include>
+		</ui:define>
+	</ui:composition>
+</html>
diff --git a/web/resources/css/cssLayout.css b/web/resources/css/cssLayout.css
index bf62f151..457a8646 100644
--- a/web/resources/css/cssLayout.css
+++ b/web/resources/css/cssLayout.css
@@ -122,18 +122,27 @@ table, .table, .table_medium {
 	clear: both;
 }
 
-ul.footer_nav {
+ul.footer_nav, ul.mini_nav {
+	display: block;
 	text-align: center;
-	/*width : 95%;*/
 	list-style: none;
 	margin: 0px;
+	padding: 0px;
 }
 
-ul.footer_nav li.footer_link {
+ul.footer_nav li.footer_link, ul.mini_nav li.mini_link {
+	display: block;
 	float: left;
+}
+
+ul.footer_nav li.footer_link {
 	width: 100px;
 }
 
+ul.mini_nav li.mini_link {
+	padding: 1px;
+}
+
 ul.footer_nav li.footer_copyright {
 	float: right;
 	width: 300px;
@@ -213,3 +222,26 @@ ul.footer_nav li.footer_copyright {
 .user_status_unconfirmed {
 	color: #aa0000;
 }
+
+.data_label, .data_field {
+	display: block;
+	width: 100%;
+	height: 14px;
+	padding: 1px;
+	margin: 1px;
+	border: 1px solid #aaaaaa;
+	vertical-align: top;
+}
+
+.data_label {
+	font-weight: bold;
+	background-color: #dddddd;
+}
+
+.unlink_link {
+	color: #aaaa00;
+}
+
+.delete_link {
+	color: #aa0000;
+}
-- 
2.39.5