From ff7c8ac91ab33cbdebb79e9de6683ea2dcc4310f Mon Sep 17 00:00:00 2001
From: =?utf8?q?Roland=20H=C3=A4der?= <roland@mxchange.org>
Date: Sun, 1 Oct 2017 21:51:14 +0200
Subject: [PATCH] Please cherry-pick: - rewrote branch office/employee list to
 filtering, sorting list - also used f:facet name="<footer|header>" instead of
 h:panelGroup+hX to make   more generic table footer and header - disabled
 filtering for creation timestamps and action links - renamed some i18n
 strings, let them have plural (more than one item could be   listed) -
 renamed COMPANY_FOO to only FOO as no other employees or departments (e.g.  
 fire department) will this application be about - had switched
 STATE_SAVING_METHOD to server for testing things, missed to set   it back
 before committing, now set back to client - added navigation rules for
 departments and opening times - added missing i18n strings
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit

Signed-off-by: Roland Häder <roland@mxchange.org>
---
 .../JobsBusinessDataWebRequestBean.java       |  79 +++-
 .../helper/JobsWebRequestHelperBean.java      |   4 +-
 .../JobsCompanyEmployeeConverter.java         |   8 +-
 .../JobsCompanyDepartmentConverter.java       |   8 +-
 .../localization/bundle_de_DE.properties      |  84 +++--
 .../localization/bundle_en_US.properties      |  75 ++--
 web/WEB-INF/faces-config.xml                  |   8 +
 .../mini/employee/admin_employee_links.tpl    |   6 +-
 web/WEB-INF/templates/admin/admin_menu.tpl    |  11 +-
 .../admin_form_basic_company_data.tpl         | 345 +++++-------------
 .../admin_form_branch_office_data.tpl         |   4 +-
 .../employee/admin_form_employee_data.tpl     |  28 +-
 web/WEB-INF/web.xml                           |   2 +-
 .../admin_basic_company_data_list.xhtml       | 133 ++++---
 .../admin_branch_office_list.xhtml            |  49 +--
 web/admin/employee/admin_employee_list.xhtml  |  75 ++--
 16 files changed, 442 insertions(+), 477 deletions(-)

diff --git a/src/java/org/mxchange/jjobs/beans/business/basicdata/JobsBusinessDataWebRequestBean.java b/src/java/org/mxchange/jjobs/beans/business/basicdata/JobsBusinessDataWebRequestBean.java
index 06fd55d2..6d0bd39b 100644
--- a/src/java/org/mxchange/jjobs/beans/business/basicdata/JobsBusinessDataWebRequestBean.java
+++ b/src/java/org/mxchange/jjobs/beans/business/basicdata/JobsBusinessDataWebRequestBean.java
@@ -18,6 +18,7 @@ package org.mxchange.jjobs.beans.business.basicdata;
 
 import fish.payara.cdi.jsr107.impl.NamedCache;
 import java.text.MessageFormat;
+import java.util.Comparator;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
@@ -56,6 +57,11 @@ public class JobsBusinessDataWebRequestBean extends BaseJobsBean implements Jobs
 	@EJB (lookup = "java:global/jjobs-ejb/adminBasicCompanyData!org.mxchange.jcontactsbusiness.model.basicdata.AdminBasicCompanyDataSessionBeanRemote", description = "A stateless session bean for administrative purposes.")
 	private AdminBasicCompanyDataSessionBeanRemote adminBasicCompanyDataBean;
 
+	/**
+	 * List of all basic company data
+	 */
+	private List<BusinessBasicData> allCompanyBasicData;
+
 	/**
 	 * A list of all registered companies (globally)
 	 */
@@ -99,6 +105,11 @@ public class JobsBusinessDataWebRequestBean extends BaseJobsBean implements Jobs
 	 */
 	private Long faxNumber;
 
+	/**
+	 * List of filtered basic company data
+	 */
+	private List<BusinessBasicData> filteredBasicCompanyData;
+
 	/**
 	 * Area code for land-line number
 	 */
@@ -126,6 +137,9 @@ public class JobsBusinessDataWebRequestBean extends BaseJobsBean implements Jobs
 	public JobsBusinessDataWebRequestBean () {
 		// Call super constructor
 		super();
+
+		// Init list
+		this.allCompanyBasicData = new LinkedList<>();
 	}
 
 	/**
@@ -158,32 +172,17 @@ public class JobsBusinessDataWebRequestBean extends BaseJobsBean implements Jobs
 
 		// Add it to list
 		this.basicDataCache.put(event.getBasicData().getBasicDataId(), event.getBasicData());
+		this.allCompanyBasicData.add(event.getBasicData());
 	}
 
 	/**
-	 * Returns a list of all business contacts
+	 * Getter for a list of all business contacts
 	 * <p>
 	 * @return A list of all business contacts
 	 */
 	@SuppressWarnings ("ReturnOfCollectionOrArrayField")
 	public List<BusinessBasicData> allCompanyBasicData () {
-		// Init list
-		final List<BusinessBasicData> list = new LinkedList<>();
-
-		// Get iterator
-		final Iterator<Cache.Entry<Long, BusinessBasicData>> iterator = this.basicDataCache.iterator();
-
-		// Loop over all
-		while (iterator.hasNext()) {
-			// Get next entry
-			final Cache.Entry<Long, BusinessBasicData> next = iterator.next();
-
-			// Add value to list
-			list.add(next.getValue());
-		}
-
-		// Return it
-		return list;
+		return this.allCompanyBasicData;
 	}
 
 	/**
@@ -294,6 +293,26 @@ public class JobsBusinessDataWebRequestBean extends BaseJobsBean implements Jobs
 		this.faxNumber = faxNumber;
 	}
 
+	/**
+	 * Getter for filtered basic company data
+	 * <p>
+	 * @return Filtered basic company data
+	 */
+	@SuppressWarnings ("ReturnOfCollectionOrArrayField")
+	public List<BusinessBasicData> getFilteredBasicCompanyData () {
+		return this.filteredBasicCompanyData;
+	}
+
+	/**
+	 * Setter for filtered basic company data
+	 * <p>
+	 * @param filteredBasicCompanyData Filtered basic company data
+	 */
+	@SuppressWarnings ("AssignmentToCollectionOrArrayFieldFromParameter")
+	public void setFilteredBasicCompanyData (final List<BusinessBasicData> filteredBasicCompanyData) {
+		this.filteredBasicCompanyData = filteredBasicCompanyData;
+	}
+
 	/**
 	 * Getter for land-line number's area code
 	 * <p>
@@ -367,6 +386,30 @@ public class JobsBusinessDataWebRequestBean extends BaseJobsBean implements Jobs
 				this.basicDataCache.put(next.getBasicDataId(), next);
 			}
 		}
+
+		// Is cache there and list is not full?
+		if ((this.allCompanyBasicData.isEmpty()) && (this.basicDataCache.iterator().hasNext())) {
+			// Get iterator
+			final Iterator<Cache.Entry<Long, BusinessBasicData>> iterator = this.basicDataCache.iterator();
+
+			// Build up list
+			while (iterator.hasNext()) {
+				// GEt next element
+				final Cache.Entry<Long, BusinessBasicData> next = iterator.next();
+
+				// Add to list
+				this.allCompanyBasicData.add(next.getValue());
+			}
+
+			// Sort list
+			this.allCompanyBasicData.sort(new Comparator<BusinessBasicData>() {
+				@Override
+				public int compare (final BusinessBasicData o1, final BusinessBasicData o2) {
+					return o1.getBasicDataId() > o2.getBasicDataId() ? 1 : o1.getBasicDataId() < o2.getBasicDataId() ? -1 : 0;
+				}
+			}
+			);
+		}
 	}
 
 	/**
diff --git a/src/java/org/mxchange/jjobs/beans/helper/JobsWebRequestHelperBean.java b/src/java/org/mxchange/jjobs/beans/helper/JobsWebRequestHelperBean.java
index e7e6b3dd..876608a0 100644
--- a/src/java/org/mxchange/jjobs/beans/helper/JobsWebRequestHelperBean.java
+++ b/src/java/org/mxchange/jjobs/beans/helper/JobsWebRequestHelperBean.java
@@ -486,9 +486,9 @@ public class JobsWebRequestHelperBean extends BaseJobsBean implements JobsWebReq
 			// Then create name
 			sb.append(this.getMessageFromBundle(contact.getContactPersonalTitle().getMessageKey()));
 			sb.append(" "); //NOI18N
-			sb.append(contact.getContactFamilyName());
-			sb.append(" "); //NOI18N
 			sb.append(contact.getContactFirstName());
+			sb.append(" "); //NOI18N
+			sb.append(contact.getContactFamilyName());
 		}
 
 		// Return it
diff --git a/src/java/org/mxchange/jjobs/converter/business/company_employee/JobsCompanyEmployeeConverter.java b/src/java/org/mxchange/jjobs/converter/business/company_employee/JobsCompanyEmployeeConverter.java
index 9ef742b6..fc87f3d8 100644
--- a/src/java/org/mxchange/jjobs/converter/business/company_employee/JobsCompanyEmployeeConverter.java
+++ b/src/java/org/mxchange/jjobs/converter/business/company_employee/JobsCompanyEmployeeConverter.java
@@ -41,18 +41,18 @@ public class JobsCompanyEmployeeConverter implements Converter<Employee> {
 	/**
 	 * CompanyEmployee EJB
 	 */
-	private static CompanyEmployeeSessionBeanRemote COMPANY_EMPLOYEE_BEAN;
+	private static CompanyEmployeeSessionBeanRemote EMPLOYEE_BEAN;
 
 	@Override
 	public Employee getAsObject (final FacesContext context, final UIComponent component, final String submittedValue) {
 		// Is the instance there?
-		if (COMPANY_EMPLOYEE_BEAN == null) {
+		if (EMPLOYEE_BEAN == null) {
 			try {
 				// Not yet, attempt lookup
 				final Context initial = new InitialContext();
 
 				// Lookup EJB
-				COMPANY_EMPLOYEE_BEAN = (CompanyEmployeeSessionBeanRemote) initial.lookup("java:global/jjobs-ejb/companyEmployee!org.mxchange.jcontactsbusiness.model.employee.CompanyEmployeeSessionBeanRemote"); //NOI18N
+				EMPLOYEE_BEAN = (CompanyEmployeeSessionBeanRemote) initial.lookup("java:global/jjobs-ejb/companyEmployee!org.mxchange.jcontactsbusiness.model.employee.CompanyEmployeeSessionBeanRemote"); //NOI18N
 			} catch (final NamingException ex) {
 				// Throw it again
 				throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Cannot lookup EJB", ex.getMessage()), ex); //NOI18N
@@ -76,7 +76,7 @@ public class JobsCompanyEmployeeConverter implements Converter<Employee> {
 			final Long employeeId = Long.valueOf(submittedValue);
 
 			// Try to get user instance from it
-			companyEmployee = COMPANY_EMPLOYEE_BEAN.findCompanyEmployeeById(employeeId);
+			companyEmployee = EMPLOYEE_BEAN.findCompanyEmployeeById(employeeId);
 		} catch (final NumberFormatException ex) {
 			// Throw again
 			throw new ConverterException(ex);
diff --git a/src/java/org/mxchange/jjobs/converter/business/department/JobsCompanyDepartmentConverter.java b/src/java/org/mxchange/jjobs/converter/business/department/JobsCompanyDepartmentConverter.java
index 08c51186..b9d98af8 100644
--- a/src/java/org/mxchange/jjobs/converter/business/department/JobsCompanyDepartmentConverter.java
+++ b/src/java/org/mxchange/jjobs/converter/business/department/JobsCompanyDepartmentConverter.java
@@ -41,18 +41,18 @@ public class JobsCompanyDepartmentConverter implements Converter<Department> {
 	/**
 	 * Company department EJB
 	 */
-	private static CompanyDepartmentSessionBeanRemote COMPANY_DEPARTMENT_BEAN;
+	private static CompanyDepartmentSessionBeanRemote DEPARTMENT_BEAN;
 
 	@Override
 	public Department getAsObject (final FacesContext context, final UIComponent component, final String submittedValue) {
 		// Is the instance there?
-		if (COMPANY_DEPARTMENT_BEAN == null) {
+		if (DEPARTMENT_BEAN == null) {
 			try {
 				// Not yet, attempt lookup
 				final Context initial = new InitialContext();
 
 				// Lookup EJB
-				COMPANY_DEPARTMENT_BEAN = (CompanyDepartmentSessionBeanRemote) initial.lookup("java:global/jjobs-ejb/companyDepartment!org.mxchange.jcontactsbusiness.model.department.CompanyDepartmentSessionBeanRemote"); //NOI18N
+				DEPARTMENT_BEAN = (CompanyDepartmentSessionBeanRemote) initial.lookup("java:global/jjobs-ejb/companyDepartment!org.mxchange.jcontactsbusiness.model.department.CompanyDepartmentSessionBeanRemote"); //NOI18N
 			} catch (final NamingException ex) {
 				// Throw it again
 				throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Cannot lookup EJB", ex.getMessage()), ex); //NOI18N
@@ -76,7 +76,7 @@ public class JobsCompanyDepartmentConverter implements Converter<Department> {
 			final Long departmentId = Long.valueOf(submittedValue);
 
 			// Try to get user instance from it
-			companyDepartment = COMPANY_DEPARTMENT_BEAN.findDepartmentById(departmentId);
+			companyDepartment = DEPARTMENT_BEAN.findDepartmentById(departmentId);
 		} catch (final NumberFormatException ex) {
 			// Throw again
 			throw new ConverterException(ex);
diff --git a/src/java/org/mxchange/localization/bundle_de_DE.properties b/src/java/org/mxchange/localization/bundle_de_DE.properties
index 976d2a6f..8cba2ceb 100644
--- a/src/java/org/mxchange/localization/bundle_de_DE.properties
+++ b/src/java/org/mxchange/localization/bundle_de_DE.properties
@@ -290,7 +290,7 @@ ADMIN_USER_DATA_PASSWORD_ADD_NOTICE=Lassen Sie beide Passwortfelder leer und es
 ADMIN_CONTACT_DATA_EMAIL_ADDRESS_NOTICE=Die Email-Adresse darf nur einmal vorhanden sein.
 BUTTON_ADMIN_ADD_USER=Neues Benutzeraccount hinzuf\u00fcgen
 ADMIN_MENU_COUNTRY_TITLE=L\u00e4nderdaten
-ADMIN_LINK_LIST_COUNTRIES=L\u00e4nder auflisten
+ADMIN_LINK_LIST_COUNTRIES=L\u00e4nder
 ADMIN_LINK_LIST_COUNTRIES_TITLE=Bestehende L\u00e4nderdaten auflisten, neue hinzuf\u00fcgen, \u00e4ndern und l\u00f6schen.
 PAGE_TITLE_ADMIN_LIST_COUNTRY=L\u00e4nderdaten verwalten
 CONTENT_TITLE_ADMIN_LIST_COUNTRY=Auflisten von Laenderdaten:
@@ -500,7 +500,7 @@ GUEST_CONFIRM_USER_ACCOUNT_DONE_TITLE=Vielen Dank f\u00fcr die Best\u00e4tigung
 GUEST_USER_CONFIRM_ACCOUNT_DONE=Hallo {0} {1} {2}. Sie haben soeben Ihren Account best\u00e4tigt. Es ist eine Mail mit weiteren Details an Sie unterwegs.
 BUTTON_GUEST_CONFIRM_USER_ACCOUNT=Account best\u00e4tigen
 ADMIN_MENU_CONTACT_TITLE=Kontaktdaten verwalten
-ADMIN_LINK_LIST_CONTACT=Kontaktdaten auflisten
+ADMIN_LINK_LIST_CONTACT=Kontaktdaten
 ADMIN_LINK_LIST_CONTACT_TITLE=Listet alle Kontaktdaten auf, egal wo her sie angelegt wurden.
 ADMIN_CONTACT_COUNTRY_CODE=L\u00e4ndercode:
 ADMIN_CONTACT_MOBILE_NUMBER=Handynummer:
@@ -604,7 +604,7 @@ ERROR_BEAN_HELPER_MOBILE_NUMBER_NOT_SET=Fehler: Instanz 'mobile' in Bean-Helper
 CONTENT_TITLE_ADMIN_LIST_CONTACT_MOBILE_NUMBER=Auflisten von Mobiltelefonnummern:
 ADMIN_LIST_MOBILE_EMPTY=Es sind keine Mobilfunknummern gespeichert.
 ADMIN_MENU_PHONE_NUMBERS_TITLE=Telefonnummern:
-ADMIN_LINK_LIST_MOBILE_PHONE_NUMBERS=Handynummern ...
+ADMIN_LINK_LIST_MOBILE_PHONE_NUMBERS=Handynummern
 ADMIN_LINK_LIST_MOBILE_PHONE_NUMBERS_TITLE=Alle Mobilfunknummern auflisten.
 ADMIN_SHOW_PHONE_CREATED=Telefoneintrag erstellt:
 ADMIN_SHOW_PHONE_UPDATED=Telefoneintrag zuletzt ge\u00e4ndert:
@@ -651,7 +651,7 @@ ADMIN_OR_ENTER_CONTACT_NEW_MOBILE_DATA=... oder neue Mobilfunknummer eingeben:
 ERROR_USER_EMAIL_ADDRESS_NOT_FOUND=Die eingegebene Email-Addresse konnte nicht gefunden werden.
 ADMIN_LINK_LIST_LAND_LINE_PHONE_NUMBERS=Festnetznummern ...
 ADMIN_LINK_LIST_LAND_LINE_PHONE_NUMBERS_TITLE=Listet alle Festnetznummern auf.
-ADMIN_LINK_LIST_FAX_PHONE_NUMBERS=Faxnummern ...
+ADMIN_LINK_LIST_FAX_PHONE_NUMBERS=Faxnummern
 ADMIN_LINK_LIST_FAX_PHONE_NUMBERS_TITLE=Listet alle Faxnummern auf.
 ADMIN_LIST_FAX_NUMBER_EMPTY=Es sind keine Faxnummern gelistet.
 PAGE_TITLE_ADMIN_LIST_CONTACT_FAX_NUMBER=Faxnummern auflisten
@@ -812,9 +812,9 @@ GUEST_REGISTRATION_PASSWORD_NOT_ENTERED=Bitte geben Sie ein Passwort ein. Dies m
 GUEST_REGISTRATION_PASSWORD_REPEAT_NOT_ENTERED=Bitte wiederholen Sie das eingegebene Passwort. Dies wird zur Bestaetigung benoetigt.
 PAGE_TITLE_ADMIN_AREA=Administration
 #@TODO Please fix German umlauts!
-ADMIN_MENU_BASIC_COMPANY_DATA_TITLE=Geschaeftliche Kontakte
-ADMIN_LINK_LIST_BASIC_COMPANY_DATA=Stammdaten auflisten
-ADMIN_LINK_LIST_BASIC_COMPANY_DATA_TITLE=Listet Stammdaten auf
+ADMIN_MENU_BUSINESS_CONTACT_TITLE=Geschaeftliche Kontakte
+ADMIN_LINK_LIST_BASIC_COMPANY_DATA=Unternehmensstammdaten
+ADMIN_LINK_LIST_BASIC_COMPANY_DATA_TITLE=Listet Stammdaten von Unternehmen auf.
 PAGE_TITLE_ADMIN_LIST_BASIC_COMPANY_DATA=Stammdaten auflisten
 #@TODO Please fix German umlauts!
 CONTENT_TITLE_ADMIN_LIST_BASIC_COMPANY_DATA=Auflisten von Stammdaten
@@ -884,7 +884,8 @@ ADMIN_LINK_ASSIGN_BASIC_COMPANY_DATA_COMPANY_FOUNDER_TITLE=Weisst diesem Firmene
 ADMIN_BASIC_COMPANY_DATA_CREATED=Eintrag erstellt
 ADMIN_USER_NAME_IS_REQUIRED=Bitte vergeben Sie einen Benutzernamen. Dieser muss unique sein.
 NO_WEBSITE_URL_ENTERED=Keine URL eingegeben
-ADMIN_LINK_LIST_BRANCH_OFFICES=Filialen auflisten
+ADMIN_LINK_LIST_BRANCH_OFFICES=Filialen
+ADMIN_LINK_LIST_BRANCH_OFFICES_TITLE=Listet Filialen auf.
 ADMIN_ENTER_DATA_STORE=Etage eingeben:
 ADMIN_ENTER_DATA_SUITE_NUMBER=Appartmentnummer eingeben:
 ADMIN_ASSIGN_BRANCH_OFFICE_USER_OWNER=Benutzer einer Filiale zuweisen:
@@ -983,8 +984,8 @@ LABEL_USERS=Benutzer
 FILTER_BY_MULTIPLE_USERS_TITLE=Liste durch Auswahl von ein oder mehr Benutzern durchsuchen.
 LABEL_COMPANIES=Unternehmen
 FILTER_BY_MULTIPLE_COMPANIES_TITLE=Liste durch Auswahl von ein oder mehr Unternehmen durchsuchen.
-LABEL_COMPANY_EMPLOYEES=Mitarbeiter
-FILTER_BY_MULTIPLE_COMPANY_EMPLOYEES_TITLE=Liste durch Auswahl von ein oder mehr Mitarbeiter durchsuchen.
+LABEL_EMPLOYEES=Mitarbeiter
+FILTER_BY_MULTIPLE_EMPLOYEES_TITLE=Liste durch Auswahl von ein oder mehr Mitarbeiter durchsuchen.
 ADMIN_ENTER_BRANCH_OFFICE_NUMBER=Filialnummer eingeben:
 #@TODO Please fix German umlauts!
 ADMIN_SELECT_BRANCH_OFFICE=Filiale auswaehlen:
@@ -1001,36 +1002,47 @@ PAYMENT_TYPE_INVOICE=Auf Rechnung
 ADMIN_SELECT_SELLER_EMPLOYEE=Verkaeufer auswaehlen:
 #@TODO Please fix German umlauts!
 LOGIN_SELECT_SELLER_EMPLOYEE=Bitte waehlen Sie einen Verkaeufer aus:
-ADMIN_LINK_SHOW_COMPANY_EMPLOYEE_TITLE=Zeigt Daten eines Mitarbeiters an.
-TABLE_SUMMARY_ADMIN_LIST_COMPANY_EMPLOYEES=Diese Tabelle listet alle Mitarbeiter auf.
-#@TODO Please fix German umlauts!
-ADMIN_COMPANY_EMPLOYEES_LIST_EMPTY=Es wurden keine Mitarbeiter in der Datenbank gefunden. Oder Ihre Suche ergab keine Uebereinstimmungen.
-ADMIN_LIST_COMPANY_EMPLOYEES_HEADER=Alle Mitarbeiter auflisten
-ADMIN_LINK_LIST_COMPANY_EMPLOYEE=Mitarbeiter auflisten
-ADMIN_LINK_LIST_COMPANY_EMPLOYEE_TITLE=Listet Mitarbeiter auf
-ADMIN_MENU_COMPANY_EMPLOYEE_TITLE=Mitarbeiter
-ADMIN_ASSIGN_COMPANY_EMPLOYEE_COMPANY=Mitarbeiter einem Unternehmen zuweisen:
-#@TODO Please fix German umlauts!
-ADMIN_COMPANY_EMPLOYEE_COMPANY_REQUIRED=Sie muessen den Mitarbeiter einem Unternehmen zuweisen.
-ADMIN_ASSIGN_COMPANY_EMPLOYEE_BRANCH_OFFICE=Filiale einem Mitarbeiter zuweisen:
-#@TODO Please fix German umlauts!
-ADMIN_ASSIGN_COMPANY_EMPLOYEE_PERSONAL_DATA=Persoenliche Kontaktdaten dem Mitarbeiter zuweisen:
-ADMIN_ASSIGN_COMPANY_EMPLOYEE_USER_OWNER=Benutzeraccount dem Mitarbeiter zuweisen:
-ADMIN_ENTER_COMPANY_EMPLOYEE_EMAIL_ADDRESS=Gesch\u00e4ftl. Email-Adresse eingeben:
-ADMIN_ENTER_COMPANY_EMPLOYEE_STAFF_NUMBER=Mitarbeiternummer eingeben:
-ADMIN_COMPANY_EMPLOYEE_OTHER_LEGEND=Weitere Daten des Mitarbeiters:
-ADMIN_COMPANY_EMPLOYEE_OTHER_LEGEND_TITLE=Geben Sie hier weitere Daten des Mitarbeiters ein. Diese sind alle optional.
+ADMIN_LINK_SHOW_EMPLOYEE_TITLE=Zeigt Daten eines Mitarbeiters an.
+TABLE_SUMMARY_ADMIN_LIST_EMPLOYEES=Diese Tabelle listet alle Mitarbeiter auf.
+#@TODO Please fix German umlauts!
+ADMIN_EMPLOYEES_LIST_EMPTY=Es wurden keine Mitarbeiter in der Datenbank gefunden. Oder Ihre Suche ergab keine Uebereinstimmungen.
+ADMIN_LIST_EMPLOYEES_HEADER=Alle Mitarbeiter auflisten
+ADMIN_LINK_LIST_EMPLOYEES=Mitarbeiter
+ADMIN_LINK_LIST_EMPLOYEES_TITLE=Listet Mitarbeiter auf
+ADMIN_MENU_EMPLOYEE_TITLE=Mitarbeiter
+ADMIN_ASSIGN_EMPLOYEE_COMPANY=Mitarbeiter einem Unternehmen zuweisen:
+#@TODO Please fix German umlauts!
+ADMIN_EMPLOYEE_COMPANY_REQUIRED=Sie muessen den Mitarbeiter einem Unternehmen zuweisen.
+ADMIN_ASSIGN_EMPLOYEE_BRANCH_OFFICE=Filiale einem Mitarbeiter zuweisen:
+#@TODO Please fix German umlauts!
+ADMIN_ASSIGN_EMPLOYEE_PERSONAL_DATA=Persoenliche Kontaktdaten dem Mitarbeiter zuweisen:
+ADMIN_ASSIGN_EMPLOYEE_USER_OWNER=Benutzeraccount dem Mitarbeiter zuweisen:
+ADMIN_ENTER_EMPLOYEE_EMAIL_ADDRESS=Gesch\u00e4ftl. Email-Adresse eingeben:
+ADMIN_ENTER_EMPLOYEE_STAFF_NUMBER=Mitarbeiternummer eingeben:
+ADMIN_EMPLOYEE_OTHER_LEGEND=Weitere Daten des Mitarbeiters:
+ADMIN_EMPLOYEE_OTHER_LEGEND_TITLE=Geben Sie hier weitere Daten des Mitarbeiters ein. Diese sind alle optional.
 ADMIN_ENTER_PHONE_EXTENSION=Durchwahl eingeben:
-ADMIN_ASSIGN_COMPANY_EMPLOYEE_DEPARTMENT=Abteilung einem Mitarbeiter zuweisen:
-ADMIN_ASSIGN_COMPANY_EMPLOYEE_HEADQUARTERS=Hauptsitz einem Mitarbeiter zuweisen:
-ADMIN_ENTER_COMPANY_EMPLOYEE_MOBILE_NUMBER=Geschaefliche Mobilfunknummer des Mitarbeiters eingeben:
-ADMIN_COMPANY_EMPLOYEE_GENERAL_LEGEND=Allgemeine Daten des Mitarbeiters:
-ADMIN_COMPANY_EMPLOYEE_GENERAL_LEGEND_TITLE=Geben Sie hier die generellen Daten des Mitarbeiters an.
+ADMIN_ASSIGN_EMPLOYEE_DEPARTMENT=Abteilung einem Mitarbeiter zuweisen:
+ADMIN_ASSIGN_EMPLOYEE_HEADQUARTERS=Hauptsitz einem Mitarbeiter zuweisen:
+ADMIN_ENTER_EMPLOYEE_MOBILE_NUMBER=Geschaefliche Mobilfunknummer des Mitarbeiters eingeben:
+ADMIN_EMPLOYEE_GENERAL_LEGEND=Allgemeine Daten des Mitarbeiters:
+ADMIN_EMPLOYEE_GENERAL_LEGEND_TITLE=Geben Sie hier die generellen Daten des Mitarbeiters an.
 ADMIN_ASSIGNED_BRANCH_OFFICE=Zugewiesene Filiale:
 LABEL_BRANCH_OFFICES=Filialen
 ADMIN_DATE_OF_ISSUE=Ausstellungsdatum:
 ADMIN_PAYMENT_TYPE=Zahlungsmethode:
 ADMIN_LINK_EDIT_BRANCH_OFFICE_TITLE=Editieren von Daten der Filiale.
 ADMIN_LINK_DELETE_BRANCH_OFFICE_TITLE=Loescht die Filiale.
-PAGE_TITLE_ADMIN_LIST_COMPANY_EMPLOYEE=Mitarbeiter auflisten
-CONTENT_TITLE_ADMIN_LIST_COMPANY_EMPLOYEE=Auflisten von Mitarbeitern:
+PAGE_TITLE_ADMIN_LIST_EMPLOYEE=Mitarbeiter auflisten
+CONTENT_TITLE_ADMIN_LIST_EMPLOYEE=Auflisten von Mitarbeitern:
+#@TODO Please fix German umlauts!
+ADMIN_ADD_EMPLOYEE_TITLE=Mitarbeiter hinzufuegen
+#@TODO Please fix German umlauts!
+ADMIN_ADD_EMPLOYEE_MINIMUM_DATA=Bitte waehlen Sie mindestens das Unternehmen aus und geben SIe mindestens entweder die Mitarbeiternummer ein oder waehlen Sie die persoenlichen Kontaktdaten des Mitarbeiters aus.
+#@TODO Please fix German umlauts!
+BUTTON_ADMIN_ADD_EMPLOYEE=Mitarbeiter hinzufuegen
+ADMIN_LIST_BASIC_COMPANY_DATA_HEADER=Alle Unternehmensgrunddaten auflisten
+ADMIN_LINK_LIST_DEPARTMENTS=Abteilungen
+ADMIN_LINK_LIST_DEPARTMENTS_TITLE=Listet Abteilungen von Unternehmen auf.
+#@TODO Please fix German umlauts!
+ADMIN_LINK_LIST_OPENING_TIMES=Oeffnungszeiten
diff --git a/src/java/org/mxchange/localization/bundle_en_US.properties b/src/java/org/mxchange/localization/bundle_en_US.properties
index 33c21099..c0646ed2 100644
--- a/src/java/org/mxchange/localization/bundle_en_US.properties
+++ b/src/java/org/mxchange/localization/bundle_en_US.properties
@@ -277,7 +277,7 @@ ADMIN_USER_DATA_PASSWORD_ADD_NOTICE=Keep both password fields empty to create a
 ADMIN_CONTACT_DATA_EMAIL_ADDRESS_NOTICE=The email address must be unique.
 BUTTON_ADMIN_ADD_USER=Add new user account
 ADMIN_MENU_COUNTRY_TITLE=Country data
-ADMIN_LINK_LIST_COUNTRIES=List countries
+ADMIN_LINK_LIST_COUNTRIES=Countries
 ADMIN_LINK_LIST_COUNTRIES_TITLE=List existing countries, add new country, edit and delete.
 PAGE_TITLE_ADMIN_LIST_COUNTRY=Manage country data
 CONTENT_TITLE_ADMIN_LIST_COUNTRY=List country data:
@@ -505,7 +505,7 @@ GUEST_CONFIRM_USER_ACCOUNT_DONE_TITLE=Thank you for confirmation of your account
 GUEST_USER_CONFIRM_ACCOUNT_DONE=Hello {0} {1} {2}. You have successfully confirmed your account. An email with more details is on it's way to you.
 BUTTON_GUEST_CONFIRM_USER_ACCOUNT=Confirm account
 ADMIN_MENU_CONTACT_TITLE=Manage contact data
-ADMIN_LINK_LIST_CONTACT=List contact data
+ADMIN_LINK_LIST_CONTACT=Contact data
 ADMIN_LINK_LIST_CONTACT_TITLE=Lists all contact data regardless where they was created.
 ADMIN_CONTACT_COUNTRY_CODE=Country code:
 ADMIN_CONTACT_MOBILE_NUMBER=Mobile number:
@@ -609,7 +609,7 @@ ERROR_BEAN_HELPER_MOBILE_NUMBER_NOT_SET=Error: Instance 'mobile' in bean helper
 CONTENT_TITLE_ADMIN_LIST_CONTACT_MOBILE_NUMBER=List mobile phone numbers:
 ADMIN_LIST_MOBILE_EMPTY=No mobile numbers are saved.
 ADMIN_MENU_PHONE_NUMBERS_TITLE=Phone numbers:
-ADMIN_LINK_LIST_MOBILE_PHONE_NUMBERS=Mobile numbers ...
+ADMIN_LINK_LIST_MOBILE_PHONE_NUMBERS=Mobile numbers
 ADMIN_LINK_LIST_MOBILE_PHONE_NUMBERS_TITLE=List all mobile numbers.
 ADMIN_SHOW_PHONE_CREATED=Created:
 ADMIN_SHOW_PHONE_UPDATED=Last changed:
@@ -656,7 +656,7 @@ ADMIN_OR_ENTER_CONTACT_NEW_MOBILE_DATA=... or add new mobile number:
 ERROR_USER_EMAIL_ADDRESS_NOT_FOUND=Your entered email address could not befound.
 ADMIN_LINK_LIST_LAND_LINE_PHONE_NUMBERS=Land-line numbers ...
 ADMIN_LINK_LIST_LAND_LINE_PHONE_NUMBERS_TITLE=Lists all land-line numbers.
-ADMIN_LINK_LIST_FAX_PHONE_NUMBERS=Fax numbers ...
+ADMIN_LINK_LIST_FAX_PHONE_NUMBERS=Fax numbers
 ADMIN_LINK_LIST_FAX_PHONE_NUMBERS_TITLE=Lists all fax numbers.
 ADMIN_LIST_FAX_NUMBER_EMPTY=There are no fax numbers listed.
 PAGE_TITLE_ADMIN_LIST_CONTACT_FAX_NUMBER=List fax numbers
@@ -815,9 +815,9 @@ GUEST_REGISTRATION_USER_PASSWORDS_EMPTY_NOT_ALLOWED=You have to enter an own pas
 GUEST_REGISTRATION_PASSWORD_NOT_ENTERED=Please enter a password. This must match with security rules.
 GUEST_REGISTRATION_PASSWORD_REPEAT_NOT_ENTERED=Please repeat the entered password. This done to confirm the password.
 PAGE_TITLE_ADMIN_AREA=Administration
-ADMIN_MENU_BASIC_COMPANY_DATA_TITLE=Business contacts
-ADMIN_LINK_LIST_BASIC_COMPANY_DATA=List basic company data
-ADMIN_LINK_LIST_BASIC_COMPANY_DATA_TITLE=Lists basic company data
+ADMIN_MENU_BUSINESS_CONTACT_TITLE=Business contacts
+ADMIN_LINK_LIST_BASIC_COMPANY_DATA=Basic company data
+ADMIN_LINK_LIST_BASIC_COMPANY_DATA_TITLE=Lists basic company data.
 PAGE_TITLE_ADMIN_LIST_BASIC_COMPANY_DATA=List basic company data
 CONTENT_TITLE_ADMIN_LIST_BASIC_COMPANY_DATA=Lists basic company data
 ADMIN_BASIC_COMPANY_DATA_LIST_EMPTY=There are currently no basic company data in database. Or your search criteria doesn't match anything.
@@ -868,7 +868,8 @@ ADMIN_LINK_ASSIGN_BASIC_COMPANY_DATA_COMPANY_FOUNDER_TITLE=Assigns a company fou
 ADMIN_BASIC_COMPANY_DATA_CREATED=Entry created
 ADMIN_USER_NAME_IS_REQUIRED=Please enter a user name. This must be unique.
 NO_WEBSITE_URL_ENTERED=No URL entered
-ADMIN_LINK_LIST_BRANCH_OFFICES=List branch offices
+ADMIN_LINK_LIST_BRANCH_OFFICES=Branch offices
+ADMIN_LINK_LIST_BRANCH_OFFICES_TITLE=Lists branch offices.
 ADMIN_ENTER_DATA_STORE=Enter store:
 ADMIN_ENTER_DATA_SUITE_NUMBER=Enter suite number:
 ADMIN_ASSIGN_BRANCH_OFFICE_USER_OWNER=Assign user to branch office:
@@ -945,8 +946,8 @@ LABEL_USERS=Users
 FILTER_BY_MULTIPLE_USERS_TITLE=Filter list by selecting one or more users.
 LABEL_COMPANIES=Companies
 FILTER_BY_MULTIPLE_COMPANIES_TITLE=Filter list by selecting one or more companies.
-LABEL_COMPANY_EMPLOYEES=Employees
-FILTER_BY_MULTIPLE_COMPANY_EMPLOYEES_TITLE=Filter list by selecting one or more employees.
+LABEL_EMPLOYEES=Employees
+FILTER_BY_MULTIPLE_EMPLOYEES_TITLE=Filter list by selecting one or more employees.
 ADMIN_ENTER_BRANCH_OFFICE_NUMBER=Enter branch office number:
 ADMIN_SELECT_BRANCH_OFFICE=Select branch office:
 PLEASE_SELECT=Please select
@@ -958,33 +959,41 @@ PAYMENT_TYPE_PREPAYMENT=Prepayment
 PAYMENT_TYPE_INVOICE=Per invoice
 ADMIN_SELECT_SELLER_EMPLOYEE=Choose seller:
 LOGIN_SELECT_SELLER_EMPLOYEE=Please choose a seller:
-ADMIN_LINK_SHOW_COMPANY_EMPLOYEE_TITLE=Shows data of an employee.
-TABLE_SUMMARY_ADMIN_LIST_COMPANY_EMPLOYEES=This table lists all company employees.
-ADMIN_COMPANY_EMPLOYEES_LIST_EMPTY=There are no company employees found in database. Or your search criteria doesn't match anything.
-ADMIN_LIST_COMPANY_EMPLOYEES_HEADER=List all company employees
-ADMIN_LINK_LIST_COMPANY_EMPLOYEE=List employees
-ADMIN_LINK_LIST_COMPANY_EMPLOYEE_TITLE=Lists company employees
-ADMIN_MENU_COMPANY_EMPLOYEE_TITLE=Employees
-ADMIN_ASSIGN_COMPANY_EMPLOYEE_COMPANY=Assign employee to company:
-ADMIN_COMPANY_EMPLOYEE_COMPANY_REQUIRED=You have to assign a company to this employee.
-ADMIN_ASSIGN_COMPANY_EMPLOYEE_BRANCH_OFFICE=Assign employee to branch office:
-ADMIN_ASSIGN_COMPANY_EMPLOYEE_PERSONAL_DATA=Assign personal data to employee:
-ADMIN_ASSIGN_COMPANY_EMPLOYEE_USER_OWNER=Assign user to employee:
-ADMIN_ENTER_COMPANY_EMPLOYEE_EMAIL_ADDRESS=Enter business email address:
-ADMIN_ENTER_COMPANY_EMPLOYEE_STAFF_NUMBER=Enter employee number:
-ADMIN_COMPANY_EMPLOYEE_OTHER_LEGEND=Other data of employee:
-ADMIN_COMPANY_EMPLOYEE_OTHER_LEGEND_TITLE=Here you can enter additional data for the employee. All fields are optional.
+ADMIN_LINK_SHOW_EMPLOYEE_TITLE=Shows data of an employee.
+TABLE_SUMMARY_ADMIN_LIST_EMPLOYEES=This table lists all company employees.
+ADMIN_EMPLOYEES_LIST_EMPTY=There are no company employees found in database. Or your search criteria doesn't match anything.
+ADMIN_LIST_EMPLOYEES_HEADER=List all company employees
+ADMIN_LINK_LIST_EMPLOYEES=Employees
+ADMIN_LINK_LIST_EMPLOYEES_TITLE=Lists company employees
+ADMIN_MENU_EMPLOYEE_TITLE=Employees
+ADMIN_ASSIGN_EMPLOYEE_COMPANY=Assign employee to company:
+ADMIN_EMPLOYEE_COMPANY_REQUIRED=You have to assign a company to this employee.
+ADMIN_ASSIGN_EMPLOYEE_BRANCH_OFFICE=Assign employee to branch office:
+ADMIN_ASSIGN_EMPLOYEE_PERSONAL_DATA=Assign personal data to employee:
+ADMIN_ASSIGN_EMPLOYEE_USER_OWNER=Assign user to employee:
+ADMIN_ENTER_EMPLOYEE_EMAIL_ADDRESS=Enter business email address:
+ADMIN_ENTER_EMPLOYEE_STAFF_NUMBER=Enter employee number:
+ADMIN_EMPLOYEE_OTHER_LEGEND=Other data of employee:
+ADMIN_EMPLOYEE_OTHER_LEGEND_TITLE=Here you can enter additional data for the employee. All fields are optional.
 ADMIN_ENTER_PHONE_EXTENSION=Enter phone extension:
-ADMIN_ASSIGN_COMPANY_EMPLOYEE_DEPARTMENT=Assign department to employee:
-ADMIN_ASSIGN_COMPANY_EMPLOYEE_HEADQUARTERS=Assign headquarters to employee:
-ADMIN_ENTER_COMPANY_EMPLOYEE_MOBILE_NUMBER=Enter business mobile number of employee:
-ADMIN_COMPANY_EMPLOYEE_GENERAL_LEGEND=General data of employee:
-ADMIN_COMPANY_EMPLOYEE_GENERAL_LEGEND_TITLE=You can enter here the general data of the employee.
+ADMIN_ASSIGN_EMPLOYEE_DEPARTMENT=Assign department to employee:
+ADMIN_ASSIGN_EMPLOYEE_HEADQUARTERS=Assign headquarters to employee:
+ADMIN_ENTER_EMPLOYEE_MOBILE_NUMBER=Enter business mobile number of employee:
+ADMIN_EMPLOYEE_GENERAL_LEGEND=General data of employee:
+ADMIN_EMPLOYEE_GENERAL_LEGEND_TITLE=You can enter here the general data of the employee.
 ADMIN_ASSIGNED_BRANCH_OFFICE=Assigned branch office:
 LABEL_BRANCH_OFFICES=Branch offices
 ADMIN_DATE_OF_ISSUE=Issue date:
 ADMIN_PAYMENT_TYPE=Payment type:
 ADMIN_LINK_EDIT_BRANCH_OFFICE_TITLE=Edit of branch office data.
 ADMIN_LINK_DELETE_BRANCH_OFFICE_TITLE=Deletes branch office.
-PAGE_TITLE_ADMIN_LIST_COMPANY_EMPLOYEE=List employees
-CONTENT_TITLE_ADMIN_LIST_COMPANY_EMPLOYEE=List employees:
+PAGE_TITLE_ADMIN_LIST_EMPLOYEE=List employees
+CONTENT_TITLE_ADMIN_LIST_EMPLOYEE=List employees:
+ADMIN_ADD_EMPLOYEE_TITLE=Add company employee
+#Bitte waehlen Sie mindestens das Unternehmen aus und geben SIe mindestens entweder die Mitarbeiternummer ein oder waehlen Sie die persoenlichen Kontaktdaten des Mitarbeiters aus (beides ist auch moeglich).
+ADMIN_ADD_EMPLOYEE_MINIMUM_DATA=Please choose at least assigned company and enter at least employee number or choose personal data (both is possible, too).
+BUTTON_ADMIN_ADD_EMPLOYEE=Add employee
+ADMIN_LIST_BASIC_COMPANY_DATA_HEADER=List all company basic data
+ADMIN_LINK_LIST_DEPARTMENTS=Departments
+ADMIN_LINK_LIST_DEPARTMENTS_TITLE=Lists departments of companies.
+ADMIN_LINK_LIST_OPENING_TIMES=Opening times
diff --git a/web/WEB-INF/faces-config.xml b/web/WEB-INF/faces-config.xml
index 9f610b0c..f1cffdca 100644
--- a/web/WEB-INF/faces-config.xml
+++ b/web/WEB-INF/faces-config.xml
@@ -116,6 +116,14 @@
 			<from-outcome>admin_list_branch_office</from-outcome>
 			<to-view-id>/admin/branch_office/admin_branch_office_list.xhtml</to-view-id>
 		</navigation-case>
+		<navigation-case>
+			<from-outcome>admin_list_department</from-outcome>
+			<to-view-id>/admin/department/admin_department_list.xhtml</to-view-id>
+		</navigation-case>
+		<navigation-case>
+			<from-outcome>admin_list_opening_time</from-outcome>
+			<to-view-id>/admin/opening_time/admin_opening_time_list.xhtml</to-view-id>
+		</navigation-case>
 		<navigation-case>
 			<from-outcome>admin_list_company_employee</from-outcome>
 			<to-view-id>/admin/employee/admin_employee_list.xhtml</to-view-id>
diff --git a/web/WEB-INF/resources/tags/admin/links/mini/employee/admin_employee_links.tpl b/web/WEB-INF/resources/tags/admin/links/mini/employee/admin_employee_links.tpl
index 5a935432..dda35498 100644
--- a/web/WEB-INF/resources/tags/admin/links/mini/employee/admin_employee_links.tpl
+++ b/web/WEB-INF/resources/tags/admin/links/mini/employee/admin_employee_links.tpl
@@ -10,21 +10,21 @@
 		<ul class="navbar-mini">
 			<ui:fragment rendered="#{empty renderShowLink or renderShowLink}">
 				<li class="navlink-mini">
-					<p:link outcome="admin_show_branch_office" value="#{msg.ADMIN_LINK_SHOW_SHORT}" title="#{msg.ADMIN_LINK_SHOW_COMPANY_EMPLOYEE_TITLE}">
+					<p:link outcome="admin_show_branch_office" value="#{msg.ADMIN_LINK_SHOW_SHORT}" title="#{msg.ADMIN_LINK_SHOW_EMPLOYEE_TITLE}">
 						<f:param name="employeeId" value="#{employee.employeeId}" />
 					</p:link>
 				</li>
 			</ui:fragment>
 
 			<li class="navlink-mini">
-				<p:link outcome="admin_edit_branch_office" value="#{msg.ADMIN_LINK_EDIT_SHORT}" title="#{msg.ADMIN_LINK_EDIT_COMPANY_EMPLOYEE_TITLE}">
+				<p:link outcome="admin_edit_branch_office" value="#{msg.ADMIN_LINK_EDIT_SHORT}" title="#{msg.ADMIN_LINK_EDIT_EMPLOYEE_TITLE}">
 					<f:param name="employeeId" value="#{employee.employeeId}" />
 				</p:link>
 			</li>
 
 			<li class="navlink-mini">
 				<p:link outcome="admin_delete_branch_office">
-					<h:outputText styleClass="link-danger" value="#{msg.ADMIN_LINK_DELETE_SHORT}" title="#{msg.ADMIN_LINK_DELETE_COMPANY_EMPLOYEE_TITLE}" />
+					<h:outputText styleClass="link-danger" value="#{msg.ADMIN_LINK_DELETE_SHORT}" title="#{msg.ADMIN_LINK_DELETE_EMPLOYEE_TITLE}" />
 					<f:param name="employeeId" value="#{employee.employeeId}" />
 				</p:link>
 			</li>
diff --git a/web/WEB-INF/templates/admin/admin_menu.tpl b/web/WEB-INF/templates/admin/admin_menu.tpl
index 4db9edbd..aebb6bcb 100644
--- a/web/WEB-INF/templates/admin/admin_menu.tpl
+++ b/web/WEB-INF/templates/admin/admin_menu.tpl
@@ -25,13 +25,12 @@
 				<p:menuitem title="#{msg.ADMIN_LINK_EXPORT_CONTACT_TITLE}" outcome="admin_export_contact" value="#{msg.ADMIN_LINK_EXPORT_CONTACT}" />
 			</p:submenu>
 
-			<p:submenu label="#{msg.ADMIN_MENU_BASIC_COMPANY_DATA_TITLE}" rendered="#{featureController.isFeatureEnabled('basic_company_data')}">
+			<p:submenu label="#{msg.ADMIN_MENU_BUSINESS_CONTACT_TITLE}" rendered="#{featureController.isFeatureEnabled('basic_company_data')}">
 				<p:menuitem title="#{msg.ADMIN_LINK_LIST_BASIC_COMPANY_DATA_TITLE}" outcome="admin_list_basic_company_data" value="#{msg.ADMIN_LINK_LIST_BASIC_COMPANY_DATA}" />
-				<p:menuitem title="#{msg.ADMIN_LINK_LIST_BRANCH_OFFICE_TITLE}" outcome="admin_list_branch_office" value="#{msg.ADMIN_LINK_LIST_BRANCH_OFFICES}" />
-			</p:submenu>
-
-			<p:submenu label="#{msg.ADMIN_MENU_COMPANY_EMPLOYEE_TITLE}" rendered="#{featureController.isFeatureEnabled('company_employee')}">
-				<p:menuitem title="#{msg.ADMIN_LINK_LIST_COMPANY_EMPLOYEE_TITLE}" outcome="admin_list_company_employee" value="#{msg.ADMIN_LINK_LIST_COMPANY_EMPLOYEE}" />
+				<p:menuitem title="#{msg.ADMIN_LINK_LIST_BRANCH_OFFICES_TITLE}" outcome="admin_list_branch_office" value="#{msg.ADMIN_LINK_LIST_BRANCH_OFFICES}" />
+				<p:menuitem title="#{msg.ADMIN_LINK_LIST_DEPARTMENTS_TITLE}" outcome="admin_list_department" value="#{msg.ADMIN_LINK_LIST_DEPARTMENTS}" />
+				<p:menuitem title="#{msg.ADMIN_LINK_LIST_OPENING_TIMES_TITLE}" outcome="admin_list_opening_time" value="#{msg.ADMIN_LINK_LIST_OPENING_TIMES}" />
+				<p:menuitem title="#{msg.ADMIN_LINK_LIST_EMPLOYEES_TITLE}" outcome="admin_list_company_employee" value="#{msg.ADMIN_LINK_LIST_EMPLOYEES}" rendered="#{featureController.isFeatureEnabled('company_employee')}" />
 			</p:submenu>
 
 			<p:submenu label="#{msg.ADMIN_MENU_PHONE_NUMBERS_TITLE}">
diff --git a/web/WEB-INF/templates/admin/basic_company_data/admin_form_basic_company_data.tpl b/web/WEB-INF/templates/admin/basic_company_data/admin_form_basic_company_data.tpl
index bf74c6e4..2d677b60 100644
--- a/web/WEB-INF/templates/admin/basic_company_data/admin_form_basic_company_data.tpl
+++ b/web/WEB-INF/templates/admin/basic_company_data/admin_form_basic_company_data.tpl
@@ -8,257 +8,98 @@
 	xmlns:p="http://primefaces.org/ui">
 
 	<h:panelGroup styleClass="para" layout="block">
-		<fieldset class="fieldset">
-			<legend title="#{msg.ADMIN_BASIC_COMPANY_DATA_LEGEND_TITLE}">
-				<h:outputText value="#{msg.ADMIN_BASIC_COMPANY_DATA_LEGEND}" />
-			</legend>
-
-			<h:panelGroup styleClass="table-row" layout="block">
-				<div class="table-left-medium">
-					<p:outputLabel for="companyName" value="#{msg.ADMIN_BASIC_COMPANY_DATA_COMPANY_NAME}" />
-				</div>
-
-				<div class="table-right-medium">
-					<p:inputText styleClass="input" id="companyName" size="30" maxlength="200" required="true" requiredMessage="#{msg.ADMIN_BASIC_COMPANY_DATA_COMPANY_NAME_REQUIRED}" value="#{adminBasicCompanyDataController.companyName}">
-						<f:validator validatorId="CompanyNameValidator" />
-						<f:attribute name="checkExisting" value="false" />
-					</p:inputText>
-				</div>
-			</h:panelGroup>
-
-			<h:panelGroup styleClass="error-container" layout="block">
-				<p:message for="companyName" />
-			</h:panelGroup>
-
-			<h:panelGroup styleClass="table-row" layout="block">
-				<div class="table-left-medium">
-					<p:outputLabel for="companyEmailAddress" value="#{msg.ADMIN_BASIC_COMPANY_DATA_COMPANY_EMAIL_ADDRESS}" />
-				</div>
-
-				<div class="table-right-medium">
-					<p:inputText styleClass="input" id="companyEmailAddress" size="20" maxlength="255" value="#{adminBasicCompanyDataController.companyEmailAddress}" validatorMessage="#{msg.ENTERED_EMAIL_ADDRESS_IS_INVALID}">
-						<f:validator validatorId="EmailAddressValidator" />
-						<f:attribute name="allowEmptyValue" value="true" />
-					</p:inputText>
-				</div>
-			</h:panelGroup>
-
-			<h:panelGroup styleClass="error-container" layout="block">
-				<p:message for="companyEmailAddress" />
-			</h:panelGroup>
-
-			<h:panelGroup styleClass="table-row" layout="block">
-				<div class="table-left-medium">
-					<p:outputLabel for="companyLogo" value="#{msg.ADMIN_SELECT_BASIC_COMPANY_DATA_COMPANY_LOGO}" />
-				</div>
-
-				<div class="table-right-medium">
-					<widgets:outputMessageBox id="companyLogo" message="#{msg.ADMIN_FEATURE_UNFINISHED_WARNING}" boxStyleClass="message-full" messageStyleClass="alert-warning" />
-				</div>
-			</h:panelGroup>
-
-			<h:panelGroup styleClass="error-container" layout="block">
-				<p:message for="companyLogo" />
-			</h:panelGroup>
-
-			<h:panelGroup styleClass="table-row" layout="block">
-				<div class="table-left-medium">
-					<p:outputLabel for="companyTaxNumber" value="#{msg.ADMIN_BASIC_COMPANY_DATA_COMPANY_TAX_NUMBER}" />
-				</div>
-
-				<div class="table-right-medium">
-					<p:inputText styleClass="input" id="companyTaxNumber" size="30" maxlength="200" value="#{adminBasicCompanyDataController.companyTaxNumber}" />
-				</div>
-			</h:panelGroup>
-
-			<h:panelGroup styleClass="error-container" layout="block">
-				<p:message for="companyTaxNumber" />
-			</h:panelGroup>
-
-			<h:panelGroup styleClass="table-row" layout="block">
-				<div class="table-left-medium">
-					<p:outputLabel for="companyWebsiteUrl" value="#{msg.ADMIN_BASIC_COMPANY_DATA_COMPANY_WEBSITE_URL}" />
-				</div>
-
-				<div class="table-right-medium">
-					<p:inputText styleClass="input" id="companyWebsiteUrl" size="30" maxlength="200" value="#{adminBasicCompanyDataController.companyWebsiteUrl}" validatorMessage="#{msg.URL_NOT_MATCHING_REGULAR_EXPRESSION}">
-						<f:validator validatorId="UrlValidator" />
-						<f:attribute name="allowEmptyValue" value="true" />
-					</p:inputText>
-				</div>
-			</h:panelGroup>
-
-			<h:panelGroup styleClass="error-container" layout="block">
-				<p:message for="companyWebsiteUrl" />
-			</h:panelGroup>
-
-			<h:panelGroup styleClass="table-row" layout="block">
-				<div class="table-left-medium">
-					<p:outputLabel for="companyUserOwner" value="#{msg.ADMIN_SELECT_BASIC_COMPANY_DATA_COMPANY_USER_OWNER}" />
-				</div>
-
-				<div class="table-right-medium">
-					<p:selectOneMenu
-						id="companyUserOwner"
-						value="#{adminBasicCompanyDataController.companyUserOwner}"
-						filter="true"
-						filterMatchMode="contains"
-						>
-						<f:converter converterId="UserConverter" />
-						<f:selectItem itemValue="#{null}" itemLabel="#{msg.NONE_SELECTED}" />
-						<f:selectItems value="#{userController.allUsers()}" var="companyUserOwner" itemValue="#{companyUserOwner}" itemLabel="#{companyUserOwner.userContact.contactFirstName} #{companyUserOwner.userContact.contactFamilyName} (#{companyUserOwner.userName})" />
-					</p:selectOneMenu>
-				</div>
-			</h:panelGroup>
-
-			<h:panelGroup styleClass="error-container" layout="block">
-				<p:message for="companyUserOwner" />
-			</h:panelGroup>
-
-			<h:panelGroup styleClass="table-row" layout="block">
-				<div class="table-left-medium">
-					<p:outputLabel for="companyContactEmployee" value="#{msg.ADMIN_SELECT_BASIC_COMPANY_DATA_COMPANY_CONTACT_EMPLOYEE}" />
-				</div>
-
-				<div class="table-right-medium">
-					<p:selectOneMenu
-						id="companyContactEmployee"
-						value="#{adminBasicCompanyDataController.companyContactEmployee}"
-						filter="true"
-						filterMatchMode="contains"
-						>
-						<f:converter converterId="CompanyEmployeeConverter" />
-						<f:selectItem itemValue="#{null}" itemLabel="#{msg.NONE_SELECTED}" />
-						<f:selectItems value="#{companyEmployeeController.allCompanyEmployees()}" var="companyHeadQuarters" itemValue="#{companyEmployee}" itemLabel="#{companyEmployee.foo}" />
-					</p:selectOneMenu>
-				</div>
-			</h:panelGroup>
-
-			<h:panelGroup styleClass="error-container" layout="block">
-				<p:message for="companyContactEmployee" />
-			</h:panelGroup>
-
-			<h:panelGroup styleClass="table-row" layout="block">
-				<div class="table-left-medium">
-					<p:outputLabel for="companyFounder" value="#{msg.ADMIN_SELECT_BASIC_COMPANY_DATA_COMPANY_FOUNDER}" />
-				</div>
-
-				<div class="table-right-medium">
-					<p:selectOneMenu
-						id="companyFounder"
-						value="#{adminBasicCompanyDataController.companyFounder}"
-						filter="true"
-						filterMatchMode="contains"
-						>
-						<f:converter converterId="CompanyEmployeeConverter" />
-						<f:selectItem itemValue="#{null}" itemLabel="#{msg.NONE_SELECTED}" />
-						<f:selectItems value="#{companyEmployeeController.allCompanyEmployees()}" var="companyHeadQuarters" itemValue="#{companyEmployee}" itemLabel="#{companyEmployee.foo}" />
-					</p:selectOneMenu>
-				</div>
-			</h:panelGroup>
-
-			<h:panelGroup styleClass="error-container" layout="block">
-				<p:message for="companyFounder" />
-			</h:panelGroup>
-
-			<h:panelGroup styleClass="table-row" layout="block">
-				<div class="table-left-medium">
-					<p:outputLabel for="companyHeadQuarters" value="#{msg.ADMIN_SELECT_BASIC_COMPANY_DATA_COMPANY_HEADQUARTERS}" />
-				</div>
-
-				<div class="table-right-medium">
-					<p:selectOneMenu
-						id="companyHeadQuarters"
-						value="#{adminBasicCompanyDataController.companyHeadQuarters}"
-						filter="true"
-						filterMatchMode="contains"
-						>
-						<f:converter converterId="CompanyHeadquartersConverter" />
-						<f:selectItem itemValue="#{null}" itemLabel="#{msg.NONE_SELECTED}" />
-						<f:selectItems value="#{companyHeadquartersController.allCompanyHeadquarters()}" var="companyHeadQuarters" itemValue="#{companyHeadQuarters}" itemLabel="#{companyHeadQuarters.foo}" />
-					</p:selectOneMenu>
-				</div>
-			</h:panelGroup>
-
-			<h:panelGroup styleClass="error-container" layout="block">
-				<p:message for="companyHeadQuarters" />
-			</h:panelGroup>
-
-			<h:panelGroup styleClass="table-row" layout="block">
-				<div class="table-left-medium">
-					<p:outputLabel for="landLineCountry" value="#{msg.ADMIN_BASIC_COMPANY_DATA_PHONE_NUMBER}" />
-				</div>
-
-				<div class="table-right-medium">
-					<widgets:outputCountrySelector id="landLineCountry" styleClass="select divider-right" value="#{adminBasicCompanyDataController.landLineCountry}" />
-
-					<p:inputText styleClass="input divider-right" id="landLineAreaCode" size="5" maxlength="10" value="#{adminBasicCompanyDataController.landLineAreaCode}">
-						<f:validator for="landLineAreaCode" validatorId="PhoneNumberValidator" />
-					</p:inputText>
-
-					<p:inputText styleClass="input" id="landLineNumber" size="10" maxlength="20" value="#{adminBasicCompanyDataController.landLineNumber}">
-						<f:validator for="landLineNumber" validatorId="PhoneNumberValidator" />
-					</p:inputText>
-				</div>
-			</h:panelGroup>
-
-			<h:panelGroup styleClass="error-container" layout="block">
-				<p:message for="landLineCountry" />
-			</h:panelGroup>
-
-			<h:panelGroup styleClass="error-container" layout="block">
-				<p:message for="landLineAreaCode" />
-			</h:panelGroup>
-
-			<h:panelGroup styleClass="error-container" layout="block">
-				<p:message for="landLineNumber" />
-			</h:panelGroup>
-
-			<h:panelGroup styleClass="table-row" layout="block">
-				<div class="table-left-medium">
-					<p:outputLabel for="faxCountry" value="#{msg.ADMIN_BASIC_COMPANY_DATA_FAX_NUMBER}" />
-				</div>
-
-				<div class="table-right-medium">
-					<widgets:outputCountrySelector id="faxCountry" styleClass="select divider-right" value="#{adminBasicCompanyDataController.faxCountry}" />
-
-					<p:inputText styleClass="input divider-right" id="faxAreaCode" size="5" maxlength="10" value="#{adminBasicCompanyDataController.faxAreaCode}">
-						<f:validator for="faxAreaCode" validatorId="PhoneNumberValidator" />
-					</p:inputText>
-
-					<p:inputText styleClass="input" id="faxNumber" size="10" maxlength="20" value="#{adminBasicCompanyDataController.faxNumber}">
-						<f:validator for="faxNumber" validatorId="PhoneNumberValidator" />
-					</p:inputText>
-				</div>
-			</h:panelGroup>
-
-			<h:panelGroup styleClass="error-container" layout="block">
-				<p:message for="faxCountry" />
-			</h:panelGroup>
-
-			<h:panelGroup styleClass="error-container" layout="block">
-				<p:message for="faxAreaCode" />
-			</h:panelGroup>
-
-			<h:panelGroup styleClass="error-container" layout="block">
-				<p:message for="faxNumber" />
-			</h:panelGroup>
-
-			<h:panelGroup styleClass="table-row" layout="block">
-				<div class="table-left-medium">
-					<p:outputLabel for="companyComments" value="#{msg.ADMIN_BASIC_COMPANY_DATA_COMPANY_COMMENTS}" />
-				</div>
-
-				<div class="table-right-medium">
-					<p:inputTextarea
-						styleClass="input"
-						id="companyComments"
-						rows="7"
-						cols="25"
-						value="#{adminBasicCompanyDataController.companyComments}"
-						/>
-				</div>
-			</h:panelGroup>
-		</fieldset>
+		<!--
+		@TODO: title="#{msg.ADMIN_BASIC_COMPANY_DATA_LEGEND_TITLE}"
+		-->
+		<p:fieldset legend="#{msg.ADMIN_BASIC_COMPANY_DATA_LEGEND}">
+			<p:panelGrid columns="2" columnClasses="ui-grid-col-4, ui-grid-col-8" styleClass="table table-full ui-noborder">
+				<p:outputLabel for="companyName" value="#{msg.ADMIN_BASIC_COMPANY_DATA_COMPANY_NAME}" />
+				<p:inputText styleClass="input" id="companyName" size="30" maxlength="200" required="true" requiredMessage="#{msg.ADMIN_BASIC_COMPANY_DATA_COMPANY_NAME_REQUIRED}" value="#{adminBasicCompanyDataController.companyName}">
+					<f:validator validatorId="CompanyNameValidator" />
+					<f:attribute name="checkExisting" value="false" />
+				</p:inputText>
+
+				<p:outputLabel for="companyEmailAddress" value="#{msg.ADMIN_BASIC_COMPANY_DATA_COMPANY_EMAIL_ADDRESS}" />
+				<p:inputText styleClass="input" id="companyEmailAddress" size="20" maxlength="255" value="#{adminBasicCompanyDataController.companyEmailAddress}" validatorMessage="#{msg.ENTERED_EMAIL_ADDRESS_IS_INVALID}">
+					<f:validator validatorId="EmailAddressValidator" />
+					<f:attribute name="allowEmptyValue" value="true" />
+				</p:inputText>
+
+				<p:outputLabel for="companyLogo" value="#{msg.ADMIN_SELECT_BASIC_COMPANY_DATA_COMPANY_LOGO}" />
+				<widgets:outputMessageBox id="companyLogo" message="#{msg.ADMIN_FEATURE_UNFINISHED_WARNING}" boxStyleClass="message-full" messageStyleClass="alert-warning" />
+
+				<p:outputLabel for="companyTaxNumber" value="#{msg.ADMIN_BASIC_COMPANY_DATA_COMPANY_TAX_NUMBER}" />
+				<p:inputText styleClass="input" id="companyTaxNumber" size="30" maxlength="200" value="#{adminBasicCompanyDataController.companyTaxNumber}" />
+
+				<p:outputLabel for="companyWebsiteUrl" value="#{msg.ADMIN_BASIC_COMPANY_DATA_COMPANY_WEBSITE_URL}" />
+				<p:inputText styleClass="input" id="companyWebsiteUrl" size="30" maxlength="200" value="#{adminBasicCompanyDataController.companyWebsiteUrl}" validatorMessage="#{msg.URL_NOT_MATCHING_REGULAR_EXPRESSION}">
+					<f:validator validatorId="UrlValidator" />
+					<f:attribute name="allowEmptyValue" value="true" />
+				</p:inputText>
+
+				<p:outputLabel for="companyUserOwner" value="#{msg.ADMIN_SELECT_BASIC_COMPANY_DATA_COMPANY_USER_OWNER}" />
+				<p:selectOneMenu
+					id="companyUserOwner"
+					value="#{adminBasicCompanyDataController.companyUserOwner}"
+					filter="true"
+					filterMatchMode="contains"
+					>
+					<f:converter converterId="UserConverter" />
+					<f:selectItem itemValue="#{null}" itemLabel="#{msg.NONE_SELECTED}" />
+					<f:selectItems value="#{userController.allUsers()}" var="companyUserOwner" itemValue="#{companyUserOwner}" itemLabel="#{companyUserOwner.userContact.contactFirstName} #{companyUserOwner.userContact.contactFamilyName} (#{companyUserOwner.userName})" />
+				</p:selectOneMenu>
+
+				<p:outputLabel for="companyContactEmployee" value="#{msg.ADMIN_SELECT_BASIC_COMPANY_DATA_COMPANY_CONTACT_EMPLOYEE}" />
+				<p:selectOneMenu
+					id="companyContactEmployee"
+					value="#{adminBasicCompanyDataController.companyContactEmployee}"
+					filter="true"
+					filterMatchMode="contains"
+					>
+					<f:converter converterId="CompanyEmployeeConverter" />
+					<f:selectItem itemValue="#{null}" itemLabel="#{msg.NONE_SELECTED}" />
+					<f:selectItems value="#{companyEmployeeController.allCompanyEmployees()}" var="companyHeadQuarters" itemValue="#{companyEmployee}" itemLabel="#{companyEmployee.foo}" />
+				</p:selectOneMenu>
+
+				<p:outputLabel for="companyFounder" value="#{msg.ADMIN_SELECT_BASIC_COMPANY_DATA_COMPANY_FOUNDER}" />
+				<p:selectOneMenu
+					id="companyFounder"
+					value="#{adminBasicCompanyDataController.companyFounder}"
+					filter="true"
+					filterMatchMode="contains"
+					>
+					<f:converter converterId="CompanyEmployeeConverter" />
+					<f:selectItem itemValue="#{null}" itemLabel="#{msg.NONE_SELECTED}" />
+					<f:selectItems value="#{companyEmployeeController.allCompanyEmployees()}" var="companyHeadQuarters" itemValue="#{companyEmployee}" itemLabel="#{companyEmployee.foo}" />
+				</p:selectOneMenu>
+
+				<p:outputLabel for="companyHeadQuarters" value="#{msg.ADMIN_SELECT_BASIC_COMPANY_DATA_COMPANY_HEADQUARTERS}" />
+				<p:selectOneMenu
+					id="companyHeadQuarters"
+					value="#{adminBasicCompanyDataController.companyHeadQuarters}"
+					filter="true"
+					filterMatchMode="contains"
+					>
+					<f:converter converterId="CompanyHeadquartersConverter" />
+					<f:selectItem itemValue="#{null}" itemLabel="#{msg.NONE_SELECTED}" />
+					<f:selectItems value="#{companyHeadquartersController.allCompanyHeadquarters()}" var="companyHeadQuarters" itemValue="#{companyHeadQuarters}" itemLabel="#{companyHeadQuarters.foo}" />
+				</p:selectOneMenu>
+
+				<p:outputLabel for="landLineCountry" value="#{msg.ADMIN_BASIC_COMPANY_DATA_PHONE_NUMBER}" />
+				<widgets:inputLandLineNumberPanelGrid targetController="#{adminBasicCompanyDataController}" />
+
+				<p:outputLabel for="faxCountry" value="#{msg.ADMIN_BASIC_COMPANY_DATA_FAX_NUMBER}" />
+				<widgets:inputFaxNumberPanelGrid targetController="#{adminBasicCompanyDataController}" />
+
+				<p:outputLabel for="companyComments" value="#{msg.ADMIN_BASIC_COMPANY_DATA_COMPANY_COMMENTS}" />
+				<p:inputTextarea
+					styleClass="input"
+					id="companyComments"
+					rows="7"
+					cols="25"
+					value="#{adminBasicCompanyDataController.companyComments}"
+					/>
+			</p:panelGrid>
+		</p:fieldset>
 	</h:panelGroup>
 </ui:composition>
diff --git a/web/WEB-INF/templates/admin/branch_office/admin_form_branch_office_data.tpl b/web/WEB-INF/templates/admin/branch_office/admin_form_branch_office_data.tpl
index 55036f43..a356ca10 100644
--- a/web/WEB-INF/templates/admin/branch_office/admin_form_branch_office_data.tpl
+++ b/web/WEB-INF/templates/admin/branch_office/admin_form_branch_office_data.tpl
@@ -8,9 +8,9 @@
 	xmlns:p="http://primefaces.org/ui">
 
 	<!--
-	@TODO: title="#{msg.ADMIN_BRANCH_OFFICE_LEGEND_TITLE}"
+	@TODO: title="#{msg.ADMIN_BRANCH_OFFICE_DATA_LEGEND_TITLE}"
 	-->
-	<p:fieldset legend="#{msg.ADMIN_BRANCH_OFFICE_LEGEND}">
+	<p:fieldset legend="#{msg.ADMIN_BRANCH_OFFICE_DATA_LEGEND}">
 		<p:panelGrid layout="grid" columns="2" columnClasses="ui-grid-col-4, ui-grid-col-8" styleClass="table table-full ui-noborder">
 			<p:outputLabel for="branchCompany" value="#{msg.ADMIN_ASSIGN_BRANCH_OFFICE_COMPANY}" />
 			<p:selectOneMenu
diff --git a/web/WEB-INF/templates/admin/employee/admin_form_employee_data.tpl b/web/WEB-INF/templates/admin/employee/admin_form_employee_data.tpl
index 5576e031..01164486 100644
--- a/web/WEB-INF/templates/admin/employee/admin_form_employee_data.tpl
+++ b/web/WEB-INF/templates/admin/employee/admin_form_employee_data.tpl
@@ -8,25 +8,25 @@
 	xmlns:p="http://primefaces.org/ui">
 
 	<!--
-	@TODO title="#{msg.ADMIN_COMPANY_EMPLOYEE_GENERAL_LEGEND_TITLE}"
+	@TODO title="#{msg.ADMIN_EMPLOYEE_GENERAL_LEGEND_TITLE}"
 	-->
-	<p:fieldset legend="#{msg.ADMIN_COMPANY_EMPLOYEE_GENERAL_LEGEND}">
+	<p:fieldset legend="#{msg.ADMIN_EMPLOYEE_GENERAL_LEGEND}">
 		<p:panelGrid layout="grid" columns="2" columnClasses="ui-grid-col-4, ui-grid-col-8" styleClass="table table-full ui-noborder">
-			<p:outputLabel for="employeeCompany" value="#{msg.ADMIN_ASSIGN_COMPANY_EMPLOYEE_COMPANY}" />
+			<p:outputLabel for="employeeCompany" value="#{msg.ADMIN_ASSIGN_EMPLOYEE_COMPANY}" />
 			<p:selectOneMenu
 				id="employeeCompany"
 				value="#{adminCompanyEmployeeController.employeeCompany}"
 				filter="true"
 				filterMatchMode="contains"
 				required="true"
-				requiredMessage="#{msg.ADMIN_COMPANY_EMPLOYEE_COMPANY_REQUIRED}"
+				requiredMessage="#{msg.ADMIN_EMPLOYEE_COMPANY_REQUIRED}"
 				>
 				<f:converter converterId="BasicCompanyDataConverter" />
 				<f:selectItem itemValue="#{null}" itemLabel="#{msg.NONE_SELECTED}" noSelectionOption="true" itemDisabled="true" />
 				<f:selectItems value="#{basicCompanyDataController.allCompanyBasicData()}" var="basicData" itemValue="#{basicData}" itemLabel="#{basicData.companyName}" />
 			</p:selectOneMenu>
 
-			<p:outputLabel for="employeeBranchOffice" value="#{msg.ADMIN_ASSIGN_COMPANY_EMPLOYEE_BRANCH_OFFICE}" />
+			<p:outputLabel for="employeeBranchOffice" value="#{msg.ADMIN_ASSIGN_EMPLOYEE_BRANCH_OFFICE}" />
 			<p:selectOneMenu
 				id="employeeBranchOffice"
 				value="#{adminCompanyEmployeeController.employeeBranchOffice}"
@@ -38,7 +38,7 @@
 				<f:selectItems value="#{branchOfficeController.allBranchOffices()}" var="branchOffice" itemValue="#{branchOffice}" itemLabel="#{beanHelper.renderBranchOffice(branchOffice)}" />
 			</p:selectOneMenu>
 
-			<p:outputLabel for="employeePersonalContact" value="#{msg.ADMIN_ASSIGN_COMPANY_EMPLOYEE_PERSONAL_DATA}" />
+			<p:outputLabel for="employeePersonalContact" value="#{msg.ADMIN_ASSIGN_EMPLOYEE_PERSONAL_DATA}" />
 			<p:selectOneMenu
 				id="employeePersonalContact"
 				value="#{adminCompanyEmployeeController.employeePersonalContact}"
@@ -50,7 +50,7 @@
 				<f:selectItems value="#{contactController.allContacts()}" var="contact" itemValue="#{contact}" itemLabel="#{beanHelper.renderContact(contact)}" />
 			</p:selectOneMenu>
 
-			<p:outputLabel for="employeeUserOwner" value="#{msg.ADMIN_ASSIGN_COMPANY_EMPLOYEE_USER_OWNER}" />
+			<p:outputLabel for="employeeUserOwner" value="#{msg.ADMIN_ASSIGN_EMPLOYEE_USER_OWNER}" />
 			<p:selectOneMenu
 				id="employeeUserOwner"
 				value="#{adminCompanyEmployeeController.employeeUserOwner}"
@@ -62,26 +62,26 @@
 				<f:selectItems value="#{userController.allUsers()}" var="employeeUserOwner" itemValue="#{employeeUserOwner}" itemLabel="#{employeeUserOwner.userContact.contactFirstName} #{employeeUserOwner.userContact.contactFamilyName} (#{employeeUserOwner.userName})" />
 			</p:selectOneMenu>
 
-			<p:outputLabel for="employeeEmailAddress" value="#{msg.ADMIN_ENTER_COMPANY_EMPLOYEE_EMAIL_ADDRESS}" />
+			<p:outputLabel for="employeeEmailAddress" value="#{msg.ADMIN_ENTER_EMPLOYEE_EMAIL_ADDRESS}" />
 			<p:inputText styleClass="input" id="employeeEmailAddress" size="20" maxlength="255" value="#{adminCompanyEmployeeController.employeeEmailAddress}" validatorMessage="#{msg.ENTERED_EMAIL_ADDRESS_IS_INVALID}">
 				<f:validator validatorId="EmailAddressValidator" />
 				<f:attribute name="allowEmptyValue" value="true" />
 			</p:inputText>
 
-			<p:outputLabel for="employeeStaffNumber" value="#{msg.ADMIN_ENTER_COMPANY_EMPLOYEE_STAFF_NUMBER}" />
+			<p:outputLabel for="employeeStaffNumber" value="#{msg.ADMIN_ENTER_EMPLOYEE_STAFF_NUMBER}" />
 			<p:inputText styleClass="input" id="employeeStaffNumber" size="2" maxlength="10" value="#{adminCompanyEmployeeController.employeeStaffNumber}" />
 		</p:panelGrid>
 	</p:fieldset>
 
 	<!--
-	@TODO title="#{msg.ADMIN_COMPANY_EMPLOYEE_OTHER_LEGEND_TITLE}"
+	@TODO title="#{msg.ADMIN_EMPLOYEE_OTHER_LEGEND_TITLE}"
 	-->
-	<p:fieldset legend="#{msg.ADMIN_COMPANY_EMPLOYEE_OTHER_LEGEND}">
+	<p:fieldset legend="#{msg.ADMIN_EMPLOYEE_OTHER_LEGEND}">
 		<p:panelGrid layout="grid" columns="2" columnClasses="ui-grid-col-4, ui-grid-col-8" styleClass="table table-full">
 			<p:outputLabel for="employeePhoneExtension" value="#{msg.ADMIN_ENTER_PHONE_EXTENSION}" />
 			<p:inputText styleClass="input" id="employeePhoneExtension" size="2" maxlength="10" value="#{adminCompanyEmployeeController.employeePhoneExtension}" />
 
-			<p:outputLabel for="employeeDepartment" value="#{msg.ADMIN_ASSIGN_COMPANY_EMPLOYEE_DEPARTMENT}" />
+			<p:outputLabel for="employeeDepartment" value="#{msg.ADMIN_ASSIGN_EMPLOYEE_DEPARTMENT}" />
 			<p:selectOneMenu
 				id="employeeDepartment"
 				value="#{adminCompanyEmployeeController.employeeDepartment}"
@@ -93,7 +93,7 @@
 				<f:selectItems value="#{companyDepartmentController.allDepartments()}" var="department" itemValue="#{department}" itemLabel="#{beanHelper.renderDepartment(department)}" />
 			</p:selectOneMenu>
 
-			<p:outputLabel for="employeeHeadquarters" value="#{msg.ADMIN_ASSIGN_COMPANY_EMPLOYEE_HEADQUARTERS}" />
+			<p:outputLabel for="employeeHeadquarters" value="#{msg.ADMIN_ASSIGN_EMPLOYEE_HEADQUARTERS}" />
 			<p:selectOneMenu
 				id="employeeHeadquarters"
 				value="#{adminCompanyEmployeeController.employeeHeadquarters}"
@@ -105,7 +105,7 @@
 				<f:selectItems value="#{companyHeadquartersController.allHeadquarterss()}" var="headquarters" itemValue="#{headquarters}" itemLabel="#{beanHelper.renderHeadquarters(headquarters)}" />
 			</p:selectOneMenu>
 
-			<p:outputLabel for="mobileNumber" value="#{msg.ADMIN_ENTER_COMPANY_EMPLOYEE_MOBILE_NUMBER}" />
+			<p:outputLabel for="mobileNumber" value="#{msg.ADMIN_ENTER_EMPLOYEE_MOBILE_NUMBER}" />
 			<widgets:inputMobileNumberPanelGrid targetController="#{adminCompanyEmployeeController}" />
 		</p:panelGrid>
 	</p:fieldset>
diff --git a/web/WEB-INF/web.xml b/web/WEB-INF/web.xml
index d471bb7b..3b38721a 100644
--- a/web/WEB-INF/web.xml
+++ b/web/WEB-INF/web.xml
@@ -20,7 +20,7 @@
     <context-param>
         <description>State saving method</description>
         <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
-        <param-value>server</param-value>
+        <param-value>client</param-value>
     </context-param>
     <context-param>
         <description>Development mode for WELD, keep disabled unless really needed. Currently it messes up the website.</description>
diff --git a/web/admin/basic_company_data/admin_basic_company_data_list.xhtml b/web/admin/basic_company_data/admin_basic_company_data_list.xhtml
index 6cc45a2d..1bb9a2ac 100644
--- a/web/admin/basic_company_data/admin_basic_company_data_list.xhtml
+++ b/web/admin/basic_company_data/admin_basic_company_data_list.xhtml
@@ -24,24 +24,51 @@
 				value="#{basicCompanyDataController.allCompanyBasicData()}"
 				tableStyleClass="table table-full"
 				paginator="true"
+				paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
+				filteredValue="#{basicCompanyDataController.filteredBasicCompanyData}"
 				rows="10"
+				reflow="true"
+				resizableColumns="true"
+				rowsPerPageTemplate="5,10,20,50,100"
+				sortMode="multiple"
 				summary="#{msg.TABLE_SUMMARY_ADMIN_LIST_BASIC_COMPANY_DATA}"
 				emptyMessage="#{msg.ADMIN_BASIC_COMPANY_DATA_LIST_EMPTY}"
 				widgetVar="basicDataList"
 				>
-				<p:column>
-					<f:facet name="header">
-						<h:outputText value="#{msg.ADMIN_BASIC_COMPANY_DATA_ID}" />
-					</f:facet>
 
+				<f:facet name="header">
+					<p:row>
+						<p:column>
+							<h:outputText value="#{msg.ADMIN_LIST_BASIC_COMPANY_DATA_HEADER}" />
+						</p:column>
+
+						<p:column>
+							<p:commandButton id="toggler" type="button" value="#{msg.SELECT_SHOWN_COLUMNS}" styleClass="column-selector" />
+							<p:columnToggler datasource="table-list-basic-company-data" trigger="toggler" />
+						</p:column>
+					</p:row>
+				</f:facet>
+
+				<p:column headerText="#{msg.ADMIN_BASIC_COMPANY_DATA_ID}" sortBy="#{basicData.basicDataId}" filterable="false">
 					<p:link outcome="admin_show_basic_data" title="#{msg.ADMIN_LINK_SHOW_BASIC_COMAPNY_DATA_TITLE}" value="#{basicData.basicDataId}">
 						<f:param name="basicDataId" value="#{basicData.basicDataId}" />
 					</p:link>
 				</p:column>
 
-				<p:column>
-					<f:facet name="header">
-						<h:outputText value="#{msg.ADMIN_ASSIGNED_USER}" />
+				<p:column headerText="#{msg.ADMIN_ASSIGNED_USER}" sortBy="#{basicData.companyUserOwner.userName}" filterBy="#{basicData.companyUserOwner}" filterMatchMode="in">
+					<f:facet name="filter">
+						<p:selectCheckboxMenu
+							filter="true"
+							filterMatchMode="contains"
+							label="#{msg.LABEL_USERS}"
+							onchange="PF('basicDataList').filter()"
+							updateLabel="true"
+							title="#{msg.FILTER_BY_MULTIPLE_USERS_TITLE}"
+							>
+							<f:converter converterId="UserConverter" />
+							<f:selectItem itemValue="#{null}" itemLabel="#{msg.NONE_SELECTED}" />
+							<f:selectItems value="#{userController.allUsers()}" var="user" itemValue="#{user}" itemLabel="#{user.userName}" />
+						</p:selectCheckboxMenu>
 					</f:facet>
 
 					<p:link outcome="admin_show_user" title="#{msg.ADMIN_LINK_SHOW_BASIC_COMPANY_DATA_OWNER_USER_TITLE}" value="#{basicData.companyUserOwner.userId}" rendered="#{not empty basicData.companyUserOwner}">
@@ -53,11 +80,7 @@
 					</p:link>
 				</p:column>
 
-				<p:column>
-					<f:facet name="header">
-						<h:outputText value="#{msg.ADMIN_BASIC_COMPANY_DATA_COMPANY_NAME}" />
-					</f:facet>
-
+				<p:column headerText="#{msg.ADMIN_BASIC_COMPANY_DATA_COMPANY_NAME}" sortBy="#{basicData.companyName}" filterBy="#{basicData.companyName}" filterMatchMode="contains">
 					<h:outputLink value="#{basicData.companyWebsiteUrl}" target="_blank" title="#{msg.LINK_COMPANY_WEBSITE_URL_TITLE}" rel="external" rendered="#{not empty basicData.companyWebsiteUrl}">
 						<h:outputText value="#{basicData.companyName}" />
 					</h:outputLink>
@@ -65,9 +88,20 @@
 					<h:outputText value="#{basicData.companyName}" title="#{msg.NO_WEBSITE_URL_ENTERED}" rendered="#{empty basicData.companyWebsiteUrl}" />
 				</p:column>
 
-				<p:column>
-					<f:facet name="header">
-						<h:outputText value="#{msg.ADMIN_CONTACT_PERSON}" />
+				<p:column headerText="#{msg.ADMIN_CONTACT_PERSON}" sortBy="#{basicData.companyContactEmployee}" filterBy="#{basicData.companyContactEmployee}" filterMatchMode="in">
+					<f:facet name="filter">
+						<p:selectCheckboxMenu
+							filter="true"
+							filterMatchMode="contains"
+							label="#{msg.LABEL_EMPLOYEES}"
+							onchange="PF('basicDataList').filter()"
+							updateLabel="true"
+							title="#{msg.FILTER_BY_MULTIPLE_EMPLOYEES_TITLE}"
+							>
+							<f:converter converterId="CompanyEmployeeConverter" />
+							<f:selectItem itemValue="#{null}" itemLabel="#{msg.NONE_SELECTED}" />
+							<f:selectItems value="#{companyEmployeeController.allCompanyEmployees()}" var="employee" itemValue="#{employee}" itemLabel="#{beanHelper.renderEmployee(employee)}" />
+						</p:selectCheckboxMenu>
 					</f:facet>
 
 					<p:link outcome="admin_show_business_employee" title="#{msg.ADMIN_LINK_SHOW_BASIC_COMPANY_DATA_CONTACT_PERSON_TITLE}" value="#{basicData.companyContactEmployee.employeeId}" rendered="#{not empty basicData.companyContactEmployee}">
@@ -79,9 +113,20 @@
 					</p:link>
 				</p:column>
 
-				<p:column>
-					<f:facet name="header">
-						<h:outputText value="#{msg.ADMIN_BASIC_COMPANY_DATA_COMPANY_FOUNDER}" />
+				<p:column headerText="#{msg.ADMIN_BASIC_COMPANY_DATA_COMPANY_FOUNDER}" sortBy="#{basicData.companyFounder}" filterBy="#{basicData.companyFounder}" filterMatchMode="in">
+					<f:facet name="filter">
+						<p:selectCheckboxMenu
+							filter="true"
+							filterMatchMode="contains"
+							label="#{msg.LABEL_EMPLOYEES}"
+							onchange="PF('basicDataList').filter()"
+							updateLabel="true"
+							title="#{msg.FILTER_BY_MULTIPLE_EMPLOYEES_TITLE}"
+							>
+							<f:converter converterId="CompanyEmployeeConverter" />
+							<f:selectItem itemValue="#{null}" itemLabel="#{msg.NONE_SELECTED}" />
+							<f:selectItems value="#{companyEmployeeController.allCompanyEmployees()}" var="employee" itemValue="#{employee}" itemLabel="#{beanHelper.renderEmployee(employee)}" />
+						</p:selectCheckboxMenu>
 					</f:facet>
 
 					<p:link outcome="admin_show_business_employee" title="#{msg.ADMIN_LINK_SHOW_BASIC_COMPANY_DATA_COMPANY_FOUNDER_TITLE}" value="#{basicData.companyFounder.employeeId}" rendered="#{not empty basicData.companyFounder}">
@@ -93,21 +138,13 @@
 					</p:link>
 				</p:column>
 
-				<p:column>
-					<f:facet name="header">
-						<h:outputText value="#{msg.ADMIN_BASIC_COMPANY_DATA_CREATED}" />
-					</f:facet>
-
+				<p:column headerText="#{msg.ADMIN_BASIC_COMPANY_DATA_CREATED}" sortBy="#{basicData.companyCreated}">
 					<h:outputText id="companyCreated" value="#{basicData.companyCreated.time}">
 						<f:convertDateTime for="companyCreated" type="both" timeStyle="short" dateStyle="short" />
 					</h:outputText>
 				</p:column>
 
-				<p:column>
-					<f:facet name="header">
-						<h:outputText value="#{msg.ADMIN_ACTION_LINKS}" />
-					</f:facet>
-
+				<p:column headerText="#{msg.ADMIN_ACTION_LINKS}" sortable="false" filterable="false">
 					<links:outputBasicDataAdminMiniLinks basicData="#{basicData}" />
 				</p:column>
 			</p:dataTable>
@@ -115,11 +152,9 @@
 
 		<h:form id="form-admin-add-basic-company-data">
 			<p:panelGrid columns="1" styleClass="table table-full" layout="grid">
-				<h:panelGroup styleClass="table-header" layout="block">
-					<h4>
-						<h:outputText value="#{msg.ADMIN_ADD_BASIC_COMPANY_DATA_TITLE}" />
-					</h4>
-				</h:panelGroup>
+				<f:facet name="header">
+					<h:outputText value="#{msg.ADMIN_ADD_BASIC_COMPANY_DATA_TITLE}" />
+				</f:facet>
 
 				<h:panelGroup styleClass="para" layout="block">
 					<h:outputText value="#{msg.ADMIN_ADD_BASIC_COMPANY_DATA_MINIMUM_DATA}" />
@@ -127,21 +162,23 @@
 
 				<ui:include src="/WEB-INF/templates/admin/basic_company_data/admin_form_basic_company_data.tpl" />
 
-				<p:panelGrid columns="2" styleClass="table-footer" layout="grid">
-					<p:commandButton
-						styleClass="reset divider-right"
-						type="reset"
-						value="#{msg.BUTTON_RESET_FORM}"
-						/>
-
-					<p:commandButton
-						styleClass="submit"
-						type="submit"
-						value="#{msg.BUTTON_ADMIN_ADD_BASIC_COMPANY_DATA}"
-						action="#{adminBasicCompanyDataController.addBusinessBasicData()}"
-						update=":master:form-list-basic-company-data:table-list-basic-company-data"
-						/>
-				</p:panelGrid>
+				<f:facet name="footer">
+					<p:panelGrid columns="2" layout="grid">
+						<p:commandButton
+							styleClass="reset divider-right"
+							type="reset"
+							value="#{msg.BUTTON_RESET_FORM}"
+							/>
+
+						<p:commandButton
+							styleClass="submit"
+							type="submit"
+							value="#{msg.BUTTON_ADMIN_ADD_BASIC_COMPANY_DATA}"
+							action="#{adminBasicCompanyDataController.addBusinessBasicData()}"
+							update=":master:form-list-basic-company-data:table-list-basic-company-data"
+							/>
+					</p:panelGrid>
+				</f:facet>
 			</p:panelGrid>
 		</h:form>
 	</ui:define>
diff --git a/web/admin/branch_office/admin_branch_office_list.xhtml b/web/admin/branch_office/admin_branch_office_list.xhtml
index f1fb5c35..8d474b63 100644
--- a/web/admin/branch_office/admin_branch_office_list.xhtml
+++ b/web/admin/branch_office/admin_branch_office_list.xhtml
@@ -41,6 +41,7 @@
 						<p:column>
 							<h:outputText value="#{msg.ADMIN_LIST_BRANCH_OFFICES_HEADER}" />
 						</p:column>
+
 						<p:column>
 							<p:commandButton id="toggler" type="button" value="#{msg.SELECT_SHOWN_COLUMNS}" styleClass="column-selector" />
 							<p:columnToggler datasource="table-list-branch-offices" trigger="toggler" />
@@ -48,7 +49,7 @@
 					</p:row>
 				</f:facet>
 
-				<p:column headerText="#{msg.ADMIN_ID_NUMBER}" sortBy="#{branchOffice.branchId}" filterBy="#{branchOffice.branchId}">
+				<p:column headerText="#{msg.ADMIN_ID_NUMBER}" sortBy="#{branchOffice.branchId}" filterable="false">
 					<p:link outcome="admin_show_branch_office" title="#{msg.ADMIN_LINK_SHOW_BRANCH_OFFICE_TITLE}" value="#{branchOffice.branchId}">
 						<f:param name="branchId" value="#{branchOffice.branchId}" />
 					</p:link>
@@ -106,7 +107,7 @@
 
 				<p:column headerText="#{msg.ADMIN_CONTACT_PERSON}" sortBy="#{branchOffice.branchContactEmployee.employeePersonalData.contactFamilyName}" filterBy="#{branchOffice.branchContactEmployee}" filterMatchMode="in">
 					<f:facet name="filter">
-						<p:selectCheckboxMenu filter="true" filterMatchMode="contains" label="#{msg.LABEL_COMPANY_EMPLOYEES}" onchange="PF('branchOfficeTable').filter()" updateLabel="true" title="#{msg.FILTER_BY_MULTIPLE_COMPANY_EMPLOYEES_TITLE}">
+						<p:selectCheckboxMenu filter="true" filterMatchMode="contains" label="#{msg.LABEL_EMPLOYEES}" onchange="PF('branchOfficeTable').filter()" updateLabel="true" title="#{msg.FILTER_BY_MULTIPLE_EMPLOYEES_TITLE}">
 							<f:converter converterId="CompanyEmployeeConverter" />
 							<f:selectItem itemValue="#{null}" itemLabel="#{msg.NONE_SELECTED}" />
 							<f:selectItems value="#{companyEmployeeController.allCompanyEmployees()}" var="employee" itemValue="#{employee}" itemLabel="#{employee.employeePersonalData.contactFirstName} #{employee.employeePersonalData.contactFamilyName}" />
@@ -122,13 +123,13 @@
 					</p:link>
 				</p:column>
 
-				<p:column headerText="#{msg.ADMIN_LIST_ENTRY_CREATED}" sortBy="#{branchOffice.branchCreated}">
+				<p:column headerText="#{msg.ADMIN_LIST_ENTRY_CREATED}" sortBy="#{branchOffice.branchCreated}" filterable="false">
 					<h:outputText id="branchCreated" value="#{branchOffice.branchCreated.time}">
 						<f:convertDateTime for="branchCreated" type="both" timeStyle="short" dateStyle="short" />
 					</h:outputText>
 				</p:column>
 
-				<p:column headerText="#{msg.ADMIN_ACTION_LINKS}" sortable="false">
+				<p:column headerText="#{msg.ADMIN_ACTION_LINKS}" sortable="false" filterable="false">
 					<links:outputBranchOfficeAdminMiniLinks branchOffice="#{branchOffice}" />
 				</p:column>
 			</p:dataTable>
@@ -136,11 +137,9 @@
 
 		<h:form id="form-admin-add-branch-office">
 			<p:panelGrid columns="1" styleClass="table table-full" layout="grid">
-				<h:panelGroup styleClass="table-header" layout="block">
-					<h4>
-						<h:outputText value="#{msg.ADMIN_ADD_BRANCH_OFFICE_TITLE}" />
-					</h4>
-				</h:panelGroup>
+				<f:facet name="header">
+					<h:outputText value="#{msg.ADMIN_ADD_BRANCH_OFFICE_TITLE}" />
+				</f:facet>
 
 				<h:panelGroup styleClass="para" layout="block">
 					<h:outputText value="#{msg.ADMIN_ADD_BRANCH_OFFICE_MINIMUM_DATA}" />
@@ -148,21 +147,23 @@
 
 				<ui:include src="/WEB-INF/templates/admin/branch_office/admin_form_branch_office_data.tpl" />
 
-				<p:panelGrid columns="2" styleClass="table-footer" layout="grid">
-					<p:commandButton
-						styleClass="reset divider-right"
-						type="reset"
-						value="#{msg.BUTTON_RESET_FORM}"
-						/>
-
-					<p:commandButton
-						styleClass="submit"
-						type="submit"
-						value="#{msg.BUTTON_ADMIN_ADD_BASIC_COMPANY_DATA}"
-						action="#{adminBranchOfficeController.addBranchOffice()}"
-						update=":master:form-list-branch-offices:table-list-branch-offices"
-						/>
-				</p:panelGrid>
+				<f:facet name="footer">
+					<p:panelGrid columns="2" layout="grid">
+						<p:commandButton
+							styleClass="reset divider-right"
+							type="reset"
+							value="#{msg.BUTTON_RESET_FORM}"
+							/>
+
+						<p:commandButton
+							styleClass="submit"
+							type="submit"
+							value="#{msg.BUTTON_ADMIN_ADD_BASIC_COMPANY_DATA}"
+							action="#{adminBranchOfficeController.addBranchOffice()}"
+							update=":master:form-list-branch-offices:table-list-branch-offices"
+							/>
+					</p:panelGrid>
+				</f:facet>
 			</p:panelGrid>
 		</h:form>
 	</ui:define>
diff --git a/web/admin/employee/admin_employee_list.xhtml b/web/admin/employee/admin_employee_list.xhtml
index 0c7368a5..c6b8c5df 100644
--- a/web/admin/employee/admin_employee_list.xhtml
+++ b/web/admin/employee/admin_employee_list.xhtml
@@ -9,11 +9,11 @@
 				xmlns:p="http://primefaces.org/ui">
 
 	<ui:define name="document_admin_title">
-		<h:outputText value="#{msg.PAGE_TITLE_ADMIN_LIST_COMPANY_EMPLOYEE}" />
+		<h:outputText value="#{msg.PAGE_TITLE_ADMIN_LIST_EMPLOYEE}" />
 	</ui:define>
 
 	<ui:define name="content_header">
-		<h:outputText value="#{msg.CONTENT_TITLE_ADMIN_LIST_COMPANY_EMPLOYEE}" />
+		<h:outputText value="#{msg.CONTENT_TITLE_ADMIN_LIST_EMPLOYEE}" />
 	</ui:define>
 
 	<ui:define name="content">
@@ -31,31 +31,43 @@
 				resizableColumns="true"
 				rowsPerPageTemplate="5,10,20,50,100"
 				sortMode="multiple"
-				summary="#{msg.TABLE_SUMMARY_ADMIN_LIST_COMPANY_EMPLOYEES}"
-				emptyMessage="#{msg.ADMIN_COMPANY_EMPLOYEES_LIST_EMPTY}"
+				summary="#{msg.TABLE_SUMMARY_ADMIN_LIST_EMPLOYEES}"
+				emptyMessage="#{msg.ADMIN_EMPLOYEES_LIST_EMPTY}"
 				widgetVar="employeeList"
 				>
 
 				<f:facet name="header">
-					<h:outputText value="#{msg.ADMIN_LIST_COMPANY_EMPLOYEES_HEADER}" />
-					<p:commandButton id="toggler" type="button" value="#{msg.SELECT_SHOWN_COLUMNS}" styleClass="column-selector" />
-					<p:columnToggler datasource="table-list-company-employees" trigger="toggler" />
+					<p:row>
+						<p:column>
+							<h:outputText value="#{msg.ADMIN_LIST_EMPLOYEES_HEADER}" />
+						</p:column>
+						<p:column>
+							<p:commandButton id="toggler" type="button" value="#{msg.SELECT_SHOWN_COLUMNS}" styleClass="column-selector" />
+							<p:columnToggler datasource="table-list-company-employees" trigger="toggler" />
+						</p:column>
+					</p:row>
 				</f:facet>
 
-				<p:column headerText="#{msg.ADMIN_ASSIGNED_COMPANY_EMPLOYEE}" sortBy="#{employee.employeeBranchOffice}" filterBy="#{employee.employeeBranchOffice}" filterMatchMode="in">
+				<p:column headerText="#{msg.ADMIN_ID_NUMBER}" sortBy="#{employee.employeeId}" filterable="false">
+					<p:link outcome="admin_show_employee" title="#{msg.ADMIN_LINK_SHOW_EMPLOYEE_TITLE}" value="#{employee.employeeId}">
+						<f:param name="employeeId" value="#{employee.employeeId}" />
+					</p:link>
+				</p:column>
+
+				<p:column headerText="#{msg.ADMIN_ASSIGNED_BRANCH_OFFICE}" sortBy="#{employee.employeeBranchOffice}" filterBy="#{employee.employeeBranchOffice}" filterMatchMode="in">
 					<f:facet name="filter">
-						<p:selectCheckboxMenu filter="true" filterMatchMode="contains" label="#{msg.LABEL_USERS}" onchange="PF('employeeTable').filter()" updateLabel="true" title="#{msg.FILTER_BY_MULTIPLE_COMPANY_EMPLOYEES_TITLE}">
+						<p:selectCheckboxMenu filter="true" filterMatchMode="contains" label="#{msg.LABEL_BRANCH_OFFICES}" onchange="PF('employeeTable').filter()" updateLabel="true" title="#{msg.FILTER_BY_MULTIPLE_EMPLOYEES_TITLE}">
 							<f:converter converterId="BranchOfficeConverter" />
 							<f:selectItem itemValue="#{null}" itemLabel="#{msg.NONE_SELECTED}" />
-							<f:selectItems value="#{branchOfficeController.allBranchOffices()}" var="employeeOffice" itemValue="#{branchOffice}" itemLabel="#{beanHelper.renderBranchOffice(branchOffice)}" />
+							<f:selectItems value="#{branchOfficeController.allBranchOffices()}" var="branchOffice" itemValue="#{branchOffice}" itemLabel="#{beanHelper.renderBranchOffice(branchOffice)}" />
 						</p:selectCheckboxMenu>
 					</f:facet>
 
-					<p:link outcome="admin_show_employee" title="#{msg.ADMIN_LINK_SHOW_COMPANY_EMPLOYEES_COMPANY_EMPLOYEE_TITLE}" value="#{employee.employeeBranchOffice.branchId}" rendered="#{not empty employee.employeeBranchOffice}">
+					<p:link outcome="admin_show_branch_office" title="#{msg.ADMIN_LINK_SHOW_BRANCH_OFFICE_TITLE}" value="#{employee.employeeBranchOffice.branchId}" rendered="#{not empty employee.employeeBranchOffice}">
 						<f:param name="userId" value="#{employee.employeeBranchOffice.branchId}" />
 					</p:link>
 
-					<p:link outcome="admin_assign_employee_owner" title="#{msg.ADMIN_LINK_ASSIGN_COMPANY_EMPLOYEES_COMPANY_EMPLOYEE_TITLE}" value="#{msg.ADMIN_LINK_ASSIGN}" rendered="#{empty employee.employeeBranchOffice}">
+					<p:link outcome="admin_assign_branch_office" title="#{msg.ADMIN_LINK_ASSIGN_BRANCH_OFFICE_TITLE}" value="#{msg.ADMIN_LINK_ASSIGN}" rendered="#{empty employee.employeeBranchOffice}">
 						<f:param name="employeeId" value="#{employee.employeeId}" />
 					</p:link>
 				</p:column>
@@ -69,11 +81,11 @@
 						</p:selectCheckboxMenu>
 					</f:facet>
 
-					<p:link outcome="admin_show_user" title="#{msg.ADMIN_LINK_SHOW_COMPANY_EMPLOYEES_OWNER_USER_TITLE}" value="#{employee.employeeUserOwner.userId}" rendered="#{not empty employee.employeeUserOwner}">
+					<p:link outcome="admin_show_user" title="#{msg.ADMIN_LINK_SHOW_EMPLOYEES_OWNER_USER_TITLE}" value="#{employee.employeeUserOwner.userId}" rendered="#{not empty employee.employeeUserOwner}">
 						<f:param name="userId" value="#{employee.employeeUserOwner.userId}" />
 					</p:link>
 
-					<p:link outcome="admin_assign_employee_owner" title="#{msg.ADMIN_LINK_ASSIGN_COMPANY_EMPLOYEES_OWNER_USER_TITLE}" value="#{msg.ADMIN_LINK_ASSIGN}" rendered="#{empty employee.employeeUserOwner}">
+					<p:link outcome="admin_assign_employee_owner" title="#{msg.ADMIN_LINK_ASSIGN_EMPLOYEES_OWNER_USER_TITLE}" value="#{msg.ADMIN_LINK_ASSIGN}" rendered="#{empty employee.employeeUserOwner}">
 						<f:param name="employeeId" value="#{employee.employeeId}" />
 					</p:link>
 				</p:column>
@@ -99,13 +111,13 @@
 					<h:outputText value="#{msg.NO_EMAIL_ADDRESS_ENTERED}" rendered="#{empty employee.employeeEmailAddress}" />
 				</p:column>
 
-				<p:column headerText="#{msg.ADMIN_LIST_ENTRY_CREATED}" sortBy="#{employee.employeeCreated}">
+				<p:column headerText="#{msg.ADMIN_LIST_ENTRY_CREATED}" sortBy="#{employee.employeeCreated}" filterable="false">
 					<h:outputText id="employeeCreated" value="#{employee.employeeCreated.time}">
 						<f:convertDateTime for="employeeCreated" type="both" timeStyle="short" dateStyle="short" />
 					</h:outputText>
 				</p:column>
 
-				<p:column headerText="#{msg.ADMIN_ACTION_LINKS}" sortable="false">
+				<p:column headerText="#{msg.ADMIN_ACTION_LINKS}" sortable="false" filterable="false">
 					<links:outputCompanyEmployeeAdminMiniLinks employee="#{employee}" />
 				</p:column>
 			</p:dataTable>
@@ -114,28 +126,31 @@
 		<h:form>
 			<p:panelGrid layout="grid" columns="1" styleClass="table table-full">
 				<f:facet name="header">
-					<h:outputText value="#{msg.ADMIN_ADD_COMPANY_EMPLOYEE_TITLE}" />
+					<h:outputText value="#{msg.ADMIN_ADD_EMPLOYEE_TITLE}" />
 				</f:facet>
 
-				<h:outputText value="#{msg.ADMIN_ADD_COMPANY_EMPLOYEE_MINIMUM_DATA}" />
+				<h:outputText value="#{msg.ADMIN_ADD_EMPLOYEE_MINIMUM_DATA}" />
 
 				<h:column>
 					<ui:include src="/WEB-INF/templates/admin/employee/admin_form_employee_data.tpl" />
 				</h:column>
 
 				<f:facet name="footer">
-					<p:commandButton
-						styleClass="reset divider-right"
-						type="reset"
-						value="#{msg.BUTTON_RESET_FORM}"
-						/>
-					<p:commandButton
-						styleClass="submit"
-						type="submit"
-						value="#{msg.BUTTON_ADMIN_ADD_COMPANY_EMPLOYEE}"
-						action="#{adminCompanyEmployeeController.addCompanyEmployee()}"
-						update=":master:form-list-company-employees:table-list-company-employees"
-						/>
+					<p:panelGrid columns="2" layout="grid">
+						<p:commandButton
+							styleClass="reset divider-right"
+							type="reset"
+							value="#{msg.BUTTON_RESET_FORM}"
+							/>
+
+						<p:commandButton
+							styleClass="submit"
+							type="submit"
+							value="#{msg.BUTTON_ADMIN_ADD_EMPLOYEE}"
+							action="#{adminCompanyEmployeeController.addCompanyEmployee()}"
+							update=":master:form-list-company-employees:table-list-company-employees"
+							/>
+					</p:panelGrid>
 				</f:facet>
 			</p:panelGrid>
 		</h:form>
-- 
2.39.5