From 71af705cba00ac4cb88971049f9abe1e2c9f33e9 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Roland=20H=C3=A4der?= <roland@mxchange.org>
Date: Sat, 2 Sep 2017 21:52:41 +0200
Subject: [PATCH] Please rename/cherry-pick: - having to much session-scoped
 beans was a bad design idea anyway - on each new session, "tons" of EJB (JNDI
 lookup + business method invocation)   will occur which will overrun the EJB
 container soon or later - also having JNDI lookup in PostConstruct-annotated
 methods was bad, too   because it "confuses" the web container - while it is
 building proxy objects arround every managed class (like also now  
 converters, JSF 2.3.x only) especially backing beans, there should be no JNDI
   lookup hapening - but initializing some lists for performance reasons is
 the right thing to do - maybe later some other annotation will be used
 instead, but for now it is fine - so let's make this painless and rename all
 session-scoped backing beans and   re-annotate them with RequestScoped for
 now as this is also reduces memory   foot-print
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit

Signed-off-by: Roland Häder <roland@mxchange.org>
---
 ...va => JobsBusinessDataWebRequestBean.java} |  79 +++++++--
 ...JobsBusinessDataWebRequestController.java} |   2 +-
 .../JobsCompanyEmployeeWebRequestBean.java    |  50 ++++--
 .../JobsAdminContactWebRequestBean.java       |   2 +-
 ...an.java => JobsContactWebRequestBean.java} | 101 +++++++-----
 ...a => JobsContactWebRequestController.java} |   2 +-
 ...va => JobsContactPhoneWebRequestBean.java} |  46 +++---
 ...JobsContactPhoneWebRequestController.java} |   2 +-
 .../JobsAdminCountryWebRequestBean.java       |   2 +-
 ...an.java => JobsCountryWebRequestBean.java} |  53 ++++--
 ...a => JobsCountryWebRequestController.java} |   2 +-
 .../helper/JobsWebRequestHelperBean.java      |   4 +-
 .../JobsMobileProviderWebRequestBean.java     |  57 +++++--
 .../phone/JobsAdminPhoneWebRequestBean.java   |   2 +-
 ...Bean.java => JobsPhoneWebRequestBean.java} | 130 ++++++++++++---
 ...ava => JobsPhoneWebRequestController.java} |   2 +-
 .../JobsUserProfileWebRequestBean.java        |   4 +-
 .../user/JobsAdminUserWebRequestBean.java     |  11 +-
 ...nBean.java => JobsUserWebRequestBean.java} | 155 ++++++++----------
 ...java => JobsUserWebRequestController.java} |   2 +-
 ...va => JobsUserActivityWebRequestBean.java} |  37 +++--
 ...JobsUserActivityWebRequestController.java} |   2 +-
 .../JobsConfirmationLinkWebRequestBean.java   |  37 +----
 ...ava => JobsEmailChangeWebRequestBean.java} |  44 +++--
 ... JobsEmailChangeWebRequestController.java} |   2 +-
 .../login/JobsUserLoginWebSessionBean.java    |   4 +-
 ...va => JobsUserRegisterWebRequestBean.java} |  22 +--
 ...JobsUserRegisterWebRequestController.java} |   2 +-
 ...java => JobsResendLinkWebRequestBean.java} |  12 +-
 ...> JobsResendLinkWebRequestController.java} |   2 +-
 .../JobsBusinessContactConverter.java         |   2 +-
 .../JobsCompanyEmployeeConverter.java         |   2 +-
 .../JobsCompanyHeadquartersConverter.java     |   2 +-
 .../contact/JobsContactConverter.java         |   2 +-
 .../country/JobsCountryConverter.java         |   2 +-
 .../converter/fax/JobsFaxNumberConverter.java |   2 +-
 .../landline/JobsLandLineNumberConverter.java |   2 +-
 .../mobile/JobsMobileNumberConverter.java     |   2 +-
 .../JobsMobileProviderConverter.java          |   4 +-
 .../converter/user/JobsUserConverter.java     |   2 +-
 .../basicdata/JobsCompanyNameValidator.java   |   2 +-
 .../JobsEmailAddressValidator.java            |   2 +-
 .../validator/user/JobsUserIdValidator.java   |   2 +-
 web/guest/user/user_list.xhtml                |  34 ++--
 44 files changed, 571 insertions(+), 363 deletions(-)
 rename src/java/org/mxchange/jjobs/beans/business/basicdata/{JobsBusinessDataWebSessionBean.java => JobsBusinessDataWebRequestBean.java} (81%)
 rename src/java/org/mxchange/jjobs/beans/business/basicdata/{JobsBusinessDataWebSessionController.java => JobsBusinessDataWebRequestController.java} (93%)
 rename src/java/org/mxchange/jjobs/beans/contact/{JobsContactWebSessionBean.java => JobsContactWebRequestBean.java} (93%)
 rename src/java/org/mxchange/jjobs/beans/contact/{JobsContactWebSessionController.java => JobsContactWebRequestController.java} (97%)
 rename src/java/org/mxchange/jjobs/beans/contact/phone/{JobsContactPhoneWebSessionBean.java => JobsContactPhoneWebRequestBean.java} (92%)
 rename src/java/org/mxchange/jjobs/beans/contact/phone/{JobsContactPhoneWebSessionController.java => JobsContactPhoneWebRequestController.java} (93%)
 rename src/java/org/mxchange/jjobs/beans/country/{JobsCountryWebApplicationBean.java => JobsCountryWebRequestBean.java} (68%)
 rename src/java/org/mxchange/jjobs/beans/country/{JobsCountryWebApplicationController.java => JobsCountryWebRequestController.java} (93%)
 rename src/java/org/mxchange/jjobs/beans/phone/{JobsPhoneWebApplicationBean.java => JobsPhoneWebRequestBean.java} (87%)
 rename src/java/org/mxchange/jjobs/beans/phone/{JobsPhoneWebApplicationController.java => JobsPhoneWebRequestController.java} (96%)
 rename src/java/org/mxchange/jjobs/beans/user/{JobsUserWebSessionBean.java => JobsUserWebRequestBean.java} (91%)
 rename src/java/org/mxchange/jjobs/beans/user/{JobsUserWebSessionController.java => JobsUserWebRequestController.java} (98%)
 rename src/java/org/mxchange/jjobs/beans/user/activity/{JobsUserActivityWebApplicationBean.java => JobsUserActivityWebRequestBean.java} (95%)
 rename src/java/org/mxchange/jjobs/beans/user/activity/{JobsUserActivityWebApplicationController.java => JobsUserActivityWebRequestController.java} (91%)
 rename src/java/org/mxchange/jjobs/beans/user/email_address/{JobsEmailChangeWebSessionBean.java => JobsEmailChangeWebRequestBean.java} (89%)
 rename src/java/org/mxchange/jjobs/beans/user/email_address/{JobsEmailChangeWebSessionController.java => JobsEmailChangeWebRequestController.java} (94%)
 rename src/java/org/mxchange/jjobs/beans/user/register/{JobsUserRegisterWebSessionBean.java => JobsUserRegisterWebRequestBean.java} (95%)
 rename src/java/org/mxchange/jjobs/beans/user/register/{JobsUserRegisterWebSessionController.java => JobsUserRegisterWebRequestController.java} (93%)
 rename src/java/org/mxchange/jjobs/beans/user/resendlink/{JobsResendLinkWebSessionBean.java => JobsResendLinkWebRequestBean.java} (95%)
 rename src/java/org/mxchange/jjobs/beans/user/resendlink/{JobsResendLinkWebSessionController.java => JobsResendLinkWebRequestController.java} (93%)

diff --git a/src/java/org/mxchange/jjobs/beans/business/basicdata/JobsBusinessDataWebSessionBean.java b/src/java/org/mxchange/jjobs/beans/business/basicdata/JobsBusinessDataWebRequestBean.java
similarity index 81%
rename from src/java/org/mxchange/jjobs/beans/business/basicdata/JobsBusinessDataWebSessionBean.java
rename to src/java/org/mxchange/jjobs/beans/business/basicdata/JobsBusinessDataWebRequestBean.java
index 3a8b29ea..403f3804 100644
--- a/src/java/org/mxchange/jjobs/beans/business/basicdata/JobsBusinessDataWebSessionBean.java
+++ b/src/java/org/mxchange/jjobs/beans/business/basicdata/JobsBusinessDataWebRequestBean.java
@@ -17,11 +17,12 @@
 package org.mxchange.jjobs.beans.business.basicdata;
 
 import java.text.MessageFormat;
+import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import javax.annotation.PostConstruct;
 import javax.ejb.EJB;
-import javax.enterprise.context.SessionScoped;
+import javax.enterprise.context.RequestScoped;
 import javax.enterprise.event.Observes;
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -29,9 +30,9 @@ import org.mxchange.jcontactsbusiness.basicdata.AdminBusinessDataSessionBeanRemo
 import org.mxchange.jcontactsbusiness.basicdata.BusinessBasicData;
 import org.mxchange.jcontactsbusiness.basicdata.BusinessDataSessionBeanRemote;
 import org.mxchange.jcontactsbusiness.events.basicdata.added.ObservableAdminAddedBusinessBasicDataEvent;
+import org.mxchange.jcoreee.jcache.Cached;
 import org.mxchange.jcountry.data.Country;
 import org.mxchange.jjobs.beans.BaseJobsController;
-import org.mxchange.jjobs.beans.user.login.JobsUserLoginWebSessionController;
 
 /**
  * A business contact bean (controller)
@@ -39,8 +40,8 @@ import org.mxchange.jjobs.beans.user.login.JobsUserLoginWebSessionController;
  * @author Roland Häder<roland@mxchange.org>
  */
 @Named ("companyDataController")
-@SessionScoped
-public class JobsBusinessDataWebSessionBean extends BaseJobsController implements JobsBusinessDataWebSessionController {
+@RequestScoped
+public class JobsBusinessDataWebRequestBean extends BaseJobsController implements JobsBusinessDataWebRequestController {
 
 	/**
 	 * Serial number
@@ -56,7 +57,9 @@ public class JobsBusinessDataWebSessionBean extends BaseJobsController implement
 	/**
 	 * A list of all registered companies (globally)
 	 */
-	private final List<BusinessBasicData> businessContacts;
+	@Inject
+	@Cached (cacheName = "basicDataCache")
+	private transient Cache<Long, BusinessBasicData> basicDataCache;
 
 	/**
 	 * EJB for general basic business data purposes
@@ -75,7 +78,7 @@ public class JobsBusinessDataWebSessionBean extends BaseJobsController implement
 	private String companyEmailAddress;
 
 	/**
-	 * Company name
+	 * Company cacheName
 	 */
 	private String companyName;
 
@@ -118,12 +121,9 @@ public class JobsBusinessDataWebSessionBean extends BaseJobsController implement
 	/**
 	 * Constructor
 	 */
-	public JobsBusinessDataWebSessionBean () {
+	public JobsBusinessDataWebRequestBean () {
 		// Call super constructor
 		super();
-
-		// Init list
-		this.businessContacts = new LinkedList<>();
 	}
 
 	/**
@@ -155,7 +155,7 @@ public class JobsBusinessDataWebSessionBean extends BaseJobsController implement
 		}
 
 		// Add it to list
-		this.businessContacts.add(event.getBasicData());
+		this.basicDataCache.put(event.getBasicData().getCompanyDataId(), event.getBasicData());
 	}
 
 	/**
@@ -165,8 +165,23 @@ public class JobsBusinessDataWebSessionBean extends BaseJobsController implement
 	 */
 	@SuppressWarnings ("ReturnOfCollectionOrArrayField")
 	public List<BusinessBasicData> allCompanyBasicData () {
+		// Init list
+		List<BusinessBasicData> list = new LinkedList<>();
+
+		// Get iterator
+		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 this.businessContacts;
+		return list;
 	}
 
 	/**
@@ -206,18 +221,18 @@ public class JobsBusinessDataWebSessionBean extends BaseJobsController implement
 	}
 
 	/**
-	 * Getter for company name
+	 * Getter for company cacheName
 	 * <p>
-	 * @return Company name
+	 * @return Company cacheName
 	 */
 	public String getCompanyName () {
 		return this.companyName;
 	}
 
 	/**
-	 * Setter for company name
+	 * Setter for company cacheName
 	 * <p>
-	 * @param companyName Company name
+	 * @param companyName Company cacheName
 	 */
 	public void setCompanyName (final String companyName) {
 		this.companyName = companyName;
@@ -336,8 +351,36 @@ public class JobsBusinessDataWebSessionBean extends BaseJobsController implement
 	 */
 	@PostConstruct
 	public void initializeList () {
-		// Init user's contact list
-		this.businessContacts.addAll(this.adminBusinessDataBean.allCompanyBasicData());
+		// Is cache there?
+		if (!this.basicDataCache.iterator().hasNext()) {
+			// Get whole list
+			List<BusinessBasicData> list = this.businessDataBean.allCompanyBasicData();
+
+			// Add all
+			for (final Iterator<BusinessBasicData> iterator = list.iterator(); iterator.hasNext();) {
+				// Get next element
+				final BusinessBasicData next = iterator.next();
+
+				// Add it to cache
+				this.basicDataCache.put(next.getCompanyDataId(), next);
+			}
+		}
+	}
+
+	/**
+	 * Clears this bean
+	 */
+	private void clear () {
+		// Clear all data:
+		this.setCompanyComments(null);
+		this.setCompanyEmailAddress(null);
+		this.setCompanyName(null);
+		this.setFaxAreaCode(null);
+		this.setFaxCountry(null);
+		this.setFaxNumber(null);
+		this.setLandLineAreaCode(null);
+		this.setLandLineCountry(null);
+		this.setLandLineNumber(null);
 	}
 
 }
diff --git a/src/java/org/mxchange/jjobs/beans/business/basicdata/JobsBusinessDataWebSessionController.java b/src/java/org/mxchange/jjobs/beans/business/basicdata/JobsBusinessDataWebRequestController.java
similarity index 93%
rename from src/java/org/mxchange/jjobs/beans/business/basicdata/JobsBusinessDataWebSessionController.java
rename to src/java/org/mxchange/jjobs/beans/business/basicdata/JobsBusinessDataWebRequestController.java
index 81c7619c..8e88d333 100644
--- a/src/java/org/mxchange/jjobs/beans/business/basicdata/JobsBusinessDataWebSessionController.java
+++ b/src/java/org/mxchange/jjobs/beans/business/basicdata/JobsBusinessDataWebRequestController.java
@@ -23,6 +23,6 @@ import java.io.Serializable;
  * <p>
  * @author Roland Häder<roland@mxchange.org>
  */
-public interface JobsBusinessDataWebSessionController extends Serializable {
+public interface JobsBusinessDataWebRequestController extends Serializable {
 
 }
diff --git a/src/java/org/mxchange/jjobs/beans/business/employee/JobsCompanyEmployeeWebRequestBean.java b/src/java/org/mxchange/jjobs/beans/business/employee/JobsCompanyEmployeeWebRequestBean.java
index e5f255cf..9db724ff 100644
--- a/src/java/org/mxchange/jjobs/beans/business/employee/JobsCompanyEmployeeWebRequestBean.java
+++ b/src/java/org/mxchange/jjobs/beans/business/employee/JobsCompanyEmployeeWebRequestBean.java
@@ -16,14 +16,18 @@
  */
 package org.mxchange.jjobs.beans.business.employee;
 
+import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import javax.annotation.PostConstruct;
+import javax.cache.Cache;
 import javax.ejb.EJB;
-import javax.enterprise.context.SessionScoped;
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
 import javax.inject.Named;
 import org.mxchange.jcontactsbusiness.employee.CompanyEmployeeSessionBeanRemote;
 import org.mxchange.jcontactsbusiness.employee.Employee;
+import org.mxchange.jcoreee.jcache.Cached;
 import org.mxchange.jjobs.beans.BaseJobsController;
 
 /**
@@ -32,7 +36,7 @@ import org.mxchange.jjobs.beans.BaseJobsController;
  * @author Roland Häder<roland@mxchange.org>
  */
 @Named ("companyEmployeeController")
-@SessionScoped
+@RequestScoped
 public class JobsCompanyEmployeeWebRequestBean extends BaseJobsController implements JobsCompanyEmployeeWebSessionController {
 
 	/**
@@ -49,7 +53,9 @@ public class JobsCompanyEmployeeWebRequestBean extends BaseJobsController implem
 	/**
 	 * List of all company employees
 	 */
-	private final List<Employee> companyEmployees;
+	@Inject
+	@Cached(cacheName = "companyEmployeeCache")
+	private transient Cache<Long, Employee> companyEmployeeCache;
 
 	/**
 	 * Default constructor
@@ -57,9 +63,6 @@ public class JobsCompanyEmployeeWebRequestBean extends BaseJobsController implem
 	public JobsCompanyEmployeeWebRequestBean () {
 		// Call super constructor
 		super();
-
-		// Init list instance
-		this.companyEmployees = new LinkedList<>();
 	}
 
 	/**
@@ -69,7 +72,23 @@ public class JobsCompanyEmployeeWebRequestBean extends BaseJobsController implem
 	 */
 	@SuppressWarnings ("ReturnOfCollectionOrArrayField")
 	public List<Employee> allCompanyEmployees () {
-		return this.companyEmployees;
+		// Init list
+		List<Employee> list = new LinkedList<>();
+
+		// Get iterator
+		Iterator<Cache.Entry<Long, Employee>> iterator = this.companyEmployeeCache.iterator();
+
+		// Loop over all
+		while (iterator.hasNext()) {
+			// Get next entry
+			final Cache.Entry<Long, Employee> next = iterator.next();
+
+			// Add value to list
+			list.add(next.getValue());
+		}
+
+		// Return it
+		return list;
 	}
 
 	/**
@@ -77,11 +96,20 @@ public class JobsCompanyEmployeeWebRequestBean extends BaseJobsController implem
 	 */
 	@PostConstruct
 	public void init () {
-		// Get all entries from remote bean
-		List<Employee> employees = this.companyEmployeeBean.allCompanyEmployees();
+		// Is cache there?
+		if (!this.companyEmployeeCache.iterator().hasNext()) {
+			// Get whole list
+			List<Employee> list = this.companyEmployeeBean.allCompanyEmployees();
+
+			// Add all
+			for (final Iterator<Employee> iterator = list.iterator(); iterator.hasNext();) {
+				// Get next element
+				final Employee next = iterator.next();
 
-		// Copy it to main list
-		this.companyEmployees.addAll(employees);
+				// Add it to cache
+				this.companyEmployeeCache.put(next.getEmployeeId(), next);
+			}
+		}
 	}
 
 }
diff --git a/src/java/org/mxchange/jjobs/beans/contact/JobsAdminContactWebRequestBean.java b/src/java/org/mxchange/jjobs/beans/contact/JobsAdminContactWebRequestBean.java
index 8ea899e9..eb870196 100644
--- a/src/java/org/mxchange/jjobs/beans/contact/JobsAdminContactWebRequestBean.java
+++ b/src/java/org/mxchange/jjobs/beans/contact/JobsAdminContactWebRequestBean.java
@@ -107,7 +107,7 @@ public class JobsAdminContactWebRequestBean extends BaseJobsController implement
 	 * General contact controller
 	 */
 	@Inject
-	private JobsContactWebSessionController contactController;
+	private JobsContactWebRequestController contactController;
 
 	/**
 	 * Country instance
diff --git a/src/java/org/mxchange/jjobs/beans/contact/JobsContactWebSessionBean.java b/src/java/org/mxchange/jjobs/beans/contact/JobsContactWebRequestBean.java
similarity index 93%
rename from src/java/org/mxchange/jjobs/beans/contact/JobsContactWebSessionBean.java
rename to src/java/org/mxchange/jjobs/beans/contact/JobsContactWebRequestBean.java
index 142a4d23..2e795106 100644
--- a/src/java/org/mxchange/jjobs/beans/contact/JobsContactWebSessionBean.java
+++ b/src/java/org/mxchange/jjobs/beans/contact/JobsContactWebRequestBean.java
@@ -25,7 +25,7 @@ import java.util.List;
 import java.util.Objects;
 import javax.annotation.PostConstruct;
 import javax.ejb.EJB;
-import javax.enterprise.context.SessionScoped;
+import javax.enterprise.context.RequestScoped;
 import javax.enterprise.event.Observes;
 import javax.faces.view.facelets.FaceletException;
 import javax.inject.Inject;
@@ -37,9 +37,10 @@ import org.mxchange.jcontacts.contact.UserContact;
 import org.mxchange.jcontacts.contact.title.PersonalTitle;
 import org.mxchange.jcontacts.events.contact.add.ObservableAdminAddedContactEvent;
 import org.mxchange.jcontacts.events.contact.update.ObservableAdminUpdatedContactEvent;
+import org.mxchange.jcoreee.jcache.Cached;
 import org.mxchange.jcountry.data.Country;
 import org.mxchange.jjobs.beans.BaseJobsController;
-import org.mxchange.jjobs.beans.user.JobsUserWebSessionController;
+import org.mxchange.jjobs.beans.user.JobsUserWebRequestController;
 import org.mxchange.jjobs.beans.user.login.JobsUserLoginWebSessionController;
 import org.mxchange.jphone.phonenumbers.fax.DialableFaxNumber;
 import org.mxchange.jphone.phonenumbers.fax.FaxNumber;
@@ -62,8 +63,8 @@ import org.mxchange.juserlogincore.exceptions.UserPasswordMismatchException;
  * @author Roland Häder<roland@mxchange.org>
  */
 @Named ("contactController")
-@SessionScoped
-public class JobsContactWebSessionBean extends BaseJobsController implements JobsContactWebSessionController {
+@RequestScoped
+public class JobsContactWebRequestBean extends BaseJobsController implements JobsContactWebRequestController {
 
 	/**
 	 * Serial number
@@ -99,7 +100,9 @@ public class JobsContactWebSessionBean extends BaseJobsController implements Job
 	/**
 	 * Contact list
 	 */
-	private final List<Contact> contactList;
+	@Inject
+	@Cached (cacheName = "contactsCache")
+	private transient Cache<Long, Contact> contactsCache;
 
 	/**
 	 * Country instance
@@ -114,7 +117,9 @@ public class JobsContactWebSessionBean extends BaseJobsController implements Job
 	/**
 	 * Email address list
 	 */
-	private final List<String> emailAddressList;
+	@Inject
+	@Cached (cacheName = "emailAddressCache")
+	private transient Cache<Long, String> emailAddressCache;
 
 	/**
 	 * Email address repeated
@@ -215,7 +220,7 @@ public class JobsContactWebSessionBean extends BaseJobsController implements Job
 	 * Regular user controller
 	 */
 	@Inject
-	private JobsUserWebSessionController userController;
+	private JobsUserWebRequestController userController;
 
 	/**
 	 * Login bean (controller)
@@ -231,13 +236,9 @@ public class JobsContactWebSessionBean extends BaseJobsController implements Job
 	/**
 	 * Default constructor
 	 */
-	public JobsContactWebSessionBean () {
+	public JobsContactWebRequestBean () {
 		// Call super constructor
 		super();
-
-		// Init lists/maps
-		this.contactList = new LinkedList<>();
-		this.emailAddressList = new LinkedList<>();
 	}
 
 	/**
@@ -278,9 +279,6 @@ public class JobsContactWebSessionBean extends BaseJobsController implements Job
 	 * @param event Event being fired
 	 */
 	public void afterAdminAddedUserEvent (@Observes final ObservableAdminAddedUserEvent event) {
-		// Trace message
-		//* NOISY-DEBUG: */ System.out.println(MessageFormat.format("contactController.afterAdminAddedUserEvent(): event={0} - CALLED!", event)); //NOI18N
-
 		// event should not be null
 		if (null == event) {
 			// Throw NPE
@@ -357,10 +355,7 @@ public class JobsContactWebSessionBean extends BaseJobsController implements Job
 		this.uniqueAddContact(event.getUpdatedContact());
 
 		// Add email address to list
-		this.emailAddressList.add(event.getUpdatedContact().getContactEmailAddress());
-
-		// Trace message
-		//* NOISY-DEBUG: */ System.out.println("contactController.afterAdminUpdatedContactDataEvent(): EXIT!"); //NOI18N
+		this.emailAddressCache.put(event.getUpdatedContact().getContactId(), event.getUpdatedContact().getContactEmailAddress());
 	}
 
 	/**
@@ -453,8 +448,23 @@ public class JobsContactWebSessionBean extends BaseJobsController implements Job
 	@Override
 	@SuppressWarnings ("ReturnOfCollectionOrArrayField")
 	public List<Contact> allContacts () {
-		// Return un-modified list
-		return this.contactList;
+		// Init list
+		List<Contact> list = new LinkedList<>();
+
+		// Get iterator
+		Iterator<Cache.Entry<Long, Contact>> iterator = this.contactsCache.iterator();
+
+		// Loop over all
+		while (iterator.hasNext()) {
+			// Get next entry
+			final Cache.Entry<Long, Contact> next = iterator.next();
+
+			// Add value to list
+			list.add(next.getValue());
+		}
+
+		// Return it
+		return list;
 	}
 
 	@Override
@@ -1014,20 +1024,31 @@ public class JobsContactWebSessionBean extends BaseJobsController implements Job
 	 */
 	@PostConstruct
 	public void init () {
-		// Get full email address list for reducing EJB calls
-		this.emailAddressList.addAll(this.contactBean.getEmailAddressList());
-
 		// Get all contacts
-		List<Contact> allContacts = this.contactBean.getAllContacts();
-
-		// Get full contact list
-		this.contactList.addAll(allContacts);
+		final List<Contact> selectable = new LinkedList<>();
+
+		// Is cache there?
+		if (!this.contactsCache.iterator().hasNext()) {
+			// Get whole list
+			List<Contact> list = this.contactBean.allContacts();
+
+			// Add all
+			for (final Iterator<Contact> iterator = list.iterator(); iterator.hasNext();) {
+				// Get next element
+				final Contact next = iterator.next();
+
+				// Add it to cache
+				this.contactsCache.put(next.getContactId(), next);
+				this.emailAddressCache.put(next.getContactId(), next.getContactEmailAddress());
+				selectable.add(next);
+			}
+		}
 
 		// Get all users
 		List<User> allUsers = this.userController.allUsers();
 
 		// Get iterator
-		Iterator<Contact> iterator = allContacts.iterator();
+		Iterator<Contact> iterator = selectable.iterator();
 
 		// Loop through it
 		while (iterator.hasNext()) {
@@ -1052,7 +1073,7 @@ public class JobsContactWebSessionBean extends BaseJobsController implements Job
 		}
 
 		// Set contact list
-		this.selectableContacts = allContacts;
+		this.selectableContacts = selectable;
 	}
 
 	@Override
@@ -1070,7 +1091,7 @@ public class JobsContactWebSessionBean extends BaseJobsController implements Job
 		}
 
 		// Determine it
-		return ((this.emailAddressList instanceof List) && (this.emailAddressList.contains(contact.getContactEmailAddress())));
+		return ((this.emailAddressCache instanceof List) && (this.emailAddressCache.containsKey(contact.getContactId())));
 	}
 
 	@Override
@@ -1137,13 +1158,13 @@ public class JobsContactWebSessionBean extends BaseJobsController implements Job
 	 */
 	private void addUserNameEmailAddress (final Contact contact) {
 		// Make sure the entry is not added yet
-		if (this.emailAddressList.contains(contact.getContactEmailAddress())) {
+		if (this.emailAddressCache.containsKey(contact.getContactId())) {
 			// Already added
 			throw new IllegalArgumentException(MessageFormat.format("Email address {0} already added.", contact.getContactEmailAddress())); //NOI18N
 		}
 
 		// Add email addres
-		this.emailAddressList.add(contact.getContactEmailAddress());
+		this.emailAddressCache.put(contact.getContactId(), contact.getContactEmailAddress());
 	}
 
 	/**
@@ -1256,13 +1277,13 @@ public class JobsContactWebSessionBean extends BaseJobsController implements Job
 		}
 
 		// Remove from general list
-		if (!this.contactList.remove(contact)) {
+		if (!this.contactsCache.remove(contact.getContactId())) {
 			// Did not remove contact
 			throw new IllegalStateException(MessageFormat.format("contact {0} was not removed.", contact.getContactId())); //NOI18N
 		}
 
 		// Remove from other lists
-		this.emailAddressList.remove(contact.getContactEmailAddress());
+		this.emailAddressCache.remove(contact.getContactId());
 	}
 
 	/**
@@ -1285,23 +1306,23 @@ public class JobsContactWebSessionBean extends BaseJobsController implements Job
 		}
 
 		// Get iterator from list
-		Iterator<Contact> iterator = this.contactList.iterator();
+		Iterator<Cache.Entry<Long, Contact>> iterator = this.contactsCache.iterator();
 
 		// "Walk" through all entries
 		while (iterator.hasNext()) {
 			// Get next element
-			Contact next = iterator.next();
+			Cache.Entry<Long, Contact> next = iterator.next();
 
 			// Is id number the same?
-			if (Objects.equals(contact.getContactId(), next.getContactId())) {
+			if (Objects.equals(contact.getContactId(), next.getKey())) {
 				// Found entry, so remove it and abort
-				this.removeContact(next);
+				this.removeContact(next.getValue());
 				break;
 			}
 		}
 
 		// Add contact to list
-		this.contactList.add(contact);
+		this.contactsCache.put(contact.getContactId(), contact);
 	}
 
 }
diff --git a/src/java/org/mxchange/jjobs/beans/contact/JobsContactWebSessionController.java b/src/java/org/mxchange/jjobs/beans/contact/JobsContactWebRequestController.java
similarity index 97%
rename from src/java/org/mxchange/jjobs/beans/contact/JobsContactWebSessionController.java
rename to src/java/org/mxchange/jjobs/beans/contact/JobsContactWebRequestController.java
index 218736b5..d8dd7d7c 100644
--- a/src/java/org/mxchange/jjobs/beans/contact/JobsContactWebSessionController.java
+++ b/src/java/org/mxchange/jjobs/beans/contact/JobsContactWebRequestController.java
@@ -25,7 +25,7 @@ import org.mxchange.jcontacts.contact.Contact;
  * <p>
  * @author Roland Häder<roland@mxchange.org>
  */
-public interface JobsContactWebSessionController extends Serializable {
+public interface JobsContactWebRequestController extends Serializable {
 
 	/**
 	 * Minimum password length
diff --git a/src/java/org/mxchange/jjobs/beans/contact/phone/JobsContactPhoneWebSessionBean.java b/src/java/org/mxchange/jjobs/beans/contact/phone/JobsContactPhoneWebRequestBean.java
similarity index 92%
rename from src/java/org/mxchange/jjobs/beans/contact/phone/JobsContactPhoneWebSessionBean.java
rename to src/java/org/mxchange/jjobs/beans/contact/phone/JobsContactPhoneWebRequestBean.java
index dcd8e977..865a63cc 100644
--- a/src/java/org/mxchange/jjobs/beans/contact/phone/JobsContactPhoneWebSessionBean.java
+++ b/src/java/org/mxchange/jjobs/beans/contact/phone/JobsContactPhoneWebRequestBean.java
@@ -17,12 +17,10 @@
 package org.mxchange.jjobs.beans.contact.phone;
 
 import java.text.MessageFormat;
-import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Map;
 import java.util.Objects;
-import javax.enterprise.context.SessionScoped;
+import javax.enterprise.context.RequestScoped;
 import javax.enterprise.event.Observes;
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -32,8 +30,8 @@ import org.mxchange.jcontacts.events.contact.update.ObservableAdminUpdatedContac
 import org.mxchange.jcontacts.events.fax.unlinked.ObservableAdminUnlinkedFaxNumberEvent;
 import org.mxchange.jcontacts.events.landline.unlinked.ObservableAdminUnlinkedLandLineNumberEvent;
 import org.mxchange.jcontacts.events.mobile.unlinked.ObservableAdminUnlinkedMobileNumberEvent;
+import org.mxchange.jcoreee.jcache.Cached;
 import org.mxchange.jjobs.beans.BaseJobsController;
-import org.mxchange.jjobs.beans.contact.JobsContactWebSessionController;
 import org.mxchange.jphone.events.fax.created.ObservableCreatedFaxNumberEvent;
 import org.mxchange.jphone.events.landline.created.ObservableCreatedLandLineNumberEvent;
 import org.mxchange.jphone.events.mobile.created.ObservableCreatedMobileNumberEvent;
@@ -42,6 +40,7 @@ import org.mxchange.jphone.phonenumbers.fax.DialableFaxNumber;
 import org.mxchange.jphone.phonenumbers.landline.DialableLandLineNumber;
 import org.mxchange.jphone.phonenumbers.mobile.DialableMobileNumber;
 import org.mxchange.jusercore.events.user.add.ObservableAdminAddedUserEvent;
+import org.mxchange.jjobs.beans.contact.JobsContactWebRequestController;
 
 /**
  * A general contact bean (controller)
@@ -49,8 +48,8 @@ import org.mxchange.jusercore.events.user.add.ObservableAdminAddedUserEvent;
  * @author Roland Häder<roland@mxchange.org>
  */
 @Named ("contactPhoneController")
-@SessionScoped
-public class JobsContactPhoneWebSessionBean extends BaseJobsController implements JobsContactPhoneWebSessionController {
+@RequestScoped
+public class JobsContactPhoneWebRequestBean extends BaseJobsController implements JobsContactPhoneWebRequestController {
 
 	/**
 	 * Serial number
@@ -61,14 +60,16 @@ public class JobsContactPhoneWebSessionBean extends BaseJobsController implement
 	 * General contact controller
 	 */
 	@Inject
-	private JobsContactWebSessionController contactController;
+	private JobsContactWebRequestController contactController;
 
 	/**
 	 * "Cache" for contact's mobile, land-line and fax numbers. Currently one
 	 * per each type is supported. Maybe later this will change into a OneToMany
 	 * relationship (one contact, many numbers).
 	 */
-	private final Map<DialableNumber, List<Contact>> contacts;
+	@Inject
+	@Cached(cacheName = "contactsPhoneCache")
+	private transient Cache<DialableNumber, List<Contact>> contactsPhoneCache;
 
 	/**
 	 * fax number
@@ -88,12 +89,9 @@ public class JobsContactPhoneWebSessionBean extends BaseJobsController implement
 	/**
 	 * Default constructor
 	 */
-	public JobsContactPhoneWebSessionBean () {
+	public JobsContactPhoneWebRequestBean () {
 		// Call super constructor
 		super();
-
-		// Init lists/maps
-		this.contacts = new HashMap<>(10);
 	}
 
 	/**
@@ -169,7 +167,7 @@ public class JobsContactPhoneWebSessionBean extends BaseJobsController implement
 		}
 
 		// Remove it from list
-		this.contacts.remove(event.getUnlinkedFaxNumber());
+		this.contactsPhoneCache.remove(event.getUnlinkedFaxNumber());
 
 		// Clear all data
 		this.clear();
@@ -197,7 +195,7 @@ public class JobsContactPhoneWebSessionBean extends BaseJobsController implement
 		}
 
 		// Remove it from list
-		this.contacts.remove(event.getUnlinkedLandLineNumber());
+		this.contactsPhoneCache.remove(event.getUnlinkedLandLineNumber());
 
 		// Clear all data
 		this.clear();
@@ -225,7 +223,7 @@ public class JobsContactPhoneWebSessionBean extends BaseJobsController implement
 		}
 
 		// Remove it from list
-		this.contacts.remove(event.getUnlinkedMobileNumber());
+		this.contactsPhoneCache.remove(event.getUnlinkedMobileNumber());
 
 		// Clear all data
 		this.clear();
@@ -344,9 +342,9 @@ public class JobsContactPhoneWebSessionBean extends BaseJobsController implement
 		DialableFaxNumber number = this.getFaxNumber();
 
 		// Is cache there?
-		if (this.contacts.containsKey(number)) {
+		if (this.contactsPhoneCache.containsKey(number)) {
 			// Return cached version
-			return this.contacts.get(number);
+			return this.contactsPhoneCache.get(number);
 		} else {
 			// Ask bean
 			List<Contact> list = new LinkedList<>();
@@ -361,7 +359,7 @@ public class JobsContactPhoneWebSessionBean extends BaseJobsController implement
 			}
 
 			// Store result in cache
-			this.contacts.put(number, list);
+			this.contactsPhoneCache.put(number, list);
 
 			// Return now-cached list
 			return list;
@@ -378,9 +376,9 @@ public class JobsContactPhoneWebSessionBean extends BaseJobsController implement
 		DialableLandLineNumber number = this.getLandLineNumber();
 
 		// Is cache there?
-		if (this.contacts.containsKey(number)) {
+		if (this.contactsPhoneCache.containsKey(number)) {
 			// Return cached version
-			return this.contacts.get(number);
+			return this.contactsPhoneCache.get(number);
 		} else {
 			// Ask bean
 			List<Contact> list = new LinkedList<>();
@@ -395,7 +393,7 @@ public class JobsContactPhoneWebSessionBean extends BaseJobsController implement
 			}
 
 			// Store result in cache
-			this.contacts.put(number, list);
+			this.contactsPhoneCache.put(number, list);
 
 			// Return now-cached list
 			return list;
@@ -412,9 +410,9 @@ public class JobsContactPhoneWebSessionBean extends BaseJobsController implement
 		DialableMobileNumber number = this.getMobileNumber();
 
 		// Is cache there?
-		if (this.contacts.containsKey(number)) {
+		if (this.contactsPhoneCache.containsKey(number)) {
 			// Return cached version
-			return this.contacts.get(number);
+			return this.contactsPhoneCache.get(number);
 		} else {
 			// Ask bean
 			List<Contact> list = new LinkedList<>();
@@ -429,7 +427,7 @@ public class JobsContactPhoneWebSessionBean extends BaseJobsController implement
 			}
 
 			// Store result in cache
-			this.contacts.put(number, list);
+			this.contactsPhoneCache.put(number, list);
 
 			// Return now-cached list
 			return list;
diff --git a/src/java/org/mxchange/jjobs/beans/contact/phone/JobsContactPhoneWebSessionController.java b/src/java/org/mxchange/jjobs/beans/contact/phone/JobsContactPhoneWebRequestController.java
similarity index 93%
rename from src/java/org/mxchange/jjobs/beans/contact/phone/JobsContactPhoneWebSessionController.java
rename to src/java/org/mxchange/jjobs/beans/contact/phone/JobsContactPhoneWebRequestController.java
index 09375960..99ae852a 100644
--- a/src/java/org/mxchange/jjobs/beans/contact/phone/JobsContactPhoneWebSessionController.java
+++ b/src/java/org/mxchange/jjobs/beans/contact/phone/JobsContactPhoneWebRequestController.java
@@ -23,6 +23,6 @@ import java.io.Serializable;
  * <p>
  * @author Roland Häder<roland@mxchange.org>
  */
-public interface JobsContactPhoneWebSessionController extends Serializable {
+public interface JobsContactPhoneWebRequestController extends Serializable {
 
 }
diff --git a/src/java/org/mxchange/jjobs/beans/country/JobsAdminCountryWebRequestBean.java b/src/java/org/mxchange/jjobs/beans/country/JobsAdminCountryWebRequestBean.java
index d7c4d9ac..4c5c440b 100644
--- a/src/java/org/mxchange/jjobs/beans/country/JobsAdminCountryWebRequestBean.java
+++ b/src/java/org/mxchange/jjobs/beans/country/JobsAdminCountryWebRequestBean.java
@@ -75,7 +75,7 @@ public class JobsAdminCountryWebRequestBean extends BaseJobsController implement
 	 * Regular country controller
 	 */
 	@Inject
-	private JobsCountryWebApplicationController countryController;
+	private JobsCountryWebRequestController countryController;
 
 	/**
 	 * Local dial prefix
diff --git a/src/java/org/mxchange/jjobs/beans/country/JobsCountryWebApplicationBean.java b/src/java/org/mxchange/jjobs/beans/country/JobsCountryWebRequestBean.java
similarity index 68%
rename from src/java/org/mxchange/jjobs/beans/country/JobsCountryWebApplicationBean.java
rename to src/java/org/mxchange/jjobs/beans/country/JobsCountryWebRequestBean.java
index 967e1abb..2d659480 100644
--- a/src/java/org/mxchange/jjobs/beans/country/JobsCountryWebApplicationBean.java
+++ b/src/java/org/mxchange/jjobs/beans/country/JobsCountryWebRequestBean.java
@@ -17,12 +17,16 @@
 package org.mxchange.jjobs.beans.country;
 
 import java.text.MessageFormat;
+import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.List;
 import javax.annotation.PostConstruct;
 import javax.ejb.EJB;
-import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.context.RequestScoped;
 import javax.enterprise.event.Observes;
+import javax.inject.Inject;
 import javax.inject.Named;
+import org.mxchange.jcoreee.jcache.Cached;
 import org.mxchange.jcountry.data.Country;
 import org.mxchange.jcountry.data.CountrySingletonBeanRemote;
 import org.mxchange.jcountry.events.ObservableAdminAddedCountryEvent;
@@ -34,8 +38,8 @@ import org.mxchange.jjobs.beans.BaseJobsController;
  * @author Roland Häder<roland@mxchange.org>
  */
 @Named ("countryController")
-@ApplicationScoped
-public class JobsCountryWebApplicationBean extends BaseJobsController implements JobsCountryWebApplicationController {
+@RequestScoped
+public class JobsCountryWebRequestBean extends BaseJobsController implements JobsCountryWebRequestController {
 
 	/**
 	 * Serial number
@@ -51,12 +55,14 @@ public class JobsCountryWebApplicationBean extends BaseJobsController implements
 	/**
 	 * List of all countries
 	 */
-	private List<Country> countryList;
+	@Inject
+	@Cached (cacheName = "countryCache")
+	private transient Cache<Long, Country> countryCache;
 
 	/**
 	 * Default constructor
 	 */
-	public JobsCountryWebApplicationBean () {
+	public JobsCountryWebRequestBean () {
 		// Call super constructor
 		super();
 	}
@@ -84,14 +90,29 @@ public class JobsCountryWebApplicationBean extends BaseJobsController implements
 		}
 
 		// Add the event
-		this.countryList.add(event.getAddedCountry());
+		this.countryCache.put(event.getAddedCountry().getCountryId(), event.getAddedCountry());
 	}
 
 	@Override
 	@SuppressWarnings ("ReturnOfCollectionOrArrayField")
 	public List<Country> allCountries () {
-		// Return "cached" version
-		return this.countryList;
+		// Init list
+		List<Country> list = new LinkedList<>();
+
+		// Get iterator
+		Iterator<Cache.Entry<Long, Country>> iterator = this.countryCache.iterator();
+
+		// Loop over all
+		while (iterator.hasNext()) {
+			// Get next entry
+			final Cache.Entry<Long, Country> next = iterator.next();
+
+			// Add value to list
+			list.add(next.getValue());
+		}
+
+		// Return it
+		return list;
 	}
 
 	/**
@@ -99,8 +120,20 @@ public class JobsCountryWebApplicationBean extends BaseJobsController implements
 	 */
 	@PostConstruct
 	public void init () {
-		// "Cache" country list as this will not change so often.
-		this.countryList = this.countryBean.allCountries();
+		// Is cache there?
+		if (!this.countryCache.iterator().hasNext()) {
+			// Get whole list
+			List<Country> list = this.countryBean.allCountries();
+
+			// Add all
+			for (final Iterator<Country> iterator = list.iterator(); iterator.hasNext();) {
+				// Get next element
+				final Country next = iterator.next();
+
+				// Add it to cache
+				this.countryCache.put(next.getCountryId(), next);
+			}
+		}
 	}
 
 }
diff --git a/src/java/org/mxchange/jjobs/beans/country/JobsCountryWebApplicationController.java b/src/java/org/mxchange/jjobs/beans/country/JobsCountryWebRequestController.java
similarity index 93%
rename from src/java/org/mxchange/jjobs/beans/country/JobsCountryWebApplicationController.java
rename to src/java/org/mxchange/jjobs/beans/country/JobsCountryWebRequestController.java
index 98d915fb..31457bb5 100644
--- a/src/java/org/mxchange/jjobs/beans/country/JobsCountryWebApplicationController.java
+++ b/src/java/org/mxchange/jjobs/beans/country/JobsCountryWebRequestController.java
@@ -25,7 +25,7 @@ import org.mxchange.jcountry.data.Country;
  * <p>
  * @author Roland Häder<roland@mxchange.org>
  */
-public interface JobsCountryWebApplicationController extends Serializable {
+public interface JobsCountryWebRequestController extends Serializable {
 
 	/**
 	 * A list of all countries
diff --git a/src/java/org/mxchange/jjobs/beans/helper/JobsWebRequestHelperBean.java b/src/java/org/mxchange/jjobs/beans/helper/JobsWebRequestHelperBean.java
index 34a8014c..d5f1bfab 100644
--- a/src/java/org/mxchange/jjobs/beans/helper/JobsWebRequestHelperBean.java
+++ b/src/java/org/mxchange/jjobs/beans/helper/JobsWebRequestHelperBean.java
@@ -29,7 +29,7 @@ import org.mxchange.jjobs.beans.BaseJobsController;
 import org.mxchange.jjobs.beans.contact.JobsAdminContactWebRequestController;
 import org.mxchange.jjobs.beans.phone.JobsAdminPhoneWebRequestController;
 import org.mxchange.jjobs.beans.user.JobsAdminUserWebRequestController;
-import org.mxchange.jjobs.beans.user.JobsUserWebSessionController;
+import org.mxchange.jjobs.beans.user.JobsUserWebRequestController;
 import org.mxchange.jphone.events.fax.created.CreatedFaxNumberEvent;
 import org.mxchange.jphone.events.fax.created.ObservableCreatedFaxNumberEvent;
 import org.mxchange.jphone.events.landline.created.CreatedLandLineNumberEvent;
@@ -137,7 +137,7 @@ public class JobsWebRequestHelperBean extends BaseJobsController implements Jobs
 	 * Regular user controller
 	 */
 	@Inject
-	private JobsUserWebSessionController userController;
+	private JobsUserWebRequestController userController;
 
 	/**
 	 * Event for when a user instance was created
diff --git a/src/java/org/mxchange/jjobs/beans/mobileprovider/JobsMobileProviderWebRequestBean.java b/src/java/org/mxchange/jjobs/beans/mobileprovider/JobsMobileProviderWebRequestBean.java
index 30ea72ae..cc71c8d4 100644
--- a/src/java/org/mxchange/jjobs/beans/mobileprovider/JobsMobileProviderWebRequestBean.java
+++ b/src/java/org/mxchange/jjobs/beans/mobileprovider/JobsMobileProviderWebRequestBean.java
@@ -17,12 +17,17 @@
 package org.mxchange.jjobs.beans.mobileprovider;
 
 import java.text.MessageFormat;
+import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.List;
 import javax.annotation.PostConstruct;
+import javax.cache.Cache;
 import javax.ejb.EJB;
-import javax.enterprise.context.SessionScoped;
+import javax.enterprise.context.RequestScoped;
 import javax.enterprise.event.Observes;
+import javax.inject.Inject;
 import javax.inject.Named;
+import org.mxchange.jcoreee.jcache.Cached;
 import org.mxchange.jjobs.beans.BaseJobsController;
 import org.mxchange.jphone.events.mobileprovider.added.AdminAddedMobileProviderEvent;
 import org.mxchange.jphone.phonenumbers.mobileprovider.MobileProvider;
@@ -34,7 +39,7 @@ import org.mxchange.jphone.phonenumbers.mobileprovider.MobileProviderSingletonBe
  * @author Roland Häder<roland@mxchange.org>
  */
 @Named ("mobileProviderController")
-@SessionScoped
+@RequestScoped
 public class JobsMobileProviderWebRequestBean extends BaseJobsController implements JobsMobileProviderWebRequestController {
 
 	/**
@@ -43,15 +48,17 @@ public class JobsMobileProviderWebRequestBean extends BaseJobsController impleme
 	private static final long serialVersionUID = 15_869_423_671_950_276L;
 
 	/**
-	 * "Cached" list of mobile providers
+	 * Remote EJB for mobile providers (regular)
 	 */
-	private List<MobileProvider> mobileProviders;
+	@EJB (lookup = "java:global/jjobs-ejb/mobileprovider!org.mxchange.jphone.phonenumbers.mobileprovider.MobileProviderSingletonBeanRemote")
+	private MobileProviderSingletonBeanRemote mobileProviderBean;
 
 	/**
-	 * Remote EJB for mobile providers (regular)
+	 * "Cached" list of mobile providers
 	 */
-	@EJB (lookup = "java:global/jjobs-ejb/mobileprovider!org.mxchange.jphone.phonenumbers.mobileprovider.MobileProviderSingletonBeanRemote")
-	private MobileProviderSingletonBeanRemote mobileRemoteBean;
+	@Inject
+	@Cached (cacheName = "mobileProviderCache")
+	private transient Cache<Long, MobileProvider> mobileProviderCache;
 
 	/**
 	 * Default constructor
@@ -84,13 +91,29 @@ public class JobsMobileProviderWebRequestBean extends BaseJobsController impleme
 		}
 
 		// Add it to the list
-		this.mobileProviders.add(event.getAddedMobileProvider());
+		this.mobileProviderCache.put(event.getAddedMobileProvider().getProviderId(), event.getAddedMobileProvider());
 	}
 
 	@Override
 	@SuppressWarnings ("ReturnOfCollectionOrArrayField")
 	public List<MobileProvider> allMobileProviders () {
-		return this.mobileProviders;
+		// Init list
+		List<MobileProvider> list = new LinkedList<>();
+
+		// Get iterator
+		Iterator<Cache.Entry<Long, MobileProvider>> iterator = this.mobileProviderCache.iterator();
+
+		// Loop over all
+		while (iterator.hasNext()) {
+			// Get next entry
+			final Cache.Entry<Long, MobileProvider> next = iterator.next();
+
+			// Add value to list
+			list.add(next.getValue());
+		}
+
+		// Return it
+		return list;
 	}
 
 	/**
@@ -98,8 +121,20 @@ public class JobsMobileProviderWebRequestBean extends BaseJobsController impleme
 	 */
 	@PostConstruct
 	public void init () {
-		// Init list of mobile providers
-		this.mobileProviders = this.mobileRemoteBean.allMobileProvider();
+		// Is cache there?
+		if (!this.mobileProviderCache.iterator().hasNext()) {
+			// Get whole list
+			List<MobileProvider> list = this.mobileProviderBean.allMobileProviders();
+
+			// Add all
+			for (final Iterator<MobileProvider> iterator = list.iterator(); iterator.hasNext();) {
+				// Get next element
+				final MobileProvider next = iterator.next();
+
+				// Add it to cache
+				this.mobileProviderCache.put(next.getProviderId(), next);
+			}
+		}
 	}
 
 }
diff --git a/src/java/org/mxchange/jjobs/beans/phone/JobsAdminPhoneWebRequestBean.java b/src/java/org/mxchange/jjobs/beans/phone/JobsAdminPhoneWebRequestBean.java
index 571bb103..26ae6a46 100644
--- a/src/java/org/mxchange/jjobs/beans/phone/JobsAdminPhoneWebRequestBean.java
+++ b/src/java/org/mxchange/jjobs/beans/phone/JobsAdminPhoneWebRequestBean.java
@@ -155,7 +155,7 @@ public class JobsAdminPhoneWebRequestBean extends BaseJobsController implements
 	 * Generic hone controller
 	 */
 	@Inject
-	private JobsPhoneWebApplicationController phoneController;
+	private JobsPhoneWebRequestController phoneController;
 
 	/**
 	 * Country (for dial prefix)
diff --git a/src/java/org/mxchange/jjobs/beans/phone/JobsPhoneWebApplicationBean.java b/src/java/org/mxchange/jjobs/beans/phone/JobsPhoneWebRequestBean.java
similarity index 87%
rename from src/java/org/mxchange/jjobs/beans/phone/JobsPhoneWebApplicationBean.java
rename to src/java/org/mxchange/jjobs/beans/phone/JobsPhoneWebRequestBean.java
index 664ca383..c945b114 100644
--- a/src/java/org/mxchange/jjobs/beans/phone/JobsPhoneWebApplicationBean.java
+++ b/src/java/org/mxchange/jjobs/beans/phone/JobsPhoneWebRequestBean.java
@@ -17,13 +17,15 @@
 package org.mxchange.jjobs.beans.phone;
 
 import java.text.MessageFormat;
+import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Objects;
 import javax.annotation.PostConstruct;
 import javax.ejb.EJB;
-import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.context.RequestScoped;
 import javax.enterprise.event.Observes;
+import javax.inject.Inject;
 import javax.inject.Named;
 import org.mxchange.jcontacts.contact.Contact;
 import org.mxchange.jcontacts.events.contact.add.ObservableAdminAddedContactEvent;
@@ -31,6 +33,7 @@ import org.mxchange.jcontacts.events.contact.update.ObservableAdminUpdatedContac
 import org.mxchange.jcontacts.events.fax.linked.ObservableAdminLinkedFaxNumberEvent;
 import org.mxchange.jcontacts.events.landline.linked.ObservableAdminLinkedLandLineNumberEvent;
 import org.mxchange.jcontacts.events.mobile.linked.ObservableAdminLinkedMobileNumberEvent;
+import org.mxchange.jcoreee.jcache.Cached;
 import org.mxchange.jjobs.beans.BaseJobsController;
 import org.mxchange.jphone.events.fax.deleted.AdminDeletedFaxNumberEvent;
 import org.mxchange.jphone.events.fax.updated.AdminUpdatedFaxNumberEvent;
@@ -50,8 +53,8 @@ import org.mxchange.jusercore.events.user.add.ObservableAdminAddedUserEvent;
  * @author Roland Häder<roland@mxchange.org>
  */
 @Named ("phoneController")
-@ApplicationScoped
-public class JobsPhoneWebApplicationBean extends BaseJobsController implements JobsPhoneWebApplicationController {
+@RequestScoped
+public class JobsPhoneWebRequestBean extends BaseJobsController implements JobsPhoneWebRequestController {
 
 	/**
 	 * Serial number
@@ -61,17 +64,23 @@ public class JobsPhoneWebApplicationBean extends BaseJobsController implements J
 	/**
 	 * All fax numbers
 	 */
-	private final List<DialableFaxNumber> faxNumbers;
+	@Inject
+	@Cached(cacheName = "faxNumberCache")
+	private transient Cache<Long, DialableFaxNumber> faxNumberCache;
 
 	/**
 	 * All land-line numbers
 	 */
-	private final List<DialableLandLineNumber> landLineNumbers;
+	@Inject
+	@Cached(cacheName = "landLineNumberCache")
+	private transient Cache<Long, DialableLandLineNumber> landLineNumberCache;
 
 	/**
 	 * All mobile numbers
 	 */
-	private final List<DialableMobileNumber> mobileNumbers;
+	@Inject
+	@Cached(cacheName = "mobileNumberCache")
+	private transient Cache<Long, DialableMobileNumber> mobileNumberCache;
 
 	/**
 	 * General EJB for phone numbers
@@ -82,14 +91,9 @@ public class JobsPhoneWebApplicationBean extends BaseJobsController implements J
 	/**
 	 * Default constructor
 	 */
-	public JobsPhoneWebApplicationBean () {
+	public JobsPhoneWebRequestBean () {
 		// Call super constructor
 		super();
-
-		// Init all lists
-		this.mobileNumbers = new LinkedList<>();
-		this.faxNumbers = new LinkedList<>();
-		this.landLineNumbers = new LinkedList<>();
 	}
 
 	/**
@@ -478,19 +482,67 @@ public class JobsPhoneWebApplicationBean extends BaseJobsController implements J
 	@Override
 	@SuppressWarnings ("ReturnOfCollectionOrArrayField")
 	public List<DialableFaxNumber> allFaxNumbers () {
-		return this.faxNumbers;
+		// Init list
+		List<DialableFaxNumber> list = new LinkedList<>();
+
+		// Get iterator
+		Iterator<Cache.Entry<Long, DialableFaxNumber>> iterator = this.faxNumberCache.iterator();
+
+		// Loop over all
+		while (iterator.hasNext()) {
+			// Get next entry
+			final Cache.Entry<Long, DialableFaxNumber> next = iterator.next();
+
+			// Add value to list
+			list.add(next.getValue());
+		}
+
+		// Return it
+		return list;
 	}
 
 	@Override
 	@SuppressWarnings ("ReturnOfCollectionOrArrayField")
 	public List<DialableLandLineNumber> allLandLineNumbers () {
-		return this.landLineNumbers;
+		// Init list
+		List<DialableLandLineNumber> list = new LinkedList<>();
+
+		// Get iterator
+		Iterator<Cache.Entry<Long, DialableLandLineNumber>> iterator = this.landLineNumberCache.iterator();
+
+		// Loop over all
+		while (iterator.hasNext()) {
+			// Get next entry
+			final Cache.Entry<Long, DialableLandLineNumber> next = iterator.next();
+
+			// Add value to list
+			list.add(next.getValue());
+		}
+
+		// Return it
+		return list;
 	}
 
 	@Override
 	@SuppressWarnings ("ReturnOfCollectionOrArrayField")
 	public List<DialableMobileNumber> allMobileNumbers () {
-		return this.mobileNumbers;
+		// Init list
+		List<DialableMobileNumber> list = new LinkedList<>();
+
+		// Get iterator
+		Iterator<Cache.Entry<Long, DialableMobileNumber>> iterator = this.mobileNumberCache.iterator();
+
+		// Loop over all
+		while (iterator.hasNext()) {
+			// Get next entry
+			final Cache.Entry<Long, DialableMobileNumber> next = iterator.next();
+
+			// Add value to list
+			list.add(next.getValue());
+		}
+
+		// Return it
+		return list;
 	}
 
 	/**
@@ -498,10 +550,50 @@ public class JobsPhoneWebApplicationBean extends BaseJobsController implements J
 	 */
 	@PostConstruct
 	public void init () {
-		// All phone numbers
-		this.allMobileNumbers().addAll(this.phoneBean.allMobileNumbers());
-		this.allFaxNumbers().addAll(this.phoneBean.allFaxNumbers());
-		this.allLandLineNumbers().addAll(this.phoneBean.allLandLineNumbers());
+		// Is cache there?
+		if (!this.faxNumberCache.iterator().hasNext()) {
+			// Get whole list
+			List<DialableFaxNumber> list = this.phoneBean.allFaxNumbers();
+
+			// Add all
+			for (final Iterator<DialableFaxNumber> iterator = list.iterator(); iterator.hasNext();) {
+				// Get next element
+				final DialableFaxNumber next = iterator.next();
+
+				// Add it to cache
+				this.faxNumberCache.put(next.getPhoneId(), next);
+			}
+		}
+
+		// Is cache there?
+		if (!this.landLineNumberCache.iterator().hasNext()) {
+			// Get whole list
+			List<DialableLandLineNumber> list = this.phoneBean.allLandLineNumbers();
+
+			// Add all
+			for (final Iterator<DialableLandLineNumber> iterator = list.iterator(); iterator.hasNext();) {
+				// Get next element
+				final DialableLandLineNumber next = iterator.next();
+
+				// Add it to cache
+				this.landLineNumberCache.put(next.getPhoneId(), next);
+			}
+		}
+
+		// Is cache there?
+		if (!this.mobileNumberCache.iterator().hasNext()) {
+			// Get whole list
+			List<DialableMobileNumber> list = this.phoneBean.allMobileNumbers();
+
+			// Add all
+			for (final Iterator<DialableMobileNumber> iterator = list.iterator(); iterator.hasNext();) {
+				// Get next element
+				final DialableMobileNumber next = iterator.next();
+
+				// Add it to cache
+				this.mobileNumberCache.put(next.getPhoneId(), next);
+			}
+		}
 	}
 
 	/**
diff --git a/src/java/org/mxchange/jjobs/beans/phone/JobsPhoneWebApplicationController.java b/src/java/org/mxchange/jjobs/beans/phone/JobsPhoneWebRequestController.java
similarity index 96%
rename from src/java/org/mxchange/jjobs/beans/phone/JobsPhoneWebApplicationController.java
rename to src/java/org/mxchange/jjobs/beans/phone/JobsPhoneWebRequestController.java
index 93727ed8..3df407b0 100644
--- a/src/java/org/mxchange/jjobs/beans/phone/JobsPhoneWebApplicationController.java
+++ b/src/java/org/mxchange/jjobs/beans/phone/JobsPhoneWebRequestController.java
@@ -28,7 +28,7 @@ import org.mxchange.jphone.phonenumbers.mobile.DialableMobileNumber;
  * <p>
  * @author Roland Häder<roland@mxchange.org>
  */
-public interface JobsPhoneWebApplicationController extends Serializable {
+public interface JobsPhoneWebRequestController extends Serializable {
 
 	/**
 	 * Returns a list of all mobile numbers. For performance reasons, the
diff --git a/src/java/org/mxchange/jjobs/beans/profile/JobsUserProfileWebRequestBean.java b/src/java/org/mxchange/jjobs/beans/profile/JobsUserProfileWebRequestBean.java
index f78c697d..68488d2e 100644
--- a/src/java/org/mxchange/jjobs/beans/profile/JobsUserProfileWebRequestBean.java
+++ b/src/java/org/mxchange/jjobs/beans/profile/JobsUserProfileWebRequestBean.java
@@ -23,11 +23,11 @@ import javax.faces.view.facelets.FaceletException;
 import javax.inject.Inject;
 import javax.inject.Named;
 import org.mxchange.jjobs.beans.BaseJobsController;
-import org.mxchange.jjobs.beans.user.JobsUserWebSessionController;
 import org.mxchange.jjobs.beans.user.login.JobsUserLoginWebSessionController;
 import org.mxchange.jusercore.exceptions.UserNotFoundException;
 import org.mxchange.jusercore.model.user.User;
 import org.mxchange.jusercore.model.user.profilemodes.ProfileMode;
+import org.mxchange.jjobs.beans.user.JobsUserWebRequestController;
 
 /**
  * A web request bean for user profiles
@@ -47,7 +47,7 @@ public class JobsUserProfileWebRequestBean extends BaseJobsController implements
 	 * User controller
 	 */
 	@Inject
-	private JobsUserWebSessionController userController;
+	private JobsUserWebRequestController userController;
 
 	/**
 	 * Login controller
diff --git a/src/java/org/mxchange/jjobs/beans/user/JobsAdminUserWebRequestBean.java b/src/java/org/mxchange/jjobs/beans/user/JobsAdminUserWebRequestBean.java
index b6a1c79c..eb78c032 100644
--- a/src/java/org/mxchange/jjobs/beans/user/JobsAdminUserWebRequestBean.java
+++ b/src/java/org/mxchange/jjobs/beans/user/JobsAdminUserWebRequestBean.java
@@ -33,7 +33,7 @@ import org.mxchange.jcontacts.contact.Contact;
 import org.mxchange.jcoreee.utils.FacesUtils;
 import org.mxchange.jjobs.beans.BaseJobsController;
 import org.mxchange.jjobs.beans.contact.JobsAdminContactWebRequestController;
-import org.mxchange.jjobs.beans.contact.JobsContactWebSessionController;
+import org.mxchange.jjobs.beans.contact.JobsContactWebRequestController;
 import org.mxchange.jjobs.beans.localization.JobsLocalizationSessionController;
 import org.mxchange.jusercore.events.user.add.AdminAddedUserEvent;
 import org.mxchange.jusercore.events.user.add.ObservableAdminAddedUserEvent;
@@ -107,7 +107,7 @@ public class JobsAdminUserWebRequestBean extends BaseJobsController implements J
 	 * Regular contact controller
 	 */
 	@Inject
-	private JobsContactWebSessionController contactController;
+	private JobsContactWebRequestController contactController;
 
 	/**
 	 * Event being fired when admin has deleted user
@@ -144,7 +144,7 @@ public class JobsAdminUserWebRequestBean extends BaseJobsController implements J
 	 * Regular user controller
 	 */
 	@Inject
-	private JobsUserWebSessionController userController;
+	private JobsUserWebRequestController userController;
 
 	/**
 	 * Delete reason
@@ -214,7 +214,6 @@ public class JobsAdminUserWebRequestBean extends BaseJobsController implements J
 	 * @return Redirect outcome
 	 */
 	public String addUser () {
-		System.out.println("addUser: this.contact=" + this.getContact());
 		// As the form cannot validate the data (required="true"), check it here
 		if (this.getUserName() == null) {
 			// Throw NPE
@@ -277,7 +276,7 @@ public class JobsAdminUserWebRequestBean extends BaseJobsController implements J
 			return ""; //NOI18N
 		} else if ((this.getUserPassword() == null && (this.getUserPasswordRepeat() == null)) || ((this.getUserPassword().isEmpty()) && (this.getUserPasswordRepeat().isEmpty()))) {
 			// Empty password entered, then generate one
-			password = UserLoginUtils.createRandomPassword(JobsUserWebSessionController.MINIMUM_PASSWORD_LENGTH);
+			password = UserLoginUtils.createRandomPassword(JobsUserWebRequestController.MINIMUM_PASSWORD_LENGTH);
 		} else if (!this.isSamePasswordEntered()) {
 			// Both passwords don't match
 			throw new FaceletException(new UserPasswordRepeatMismatchException(newUser));
@@ -288,7 +287,7 @@ public class JobsAdminUserWebRequestBean extends BaseJobsController implements J
 
 		// The password should not be null and at least 5 characters long
 		assert (password != null) : "password is null"; //NOI18N
-		assert (password.length() >= JobsUserWebSessionController.MINIMUM_PASSWORD_LENGTH) : "Password is not long enough."; //NOI18N
+		assert (password.length() >= JobsUserWebRequestController.MINIMUM_PASSWORD_LENGTH) : "Password is not long enough."; //NOI18N
 
 		// Encrypt password and set it
 		newUser.setUserEncryptedPassword(UserLoginUtils.encryptPassword(password));
diff --git a/src/java/org/mxchange/jjobs/beans/user/JobsUserWebSessionBean.java b/src/java/org/mxchange/jjobs/beans/user/JobsUserWebRequestBean.java
similarity index 91%
rename from src/java/org/mxchange/jjobs/beans/user/JobsUserWebSessionBean.java
rename to src/java/org/mxchange/jjobs/beans/user/JobsUserWebRequestBean.java
index 5c9c1a9c..435417fc 100644
--- a/src/java/org/mxchange/jjobs/beans/user/JobsUserWebSessionBean.java
+++ b/src/java/org/mxchange/jjobs/beans/user/JobsUserWebRequestBean.java
@@ -18,6 +18,7 @@ package org.mxchange.jjobs.beans.user;
 
 import java.text.MessageFormat;
 import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Locale;
 import java.util.Objects;
@@ -33,8 +34,9 @@ import javax.inject.Inject;
 import javax.inject.Named;
 import org.mxchange.jcontacts.contact.Contact;
 import org.mxchange.jcoreee.events.locale.ObservableLocaleChangeEvent;
+import org.mxchange.jcoreee.jcache.Cached;
 import org.mxchange.jjobs.beans.BaseJobsController;
-import org.mxchange.jjobs.beans.contact.JobsContactWebSessionController;
+import org.mxchange.jjobs.beans.contact.JobsContactWebRequestController;
 import org.mxchange.jjobs.beans.features.JobsFeaturesWebApplicationController;
 import org.mxchange.jjobs.beans.localization.JobsLocalizationSessionController;
 import org.mxchange.jjobs.beans.user.login.JobsUserLoginWebSessionController;
@@ -69,7 +71,7 @@ import org.mxchange.juserlogincore.login.UserLoginUtils;
  */
 @Named ("userController")
 @SessionScoped
-public class JobsUserWebSessionBean extends BaseJobsController implements JobsUserWebSessionController {
+public class JobsUserWebRequestBean extends BaseJobsController implements JobsUserWebRequestController {
 
 	/**
 	 * Serial number
@@ -80,7 +82,7 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs
 	 * General contact controller
 	 */
 	@Inject
-	private JobsContactWebSessionController contactController;
+	private JobsContactWebRequestController contactController;
 
 	/**
 	 * Features controller
@@ -113,14 +115,16 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs
 	private UserSessionBeanRemote userBean;
 
 	/**
-	 * User id
+	 * A list of all user profiles
 	 */
-	private Long userId;
+	@Inject
+	@Cached (cacheName = "userCache")
+	private transient Cache<Long, User> userCache;
 
 	/**
-	 * A list of all user profiles
+	 * User id
 	 */
-	private List<User> userList;
+	private Long userId;
 
 	/**
 	 * Login controller (bean)
@@ -136,7 +140,9 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs
 	/**
 	 * User name list
 	 */
-	private List<String> userNameList;
+	@Inject
+	@Cached (cacheName = "userNameCache")
+	private transient Cache<Long, String> userNameCache;
 
 	/**
 	 * User password (clear-text from web form)
@@ -153,18 +159,10 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs
 	 */
 	private ProfileMode userProfileMode;
 
-	/**
-	 * A list of all public user profiles
-	 * <p>
-	 * @TODO Hmm, makes that sense? Having visible user list in current
-	 * (session-scoped) user's visible user list?
-	 */
-	private List<User> visibleUserList;
-
 	/**
 	 * Default constructor
 	 */
-	public JobsUserWebSessionBean () {
+	public JobsUserWebRequestBean () {
 		// Call super constructor
 		super();
 	}
@@ -438,12 +436,6 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs
 
 		// Copy all data to this bean
 		this.copyUser(loggedInUser);
-
-		// Is the user visible?
-		if (Objects.equals(loggedInUser.getUserProfileMode(), ProfileMode.PUBLIC)) {
-			// Yes, then add user
-			this.visibleUserList.add(loggedInUser);
-		}
 	}
 
 	/**
@@ -505,12 +497,6 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs
 		// Add user name
 		this.addUserName(registeredUser);
 
-		// Is the account public?
-		if (Objects.equals(registeredUser.getUserProfileMode(), ProfileMode.PUBLIC)) {
-			// Also add it to this list
-			this.visibleUserList.add(registeredUser);
-		}
-
 		// Set user id again
 		this.setUserId(registeredUser.getUserId());
 	}
@@ -569,15 +555,23 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs
 	@Override
 	@SuppressWarnings ("ReturnOfCollectionOrArrayField")
 	public List<User> allUsers () {
-		// Return it
-		return this.userList;
-	}
+		// Init list
+		List<User> list = new LinkedList<>();
+
+		// Get iterator
+		Iterator<Cache.Entry<Long, User>> iterator = this.userCache.iterator();
+
+		// Loop over all
+		while (iterator.hasNext()) {
+			// Get next entry
+			final Cache.Entry<Long, User> next = iterator.next();
+
+			// Add value to list
+			list.add(next.getValue());
+		}
 
-	@Override
-	@SuppressWarnings ("ReturnOfCollectionOrArrayField")
-	public List<User> allVisibleUsers () {
 		// Return it
-		return this.visibleUserList;
+		return list;
 	}
 
 	/**
@@ -633,7 +627,7 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs
 			this.setUserProfileMode(ProfileMode.INVISIBLE);
 
 			// Generate random password
-			String randomPassword = UserLoginUtils.createRandomPassword(JobsUserWebSessionController.MINIMUM_PASSWORD_LENGTH);
+			String randomPassword = UserLoginUtils.createRandomPassword(JobsUserWebRequestController.MINIMUM_PASSWORD_LENGTH);
 
 			// Set random password
 			this.setUserPassword(randomPassword);
@@ -831,19 +825,20 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs
 	 */
 	@PostConstruct
 	public void init () {
-		// Initialize user list
-		this.userList = this.userBean.allUsers();
-
-		// Get full user name list for reducing EJB calls
-		this.userNameList = this.userBean.getUserNameList();
-
-		// Is the user logged-in?
-		if (this.userLoginController.isUserLoggedIn()) {
-			// Is logged-in, so load also users visible to memebers
-			this.visibleUserList = this.userBean.allMemberPublicVisibleUsers();
-		} else {
-			// Initialize user list
-			this.visibleUserList = this.userBean.allPublicUsers();
+		// Is cache there?
+		if (!this.userCache.iterator().hasNext()) {
+			// Get whole list
+			List<User> list = this.userBean.allUsers();
+
+			// Add all
+			for (final Iterator<User> iterator = list.iterator(); iterator.hasNext();) {
+				// Get next element
+				final User next = iterator.next();
+
+				// Add it to cache
+				this.userCache.put(next.getUserId(), next);
+				this.userNameCache.put(next.getUserId(), next.getUserName());
+			}
 		}
 	}
 
@@ -936,7 +931,7 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs
 
 	@Override
 	public boolean isUserNameRegistered (final User user) {
-		return ((this.userNameList instanceof List) && (this.userNameList.contains(user.getUserName())));
+		return ((this.userNameCache instanceof List) && (this.userNameCache.containsKey(user.getUserId())));
 	}
 
 	@Override
@@ -951,11 +946,6 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs
 		return isRequired;
 	}
 
-	@Override
-	public boolean isVisibleUserFound () {
-		return ((this.visibleUserList instanceof List) && (this.visibleUserList.size() > 0));
-	}
-
 	@Override
 	public User lookupUserByEmailAddress (final String emailAddress) throws UserEmailAddressNotFoundException {
 		// Parameter must be valid
@@ -971,23 +961,23 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs
 		User user = null;
 
 		// Try to lookup it in visible user list
-		for (final Iterator<User> iterator = this.userList.iterator(); iterator.hasNext();) {
+		for (final Iterator<Cache.Entry<Long, User>> iterator = this.userCache.iterator(); iterator.hasNext();) {
 			// Get next user
-			User next = iterator.next();
+			Cache.Entry<Long, User> next = iterator.next();
 
 			// Contact should be set
-			if (next.getUserContact() == null) {
+			if (next.getValue().getUserContact() == null) {
 				// Contact is null
-				throw new NullPointerException(MessageFormat.format("next.userContact is null for user id {0}", next.getUserId())); //NOI18N
-			} else if (next.getUserContact().getContactEmailAddress() == null) {
+				throw new NullPointerException(MessageFormat.format("next.userContact is null for user id {0}", next.getKey())); //NOI18N
+			} else if (next.getValue().getUserContact().getContactEmailAddress() == null) {
 				// Email address should be set
-				throw new NullPointerException(MessageFormat.format("next.userContact.contactEmailAddress is null for user id {0}", next.getUserId())); //NOI18N
+				throw new NullPointerException(MessageFormat.format("next.userContact.contactEmailAddress is null for user id {0}", next.getKey())); //NOI18N
 			}
 
 			// Is the email address found?
-			if (Objects.equals(next.getUserContact().getContactEmailAddress(), emailAddress)) {
+			if (Objects.equals(next.getValue().getUserContact().getContactEmailAddress(), emailAddress)) {
 				// Copy to other variable
-				user = next;
+				user = next.getValue();
 				break;
 			}
 		}
@@ -1017,14 +1007,14 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs
 		User user = null;
 
 		// Try to lookup it in visible user list
-		for (final Iterator<User> iterator = this.userList.iterator(); iterator.hasNext();) {
+		for (final Iterator<Cache.Entry<Long, User>> iterator = this.userCache.iterator(); iterator.hasNext();) {
 			// Get next user
-			User next = iterator.next();
+			Cache.Entry<Long, User> next = iterator.next();
 
 			// Is the user id found?
-			if (Objects.equals(next.getUserId(), userId)) {
+			if (Objects.equals(next.getKey(), userId)) {
 				// Copy to other variable
-				user = next;
+				user = next.getValue();
 				break;
 			}
 		}
@@ -1047,13 +1037,13 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs
 	 */
 	private void addUserName (final User user) {
 		// Make sure the entry is not added yet
-		if (this.userNameList.contains(user.getUserName())) {
+		if (this.userNameCache.containsKey(user.getUserId())) {
 			// Abort here
 			throw new IllegalArgumentException(MessageFormat.format("User name {0} already added.", user.getUserName())); //NOI18N
 		}
 
 		// Add user name
-		this.userNameList.add(user.getUserName());
+		this.userNameCache.put(user.getUserId(), user.getUserName());
 	}
 
 	/**
@@ -1146,11 +1136,10 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs
 		}
 
 		// Remove it from lists
-		this.userList.remove(user);
-		this.visibleUserList.remove(user);
+		this.userCache.remove(user.getUserId());
 
 		// Remove name from list
-		this.userNameList.remove(user.getUserName());
+		this.userNameCache.remove(user.getUserId());
 	}
 
 	/**
@@ -1180,24 +1169,8 @@ public class JobsUserWebSessionBean extends BaseJobsController implements JobsUs
 			throw new NullPointerException(MessageFormat.format("user.userContact.contactId={0} is invalid.", user.getUserContact().getContactId())); //NOI18N
 		}
 
-		// Get iterator from list
-		Iterator<User> iterator = this.userList.iterator();
-
-		// "Walk" through all entries
-		while (iterator.hasNext()) {
-			// Get next element
-			User next = iterator.next();
-
-			// Is user id number the same?
-			if (Objects.equals(user.getUserId(), next.getUserId())) {
-				// Found entry, so remove it and abort
-				this.userList.remove(next);
-				break;
-			}
-		}
-
-		// Re-add user
-		this.userList.add(user);
+		// Add/update user
+		this.userCache.put(user.getUserId(), user);
 	}
 
 }
diff --git a/src/java/org/mxchange/jjobs/beans/user/JobsUserWebSessionController.java b/src/java/org/mxchange/jjobs/beans/user/JobsUserWebRequestController.java
similarity index 98%
rename from src/java/org/mxchange/jjobs/beans/user/JobsUserWebSessionController.java
rename to src/java/org/mxchange/jjobs/beans/user/JobsUserWebRequestController.java
index 8a754557..0c97da20 100644
--- a/src/java/org/mxchange/jjobs/beans/user/JobsUserWebSessionController.java
+++ b/src/java/org/mxchange/jjobs/beans/user/JobsUserWebRequestController.java
@@ -28,7 +28,7 @@ import org.mxchange.jusercore.model.user.User;
  * <p>
  * @author Roland Häder<roland@mxchange.org>
  */
-public interface JobsUserWebSessionController extends Serializable {
+public interface JobsUserWebRequestController extends Serializable {
 
 	/**
 	 * Minimum password length
diff --git a/src/java/org/mxchange/jjobs/beans/user/activity/JobsUserActivityWebApplicationBean.java b/src/java/org/mxchange/jjobs/beans/user/activity/JobsUserActivityWebRequestBean.java
similarity index 95%
rename from src/java/org/mxchange/jjobs/beans/user/activity/JobsUserActivityWebApplicationBean.java
rename to src/java/org/mxchange/jjobs/beans/user/activity/JobsUserActivityWebRequestBean.java
index 0af72e52..5f397216 100644
--- a/src/java/org/mxchange/jjobs/beans/user/activity/JobsUserActivityWebApplicationBean.java
+++ b/src/java/org/mxchange/jjobs/beans/user/activity/JobsUserActivityWebRequestBean.java
@@ -19,15 +19,15 @@ package org.mxchange.jjobs.beans.user.activity;
 import java.text.MessageFormat;
 import java.util.Collections;
 import java.util.GregorianCalendar;
-import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Map;
 import javax.annotation.PostConstruct;
 import javax.ejb.EJB;
-import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.context.RequestScoped;
 import javax.enterprise.event.Observes;
+import javax.inject.Inject;
 import javax.inject.Named;
+import org.mxchange.jcoreee.jcache.Cached;
 import org.mxchange.jjobs.beans.BaseJobsController;
 import org.mxchange.jusercore.events.user.add.ObservableAdminAddedUserEvent;
 import org.mxchange.jusercore.events.user.created.ObservableCreatedUserEvent;
@@ -55,8 +55,8 @@ import org.mxchange.juserlogincore.events.user.password_change.ObservableUpdated
  * @author Roland Häder<roland@mxchange.org>
  */
 @Named ("userActivityController")
-@ApplicationScoped
-public class JobsUserActivityWebApplicationBean extends BaseJobsController implements JobsUserActivityWebApplicationController {
+@RequestScoped
+public class JobsUserActivityWebRequestBean extends BaseJobsController implements JobsUserActivityWebRequestController {
 
 	/**
 	 * Serial number
@@ -77,15 +77,17 @@ public class JobsUserActivityWebApplicationBean extends BaseJobsController imple
 	/**
 	 * "Cache" for activity log per user
 	 */
-	private final Map<User, List<LogableUserActivity>> usersActivity;
+	@Inject
+	@Cached(cacheName = "usersActivityCache")
+	private transient Cache<User, List<LogableUserActivity>> usersActivityCache;
 
 	/**
 	 * Default constructor
 	 */
 	@SuppressWarnings ("CollectionWithoutInitialCapacity")
-	public JobsUserActivityWebApplicationBean () {
-		// Init cache
-		this.usersActivity = new LinkedHashMap<>();
+	public JobsUserActivityWebRequestBean () {
+		// Call super constructor
+		super();
 	}
 
 	/**
@@ -441,7 +443,6 @@ public class JobsUserActivityWebApplicationBean extends BaseJobsController imple
 		this.addUserActivity(event.getUpdatedUser(), "USER_UPDATED_PERSONAL_DATA"); //NOI18N
 	}
 
-
 	/**
 	 * Expands given activity type into a i18n string for administrators
 	 * <p>
@@ -506,9 +507,9 @@ public class JobsUserActivityWebApplicationBean extends BaseJobsController imple
 		List<LogableUserActivity> list = new LinkedList<>();
 
 		// Is the user set?
-		if (this.usersActivity.containsKey(this.getUser())) {
+		if (this.usersActivityCache.containsKey(this.getUser())) {
 			// Return it
-			list.addAll(this.usersActivity.get(this.getUser()));
+			list.addAll(this.usersActivityCache.get(this.getUser()));
 
 			// Sort list and reverse it
 			Collections.sort(list, new UserActivityLogTimestampComparator());
@@ -548,13 +549,13 @@ public class JobsUserActivityWebApplicationBean extends BaseJobsController imple
 		// Put all in map, per-user
 		for (final LogableUserActivity userActivity : list) {
 			// Is the list there?
-			if (!this.usersActivity.containsKey(userActivity.getActivityUser())) {
+			if (!this.usersActivityCache.containsKey(userActivity.getActivityUser())) {
 				// Init list
-				this.usersActivity.put(userActivity.getActivityUser(), new LinkedList<LogableUserActivity>());
+				this.usersActivityCache.put(userActivity.getActivityUser(), new LinkedList<LogableUserActivity>());
 			}
 
 			// Add by user instance
-			boolean added = this.usersActivity.get(userActivity.getActivityUser()).add(userActivity);
+			boolean added = this.usersActivityCache.get(userActivity.getActivityUser()).add(userActivity);
 
 			// Should be added
 			assert (added) : "Activity log not added"; //NOI18N
@@ -663,13 +664,13 @@ public class JobsUserActivityWebApplicationBean extends BaseJobsController imple
 		}
 
 		// Is it there?
-		if (!this.usersActivity.containsKey(userActivity.getActivityUser())) {
+		if (!this.usersActivityCache.containsKey(userActivity.getActivityUser())) {
 			// Init it
-			this.usersActivity.put(userActivity.getActivityUser(), new LinkedList<LogableUserActivity>());
+			this.usersActivityCache.put(userActivity.getActivityUser(), new LinkedList<LogableUserActivity>());
 		}
 
 		// Add activity to log
-		this.usersActivity.get(userActivity.getActivityUser()).add(userActivity);
+		this.usersActivityCache.get(userActivity.getActivityUser()).add(userActivity);
 	}
 
 }
diff --git a/src/java/org/mxchange/jjobs/beans/user/activity/JobsUserActivityWebApplicationController.java b/src/java/org/mxchange/jjobs/beans/user/activity/JobsUserActivityWebRequestController.java
similarity index 91%
rename from src/java/org/mxchange/jjobs/beans/user/activity/JobsUserActivityWebApplicationController.java
rename to src/java/org/mxchange/jjobs/beans/user/activity/JobsUserActivityWebRequestController.java
index e2234345..4e4837cd 100644
--- a/src/java/org/mxchange/jjobs/beans/user/activity/JobsUserActivityWebApplicationController.java
+++ b/src/java/org/mxchange/jjobs/beans/user/activity/JobsUserActivityWebRequestController.java
@@ -23,6 +23,6 @@ import java.io.Serializable;
  * <p>
  * @author Roland Häder<roland@mxchange.org>
  */
-public interface JobsUserActivityWebApplicationController extends Serializable {
+public interface JobsUserActivityWebRequestController extends Serializable {
 
 }
diff --git a/src/java/org/mxchange/jjobs/beans/user/confirmlink/JobsConfirmationLinkWebRequestBean.java b/src/java/org/mxchange/jjobs/beans/user/confirmlink/JobsConfirmationLinkWebRequestBean.java
index 7f13740f..5be19add 100644
--- a/src/java/org/mxchange/jjobs/beans/user/confirmlink/JobsConfirmationLinkWebRequestBean.java
+++ b/src/java/org/mxchange/jjobs/beans/user/confirmlink/JobsConfirmationLinkWebRequestBean.java
@@ -31,7 +31,7 @@ import org.mxchange.jcoreee.events.helper.clear.HelperCleanupEvent;
 import org.mxchange.jcoreee.events.helper.clear.ObservableHelperCleanupEvent;
 import org.mxchange.jcoreee.utils.FacesUtils;
 import org.mxchange.jjobs.beans.BaseJobsController;
-import org.mxchange.jjobs.beans.user.JobsUserWebSessionController;
+import org.mxchange.jjobs.beans.user.JobsUserWebRequestController;
 import org.mxchange.jusercore.events.user.created.CreatedUserEvent;
 import org.mxchange.jusercore.events.user.created.ObservableCreatedUserEvent;
 import org.mxchange.jusercore.exceptions.UserStatusConfirmedException;
@@ -85,7 +85,7 @@ public class JobsConfirmationLinkWebRequestBean extends BaseJobsController imple
 	 * User controller
 	 */
 	@Inject
-	private JobsUserWebSessionController userController;
+	private JobsUserWebRequestController userController;
 
 	/**
 	 * Event for when a user instance was created
@@ -114,9 +114,6 @@ public class JobsConfirmationLinkWebRequestBean extends BaseJobsController imple
 
 	@Override
 	public void maybeConfirmUserAccount () {
-		// Trace message
-		System.out.println(MessageFormat.format("{0}.maybeConfirmAccount: CALLED!", this.getClass().getSimpleName())); //NOI18N
-
 		// Is the confirmation key set?
 		if (this.getConfirmationKey() == null) {
 			// May be null if not set
@@ -129,9 +126,6 @@ public class JobsConfirmationLinkWebRequestBean extends BaseJobsController imple
 		// Now try to find the user in user list, first get the whole list
 		List<User> users = this.userController.allUsers();
 
-		// Debug message
-		System.out.println(MessageFormat.format("{0}.maybeConfirmAccount: users.size()={1}", this.getClass().getSimpleName(), users.size())); //NOI18N
-
 		// Get iterator from it
 		Iterator<User> iterator = users.iterator();
 
@@ -143,23 +137,14 @@ public class JobsConfirmationLinkWebRequestBean extends BaseJobsController imple
 			// Get next user
 			User next = iterator.next();
 
-			// Debug message
-			System.out.println(MessageFormat.format("{0}.maybeConfirmAccount: this.confirmationKey={1},next.confirmationKey={2}", this.getClass().getSimpleName(), this.getConfirmationKey(), next.getUserConfirmKey())); //NOI18N
-
 			// Same confirmation key?
 			if (Objects.equals(this.getConfirmationKey(), next.getUserConfirmKey())) {
-				// Debug message
-				System.out.println(MessageFormat.format("{0}.maybeConfirmAccount: next={1} - Aborting ...", this.getClass().getSimpleName(), next)); //NOI18N
-
 				// Found it, then set it and abort loop
 				user = next;
 				break;
 			}
 		}
 
-		// Debug message
-		System.out.println(MessageFormat.format("{0}.maybeConfirmAccount: user={1}", this.getClass().getSimpleName(), user)); //NOI18N
-
 		// Is the user instance null?
 		if ((null == user) || (user.getUserAccountStatus() != UserAccountStatus.UNCONFIRMED)) {
 			// Then clear this bean and the helper
@@ -168,9 +153,6 @@ public class JobsConfirmationLinkWebRequestBean extends BaseJobsController imple
 			// Try to confirm it
 			this.confirmUserAccount(user);
 		}
-
-		// Trace message
-		System.out.println(MessageFormat.format("{0}.maybeConfirmAccount: EXIT!", this.getClass().getSimpleName())); //NOI18N
 	}
 
 	/**
@@ -179,9 +161,6 @@ public class JobsConfirmationLinkWebRequestBean extends BaseJobsController imple
 	 * @param user User instance
 	 */
 	private void confirmUserAccount (final User user) {
-		// Trace message
-		System.out.println(MessageFormat.format("{0}.confirmUserAccount: user={1} - CALLED!", this.getClass().getSimpleName(), user)); //NOI18N
-
 		// Should be set
 		if (null == user) {
 			// Throw NPE
@@ -213,14 +192,8 @@ public class JobsConfirmationLinkWebRequestBean extends BaseJobsController imple
 			// Get base URL
 			String baseUrl = FacesUtils.generateBaseUrl();
 
-			// Debug message
-			System.out.println(MessageFormat.format("{0}.confirmUserAccount: baseUrl={1}", this.getClass().getSimpleName(), baseUrl)); //NOI18N
-
 			// Confirm account
 			updatedUser = this.userBean.confirmAccount(user, baseUrl);
-
-			// Debug message
-			System.out.println(MessageFormat.format("{0}.confirmUserAccount: updatedUser={1} - Returned from EJB", this.getClass().getSimpleName(), updatedUser)); //NOI18N
 		} catch (final UserStatusConfirmedException | UserStatusLockedException ex) {
 			// Something unexpected happened
 			throw new FaceletException(MessageFormat.format("Cannot confirm user account {0}", user.getUserName()), ex); //NOI18N
@@ -229,14 +202,8 @@ public class JobsConfirmationLinkWebRequestBean extends BaseJobsController imple
 		// Fire event that the user has confirmed account
 		this.userConfirmedEvent.fire(new UserConfirmedAccountEvent(updatedUser));
 
-		// Debug message
-		System.out.println(MessageFormat.format("{0}.confirmUserAccount: updatedUser={1}", this.getClass().getSimpleName(), updatedUser)); //NOI18N
-
 		// Fire event
 		this.userCreatedEvent.fire(new CreatedUserEvent(updatedUser));
-
-		// Trace message
-		System.out.println(MessageFormat.format("{0}.confirmUserAccount: EXIT!", this.getClass().getSimpleName())); //NOI18N
 	}
 
 }
diff --git a/src/java/org/mxchange/jjobs/beans/user/email_address/JobsEmailChangeWebSessionBean.java b/src/java/org/mxchange/jjobs/beans/user/email_address/JobsEmailChangeWebRequestBean.java
similarity index 89%
rename from src/java/org/mxchange/jjobs/beans/user/email_address/JobsEmailChangeWebSessionBean.java
rename to src/java/org/mxchange/jjobs/beans/user/email_address/JobsEmailChangeWebRequestBean.java
index 9de30f10..b78e2ef5 100644
--- a/src/java/org/mxchange/jjobs/beans/user/email_address/JobsEmailChangeWebSessionBean.java
+++ b/src/java/org/mxchange/jjobs/beans/user/email_address/JobsEmailChangeWebRequestBean.java
@@ -17,23 +17,25 @@
 package org.mxchange.jjobs.beans.user.email_address;
 
 import java.text.MessageFormat;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Objects;
 import javax.annotation.PostConstruct;
 import javax.ejb.EJB;
-import javax.enterprise.context.SessionScoped;
+import javax.enterprise.context.RequestScoped;
 import javax.faces.view.facelets.FaceletException;
 import javax.inject.Inject;
 import javax.inject.Named;
 import org.mxchange.jcontacts.contact.Contact;
+import org.mxchange.jcoreee.jcache.Cached;
 import org.mxchange.jcoreee.utils.FacesUtils;
 import org.mxchange.jjobs.beans.BaseJobsController;
 import org.mxchange.jjobs.beans.features.JobsFeaturesWebApplicationController;
 import org.mxchange.jjobs.beans.user.login.JobsUserLoginWebSessionController;
 import org.mxchange.jusercore.model.email_address.ChangeableEmailAddress;
 import org.mxchange.jusercore.model.email_address.EmailAddressChange;
-import org.mxchange.jusercore.model.user.email_address.UserEmailChangeSessionBeanRemote;
 import org.mxchange.jusercore.model.user.User;
+import org.mxchange.jusercore.model.user.email_address.UserEmailChangeSessionBeanRemote;
 import org.mxchange.juserlogincore.exceptions.UserPasswordMismatchException;
 
 /**
@@ -42,8 +44,8 @@ import org.mxchange.juserlogincore.exceptions.UserPasswordMismatchException;
  * @author Roland Häder<roland@mxchange.org>
  */
 @Named ("userEmailChangeController")
-@SessionScoped
-public class JobsEmailChangeWebSessionBean extends BaseJobsController implements JobsEmailChangeWebSessionController {
+@RequestScoped
+public class JobsEmailChangeWebRequestBean extends BaseJobsController implements JobsEmailChangeWebRequestController {
 
 	/**
 	 * Serial number
@@ -60,11 +62,6 @@ public class JobsEmailChangeWebSessionBean extends BaseJobsController implements
 	 */
 	private String emailAddressRepeat;
 
-	/**
-	 * Local list of already queued email addresses
-	 */
-	private List<String> emailAddresses;
-
 	/**
 	 * Remote email change bean
 	 */
@@ -77,6 +74,13 @@ public class JobsEmailChangeWebSessionBean extends BaseJobsController implements
 	@Inject
 	private JobsFeaturesWebApplicationController featureController;
 
+	/**
+	 * Local list of already queued email addresses
+	 */
+	@Inject
+	@Cached (cacheName = "queuedEmailCache")
+	private transient Cache<String, Boolean> queuedEmailCache;
+
 	/**
 	 * Login controller (bean)
 	 */
@@ -86,7 +90,7 @@ public class JobsEmailChangeWebSessionBean extends BaseJobsController implements
 	/**
 	 * Default constructor
 	 */
-	public JobsEmailChangeWebSessionBean () {
+	public JobsEmailChangeWebRequestBean () {
 		// Call super constructor
 		super();
 	}
@@ -196,8 +200,20 @@ public class JobsEmailChangeWebSessionBean extends BaseJobsController implements
 	 */
 	@PostConstruct
 	public void init () {
-		// Init list
-		this.emailAddresses = this.emailChangeBean.allQueuedAddresses();
+		// Is cache there?
+		if (!this.queuedEmailCache.iterator().hasNext()) {
+			// Get whole list
+			List<String> list = this.emailChangeBean.allQueuedAddresses();
+
+			// Add all
+			for (final Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
+				// Get next element
+				final String next = iterator.next();
+
+				// Add it to cache
+				this.queuedEmailCache.put(next, Boolean.TRUE);
+			}
+		}
 	}
 
 	@Override
@@ -230,7 +246,7 @@ public class JobsEmailChangeWebSessionBean extends BaseJobsController implements
 		assert (!emailAddress.trim().isEmpty()) : "emailAddress should not be empty"; //NOI18N
 
 		// Check list
-		if (this.emailAddresses.contains(emailAddress)) {
+		if (this.queuedEmailCache.containsKey(emailAddress)) {
 			// Okay, found it
 			return true;
 		}
@@ -241,7 +257,7 @@ public class JobsEmailChangeWebSessionBean extends BaseJobsController implements
 		// Is it there?
 		if (isQueued) {
 			// Add to list
-			this.emailAddresses.add(emailAddress);
+			this.queuedEmailCache.put(emailAddress, Boolean.TRUE);
 		}
 
 		// Return status
diff --git a/src/java/org/mxchange/jjobs/beans/user/email_address/JobsEmailChangeWebSessionController.java b/src/java/org/mxchange/jjobs/beans/user/email_address/JobsEmailChangeWebRequestController.java
similarity index 94%
rename from src/java/org/mxchange/jjobs/beans/user/email_address/JobsEmailChangeWebSessionController.java
rename to src/java/org/mxchange/jjobs/beans/user/email_address/JobsEmailChangeWebRequestController.java
index 7d21354a..f31fda04 100644
--- a/src/java/org/mxchange/jjobs/beans/user/email_address/JobsEmailChangeWebSessionController.java
+++ b/src/java/org/mxchange/jjobs/beans/user/email_address/JobsEmailChangeWebRequestController.java
@@ -23,7 +23,7 @@ import java.io.Serializable;
  * <p>
  * @author Roland Häder<roland@mxchange.org>
  */
-public interface JobsEmailChangeWebSessionController extends Serializable {
+public interface JobsEmailChangeWebRequestController extends Serializable {
 
 	/**
 	 * Checks whether all required are set for changing email address
diff --git a/src/java/org/mxchange/jjobs/beans/user/login/JobsUserLoginWebSessionBean.java b/src/java/org/mxchange/jjobs/beans/user/login/JobsUserLoginWebSessionBean.java
index e286baec..03f6d7c1 100644
--- a/src/java/org/mxchange/jjobs/beans/user/login/JobsUserLoginWebSessionBean.java
+++ b/src/java/org/mxchange/jjobs/beans/user/login/JobsUserLoginWebSessionBean.java
@@ -29,7 +29,7 @@ import javax.faces.context.FacesContext;
 import javax.inject.Inject;
 import javax.inject.Named;
 import org.mxchange.jjobs.beans.BaseJobsController;
-import org.mxchange.jjobs.beans.user.JobsUserWebSessionController;
+import org.mxchange.jjobs.beans.user.JobsUserWebRequestController;
 import org.mxchange.jusercore.exceptions.UserNotFoundException;
 import org.mxchange.jusercore.exceptions.UserStatusLockedException;
 import org.mxchange.jusercore.exceptions.UserStatusUnconfirmedException;
@@ -88,7 +88,7 @@ public class JobsUserLoginWebSessionBean extends BaseJobsController implements J
 	 * User controller
 	 */
 	@Inject
-	private JobsUserWebSessionController userController;
+	private JobsUserWebRequestController userController;
 
 	/**
 	 * Current password
diff --git a/src/java/org/mxchange/jjobs/beans/user/register/JobsUserRegisterWebSessionBean.java b/src/java/org/mxchange/jjobs/beans/user/register/JobsUserRegisterWebRequestBean.java
similarity index 95%
rename from src/java/org/mxchange/jjobs/beans/user/register/JobsUserRegisterWebSessionBean.java
rename to src/java/org/mxchange/jjobs/beans/user/register/JobsUserRegisterWebRequestBean.java
index 57f02241..ada67e19 100644
--- a/src/java/org/mxchange/jjobs/beans/user/register/JobsUserRegisterWebSessionBean.java
+++ b/src/java/org/mxchange/jjobs/beans/user/register/JobsUserRegisterWebRequestBean.java
@@ -17,7 +17,7 @@
 package org.mxchange.jjobs.beans.user.register;
 
 import javax.ejb.EJB;
-import javax.enterprise.context.SessionScoped;
+import javax.enterprise.context.RequestScoped;
 import javax.enterprise.event.Event;
 import javax.enterprise.inject.Any;
 import javax.faces.view.facelets.FaceletException;
@@ -27,10 +27,10 @@ import org.mxchange.jcontacts.contact.Contact;
 import org.mxchange.jcontacts.contact.UserContact;
 import org.mxchange.jcoreee.utils.FacesUtils;
 import org.mxchange.jjobs.beans.BaseJobsController;
-import org.mxchange.jjobs.beans.contact.JobsContactWebSessionController;
+import org.mxchange.jjobs.beans.contact.JobsContactWebRequestController;
 import org.mxchange.jjobs.beans.features.JobsFeaturesWebApplicationController;
 import org.mxchange.jjobs.beans.user.JobsAdminUserWebRequestController;
-import org.mxchange.jjobs.beans.user.JobsUserWebSessionController;
+import org.mxchange.jjobs.beans.user.JobsUserWebRequestController;
 import org.mxchange.jusercore.events.user.clear.password.ClearUserPasswordEvent;
 import org.mxchange.jusercore.events.user.clear.password.ObservableClearUserPasswordEvent;
 import org.mxchange.jusercore.events.user.clear.username.ClearUserNameEvent;
@@ -55,8 +55,8 @@ import org.mxchange.juserlogincore.model.user.register.UserRegistrationSessionBe
  * @author Roland Häder<roland@mxchange.org>
  */
 @Named ("userRegistrationController")
-@SessionScoped
-public class JobsUserRegisterWebSessionBean extends BaseJobsController implements JobsUserRegisterWebSessionController {
+@RequestScoped
+public class JobsUserRegisterWebRequestBean extends BaseJobsController implements JobsUserRegisterWebRequestController {
 
 	/**
 	 * Serial number
@@ -64,7 +64,7 @@ public class JobsUserRegisterWebSessionBean extends BaseJobsController implement
 	private static final long serialVersionUID = 47_828_986_719_691_592L;
 
 	/**
-	 * User controller
+	 * Administrative user controller
 	 */
 	@Inject
 	private JobsAdminUserWebRequestController adminUserController;
@@ -87,7 +87,7 @@ public class JobsUserRegisterWebSessionBean extends BaseJobsController implement
 	 * Contact controller
 	 */
 	@Inject
-	private JobsContactWebSessionController contactController;
+	private JobsContactWebRequestController contactController;
 
 	/**
 	 * Features controller
@@ -105,7 +105,7 @@ public class JobsUserRegisterWebSessionBean extends BaseJobsController implement
 	 * User controller
 	 */
 	@Inject
-	private JobsUserWebSessionController userController;
+	private JobsUserWebRequestController userController;
 
 	/**
 	 * An event being fired when a user password was changed
@@ -124,7 +124,7 @@ public class JobsUserRegisterWebSessionBean extends BaseJobsController implement
 	/**
 	 * Default constructor
 	 */
-	public JobsUserRegisterWebSessionBean () {
+	public JobsUserRegisterWebRequestBean () {
 		// Call super constructor
 		super();
 	}
@@ -197,7 +197,7 @@ public class JobsUserRegisterWebSessionBean extends BaseJobsController implement
 				throw new FaceletException(new DataRepeatMismatchException("Passwords not matching.")); //NOI18N
 			} else if (this.userController.ifBothPasswordsEmptyAllowed()) {
 				// Both passwords are left empty and is allowed, then generate a random password
-				randomPassword = UserLoginUtils.createRandomPassword(JobsUserWebSessionController.MINIMUM_PASSWORD_LENGTH);
+				randomPassword = UserLoginUtils.createRandomPassword(JobsUserWebRequestController.MINIMUM_PASSWORD_LENGTH);
 
 				// Generate (ignored) password-history
 				PasswordHistory passwordHistory = new UserPasswordHistory(randomPassword, user);
@@ -294,7 +294,7 @@ public class JobsUserRegisterWebSessionBean extends BaseJobsController implement
 				return ""; //NOI18N
 			} else if (this.userController.ifBothPasswordsEmptyAllowed()) {
 				// Both passwords are left empty and is allowed, then generate a random password
-				String randomPassword = UserLoginUtils.createRandomPassword(JobsUserWebSessionController.MINIMUM_PASSWORD_LENGTH);
+				String randomPassword = UserLoginUtils.createRandomPassword(JobsUserWebRequestController.MINIMUM_PASSWORD_LENGTH);
 
 				// Generate (ignored) password-history
 				PasswordHistory passwordHistory = new UserPasswordHistory(randomPassword, user);
diff --git a/src/java/org/mxchange/jjobs/beans/user/register/JobsUserRegisterWebSessionController.java b/src/java/org/mxchange/jjobs/beans/user/register/JobsUserRegisterWebRequestController.java
similarity index 93%
rename from src/java/org/mxchange/jjobs/beans/user/register/JobsUserRegisterWebSessionController.java
rename to src/java/org/mxchange/jjobs/beans/user/register/JobsUserRegisterWebRequestController.java
index 6a9c78b3..2dad7c6b 100644
--- a/src/java/org/mxchange/jjobs/beans/user/register/JobsUserRegisterWebSessionController.java
+++ b/src/java/org/mxchange/jjobs/beans/user/register/JobsUserRegisterWebRequestController.java
@@ -23,6 +23,6 @@ import java.io.Serializable;
  * <p>
  * @author Roland Häder<roland@mxchange.org>
  */
-public interface JobsUserRegisterWebSessionController extends Serializable {
+public interface JobsUserRegisterWebRequestController extends Serializable {
 
 }
diff --git a/src/java/org/mxchange/jjobs/beans/user/resendlink/JobsResendLinkWebSessionBean.java b/src/java/org/mxchange/jjobs/beans/user/resendlink/JobsResendLinkWebRequestBean.java
similarity index 95%
rename from src/java/org/mxchange/jjobs/beans/user/resendlink/JobsResendLinkWebSessionBean.java
rename to src/java/org/mxchange/jjobs/beans/user/resendlink/JobsResendLinkWebRequestBean.java
index c9b63bb7..5c072feb 100644
--- a/src/java/org/mxchange/jjobs/beans/user/resendlink/JobsResendLinkWebSessionBean.java
+++ b/src/java/org/mxchange/jjobs/beans/user/resendlink/JobsResendLinkWebRequestBean.java
@@ -18,7 +18,7 @@ package org.mxchange.jjobs.beans.user.resendlink;
 
 import java.util.Locale;
 import javax.ejb.EJB;
-import javax.enterprise.context.SessionScoped;
+import javax.enterprise.context.RequestScoped;
 import javax.enterprise.event.Event;
 import javax.enterprise.event.Observes;
 import javax.enterprise.inject.Any;
@@ -28,7 +28,7 @@ import org.mxchange.jcoreee.events.locale.ObservableLocaleChangeEvent;
 import org.mxchange.jcoreee.utils.FacesUtils;
 import org.mxchange.jjobs.beans.BaseJobsController;
 import org.mxchange.jjobs.beans.localization.JobsLocalizationSessionController;
-import org.mxchange.jjobs.beans.user.JobsUserWebSessionController;
+import org.mxchange.jjobs.beans.user.JobsUserWebRequestController;
 import org.mxchange.jusercore.exceptions.UserEmailAddressNotFoundException;
 import org.mxchange.jusercore.exceptions.UserNotFoundException;
 import org.mxchange.jusercore.exceptions.UserStatusConfirmedException;
@@ -45,8 +45,8 @@ import org.mxchange.juserlogincore.model.user.resendlink.ResendLinkSessionBeanRe
  * @author Roland Häder<roland@mxchange.org>
  */
 @Named ("userResendConfirmationController")
-@SessionScoped
-public class JobsResendLinkWebSessionBean extends BaseJobsController implements JobsResendLinkWebSessionController {
+@RequestScoped
+public class JobsResendLinkWebRequestBean extends BaseJobsController implements JobsResendLinkWebRequestController {
 
 	/**
 	 * Serial number
@@ -79,7 +79,7 @@ public class JobsResendLinkWebSessionBean extends BaseJobsController implements
 	 * Regular user controller
 	 */
 	@Inject
-	private JobsUserWebSessionController userController;
+	private JobsUserWebRequestController userController;
 
 	/**
 	 * Event being fired after confirmation link is being sent
@@ -91,7 +91,7 @@ public class JobsResendLinkWebSessionBean extends BaseJobsController implements
 	/**
 	 * Default constructor
 	 */
-	public JobsResendLinkWebSessionBean () {
+	public JobsResendLinkWebRequestBean () {
 		// Call super constructor
 		super();
 	}
diff --git a/src/java/org/mxchange/jjobs/beans/user/resendlink/JobsResendLinkWebSessionController.java b/src/java/org/mxchange/jjobs/beans/user/resendlink/JobsResendLinkWebRequestController.java
similarity index 93%
rename from src/java/org/mxchange/jjobs/beans/user/resendlink/JobsResendLinkWebSessionController.java
rename to src/java/org/mxchange/jjobs/beans/user/resendlink/JobsResendLinkWebRequestController.java
index 391f2a9e..134fd175 100644
--- a/src/java/org/mxchange/jjobs/beans/user/resendlink/JobsResendLinkWebSessionController.java
+++ b/src/java/org/mxchange/jjobs/beans/user/resendlink/JobsResendLinkWebRequestController.java
@@ -23,6 +23,6 @@ import java.io.Serializable;
  * <p>
  * @author Roland Häder<roland@mxchange.org>
  */
-public interface JobsResendLinkWebSessionController extends Serializable {
+public interface JobsResendLinkWebRequestController extends Serializable {
 
 }
diff --git a/src/java/org/mxchange/jjobs/converter/business/basicdata/JobsBusinessContactConverter.java b/src/java/org/mxchange/jjobs/converter/business/basicdata/JobsBusinessContactConverter.java
index 4354ee61..d63a0c19 100644
--- a/src/java/org/mxchange/jjobs/converter/business/basicdata/JobsBusinessContactConverter.java
+++ b/src/java/org/mxchange/jjobs/converter/business/basicdata/JobsBusinessContactConverter.java
@@ -37,7 +37,7 @@ public class JobsBusinessContactConverter implements Converter<BusinessBasicData
 	/**
 	 * Business contact EJB
 	 */
-	@EJB (lookup = "java:global/jfinancials-ejb/businessData!org.mxchange.jcontactsbusiness.basicdata.BusinessDataSessionBeanRemote")
+	@EJB (lookup = "java:global/jjobs-ejb/businessData!org.mxchange.jcontactsbusiness.basicdata.BusinessDataSessionBeanRemote")
 	private BusinessDataSessionBeanRemote basicDataBean;
 
 	/**
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 4e21174a..06d43c9f 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
@@ -37,7 +37,7 @@ public class JobsCompanyEmployeeConverter implements Converter<Employee> {
 	/**
 	 * CompanyEmployee EJB
 	 */
-	@EJB (lookup = "java:global/jfinancials-ejb/companyEmployee!org.mxchange.jcontactsbusiness.employee.CompanyEmployeeSessionBeanRemote")
+	@EJB (lookup = "java:global/jjobs-ejb/companyEmployee!org.mxchange.jcontactsbusiness.employee.CompanyEmployeeSessionBeanRemote")
 	private CompanyEmployeeSessionBeanRemote companyEmployeeBean;
 
 	/**
diff --git a/src/java/org/mxchange/jjobs/converter/business/headquarters/JobsCompanyHeadquartersConverter.java b/src/java/org/mxchange/jjobs/converter/business/headquarters/JobsCompanyHeadquartersConverter.java
index 98dab59d..d06f9c9b 100644
--- a/src/java/org/mxchange/jjobs/converter/business/headquarters/JobsCompanyHeadquartersConverter.java
+++ b/src/java/org/mxchange/jjobs/converter/business/headquarters/JobsCompanyHeadquartersConverter.java
@@ -37,7 +37,7 @@ public class JobsCompanyHeadquartersConverter implements Converter<HeadquartersD
 	/**
 	 * CompanyEmployee EJB
 	 */
-	@EJB (lookup = "java:global/jfinancials-ejb/companyEmployee!org.mxchange.jcontactsbusiness.headquarters.CompanyHeadquartersSessionBeanRemote")
+	@EJB (lookup = "java:global/jjobs-ejb/companyEmployee!org.mxchange.jcontactsbusiness.headquarters.CompanyHeadquartersSessionBeanRemote")
 	private CompanyHeadquartersSessionBeanRemote companyHeadquartersBean;
 
 	/**
diff --git a/src/java/org/mxchange/jjobs/converter/contact/JobsContactConverter.java b/src/java/org/mxchange/jjobs/converter/contact/JobsContactConverter.java
index f170e455..52884e41 100644
--- a/src/java/org/mxchange/jjobs/converter/contact/JobsContactConverter.java
+++ b/src/java/org/mxchange/jjobs/converter/contact/JobsContactConverter.java
@@ -37,7 +37,7 @@ public class JobsContactConverter implements Converter<Contact> {
 	/**
 	 * User EJB
 	 */
-	@EJB (lookup = "java:global/jfinancials-ejb/contact!org.mxchange.jcontacts.contact.ContactSessionBeanRemote")
+	@EJB (lookup = "java:global/jjobs-ejb/contact!org.mxchange.jcontacts.contact.ContactSessionBeanRemote")
 	private ContactSessionBeanRemote contactBean;
 
 	/**
diff --git a/src/java/org/mxchange/jjobs/converter/country/JobsCountryConverter.java b/src/java/org/mxchange/jjobs/converter/country/JobsCountryConverter.java
index 645957d5..7f4df116 100644
--- a/src/java/org/mxchange/jjobs/converter/country/JobsCountryConverter.java
+++ b/src/java/org/mxchange/jjobs/converter/country/JobsCountryConverter.java
@@ -38,7 +38,7 @@ public class JobsCountryConverter implements Converter<Country> {
 	/**
 	 * Country bean
 	 */
-	@EJB (lookup = "java:global/jfinancials-ejb/country!org.mxchange.jcountry.data.CountrySingletonBeanRemote")
+	@EJB (lookup = "java:global/jjobs-ejb/country!org.mxchange.jcountry.data.CountrySingletonBeanRemote")
 	private CountrySingletonBeanRemote countryBean;
 
 	/**
diff --git a/src/java/org/mxchange/jjobs/converter/fax/JobsFaxNumberConverter.java b/src/java/org/mxchange/jjobs/converter/fax/JobsFaxNumberConverter.java
index 7e5436e8..f9cf8cfd 100644
--- a/src/java/org/mxchange/jjobs/converter/fax/JobsFaxNumberConverter.java
+++ b/src/java/org/mxchange/jjobs/converter/fax/JobsFaxNumberConverter.java
@@ -37,7 +37,7 @@ public class JobsFaxNumberConverter implements Converter<DialableFaxNumber> {
 	/**
 	 * Phone EJB
 	 */
-	@EJB(lookup = "java:global/jfinancials-ejb/phone!org.mxchange.jphone.phonenumbers.phone.PhoneSessionBeanRemote")
+	@EJB(lookup = "java:global/jjobs-ejb/phone!org.mxchange.jphone.phonenumbers.phone.PhoneSessionBeanRemote")
 	private PhoneSessionBeanRemote phoneBean;
 
 	/**
diff --git a/src/java/org/mxchange/jjobs/converter/landline/JobsLandLineNumberConverter.java b/src/java/org/mxchange/jjobs/converter/landline/JobsLandLineNumberConverter.java
index ef407685..8ec5d093 100644
--- a/src/java/org/mxchange/jjobs/converter/landline/JobsLandLineNumberConverter.java
+++ b/src/java/org/mxchange/jjobs/converter/landline/JobsLandLineNumberConverter.java
@@ -37,7 +37,7 @@ public class JobsLandLineNumberConverter implements Converter<DialableLandLineNu
 	/**
 	 * Phone EJB
 	 */
-	@EJB(lookup = "java:global/jfinancials-ejb/phone!org.mxchange.jphone.phonenumbers.phone.PhoneSessionBeanRemote")
+	@EJB(lookup = "java:global/jjobs-ejb/phone!org.mxchange.jphone.phonenumbers.phone.PhoneSessionBeanRemote")
 	private PhoneSessionBeanRemote phoneBean;
 
 	/**
diff --git a/src/java/org/mxchange/jjobs/converter/mobile/JobsMobileNumberConverter.java b/src/java/org/mxchange/jjobs/converter/mobile/JobsMobileNumberConverter.java
index cb3d1f1e..cb02df0a 100644
--- a/src/java/org/mxchange/jjobs/converter/mobile/JobsMobileNumberConverter.java
+++ b/src/java/org/mxchange/jjobs/converter/mobile/JobsMobileNumberConverter.java
@@ -37,7 +37,7 @@ public class JobsMobileNumberConverter implements Converter<DialableMobileNumber
 	/**
 	 * Phone EJB
 	 */
-	@EJB (lookup = "java:global/jfinancials-ejb/phone!org.mxchange.jphone.phonenumbers.phone.PhoneSessionBeanRemote")
+	@EJB (lookup = "java:global/jjobs-ejb/phone!org.mxchange.jphone.phonenumbers.phone.PhoneSessionBeanRemote")
 	private PhoneSessionBeanRemote phoneBean;
 
 	/**
diff --git a/src/java/org/mxchange/jjobs/converter/mobileprovider/JobsMobileProviderConverter.java b/src/java/org/mxchange/jjobs/converter/mobileprovider/JobsMobileProviderConverter.java
index 7dbdd42f..c1bb742f 100644
--- a/src/java/org/mxchange/jjobs/converter/mobileprovider/JobsMobileProviderConverter.java
+++ b/src/java/org/mxchange/jjobs/converter/mobileprovider/JobsMobileProviderConverter.java
@@ -37,7 +37,7 @@ public class JobsMobileProviderConverter implements Converter<MobileProvider> {
 	/**
 	 * Mobile provider bean
 	 */
-	@EJB(lookup = "java:global/jfinancials-ejb/mobileprovider!org.mxchange.jphone.phonenumbers.mobileprovider.MobileProviderSingletonBeanRemote")
+	@EJB(lookup = "java:global/jjobs-ejb/mobileprovider!org.mxchange.jphone.phonenumbers.mobileprovider.MobileProviderSingletonBeanRemote")
 	private MobileProviderSingletonBeanRemote mobileProviderBean;
 
 	/**
@@ -58,7 +58,7 @@ public class JobsMobileProviderConverter implements Converter<MobileProvider> {
 		}
 
 		// Get full list
-		List<MobileProvider> providerList = this.mobileProviderBean.allMobileProvider();
+		List<MobileProvider> providerList = this.mobileProviderBean.allMobileProviders();
 
 		// Init value
 		MobileProvider provider = null;
diff --git a/src/java/org/mxchange/jjobs/converter/user/JobsUserConverter.java b/src/java/org/mxchange/jjobs/converter/user/JobsUserConverter.java
index 3704b454..c89d643d 100644
--- a/src/java/org/mxchange/jjobs/converter/user/JobsUserConverter.java
+++ b/src/java/org/mxchange/jjobs/converter/user/JobsUserConverter.java
@@ -37,7 +37,7 @@ public class JobsUserConverter implements Converter<User> {
 	/**
 	 * User EJB
 	 */
-	@EJB(lookup = "java:global/jfinancials-ejb/user!org.mxchange.jusercore.model.user.UserSessionBeanRemote")
+	@EJB(lookup = "java:global/jjobs-ejb/user!org.mxchange.jusercore.model.user.UserSessionBeanRemote")
 	private UserSessionBeanRemote userBean;
 
 	/**
diff --git a/src/java/org/mxchange/jjobs/validator/business/basicdata/JobsCompanyNameValidator.java b/src/java/org/mxchange/jjobs/validator/business/basicdata/JobsCompanyNameValidator.java
index a5230f64..f922b8e8 100644
--- a/src/java/org/mxchange/jjobs/validator/business/basicdata/JobsCompanyNameValidator.java
+++ b/src/java/org/mxchange/jjobs/validator/business/basicdata/JobsCompanyNameValidator.java
@@ -42,7 +42,7 @@ public class JobsCompanyNameValidator extends BaseStringValidator {
 	/**
 	 * Business contact EJB
 	 */
-	@EJB (lookup = "java:global/jfinancials-ejb/businessData!org.mxchange.jcontactsbusiness.basicdata.BusinessDataSessionBeanRemote")
+	@EJB (lookup = "java:global/jjobs-ejb/businessData!org.mxchange.jcontactsbusiness.basicdata.BusinessDataSessionBeanRemote")
 	private BusinessDataSessionBeanRemote basicDataBean;
 
 	@Override
diff --git a/src/java/org/mxchange/jjobs/validator/emailaddress/JobsEmailAddressValidator.java b/src/java/org/mxchange/jjobs/validator/emailaddress/JobsEmailAddressValidator.java
index 57f93ffa..ee114d89 100644
--- a/src/java/org/mxchange/jjobs/validator/emailaddress/JobsEmailAddressValidator.java
+++ b/src/java/org/mxchange/jjobs/validator/emailaddress/JobsEmailAddressValidator.java
@@ -38,7 +38,7 @@ public class JobsEmailAddressValidator extends BaseStringValidator {
 	/**
 	 * Contact session-scoped bean
 	 */
-	@EJB (lookup = "java:global/jfinancials-ejb/contact!org.mxchange.jcontacts.contact.ContactSessionBeanRemote")
+	@EJB (lookup = "java:global/jjobs-ejb/contact!org.mxchange.jcontacts.contact.ContactSessionBeanRemote")
 	private ContactSessionBeanRemote contactBean;
 
 	/**
diff --git a/src/java/org/mxchange/jjobs/validator/user/JobsUserIdValidator.java b/src/java/org/mxchange/jjobs/validator/user/JobsUserIdValidator.java
index 99a1b7a3..cf383d76 100644
--- a/src/java/org/mxchange/jjobs/validator/user/JobsUserIdValidator.java
+++ b/src/java/org/mxchange/jjobs/validator/user/JobsUserIdValidator.java
@@ -42,7 +42,7 @@ public class JobsUserIdValidator extends BaseNumberValidator {
 	/**
 	 * Remote bean
 	 */
-	@EJB (lookup = "java:global/jfinancials-ejb/user!org.mxchange.jusercore.model.user.UserSessionBeanRemote")
+	@EJB (lookup = "java:global/jjobs-ejb/user!org.mxchange.jusercore.model.user.UserSessionBeanRemote")
 	private UserSessionBeanRemote userBean;
 
 	/**
diff --git a/web/guest/user/user_list.xhtml b/web/guest/user/user_list.xhtml
index ba2287d6..b1726a33 100644
--- a/web/guest/user/user_list.xhtml
+++ b/web/guest/user/user_list.xhtml
@@ -22,22 +22,24 @@
 				<h:outputText value="#{msg.TABLE_HEADER_USER_LIST}" />
 			</div>
 
-			<h:dataTable id="userList" var="user" value="#{userController.allVisibleUsers()}" headerClass="table-header-column25" summary="#{msg.TABLE_SUMMARY_USER_LIST}" rendered="#{userController.isVisibleUserFound()}">
-				<h:column>
-					<f:facet name="header">
-						<h:outputText value="#{msg.USER_NAME}" />
-					</f:facet>
-
-					<widgets:outputUserProfileLink user="#{user}" />
-				</h:column>
-
-				<h:column>
-					<f:facet name="header">
-						<h:outputText value="#{msg.USER_CREATED}" />
-					</f:facet>
-
-					<h:outputFormat id="userCreated" value="#{user.userCreated.time}" title="#{msg.USER_CREATED_TITLE}" />
-				</h:column>
+			<h:dataTable id="userList" var="user" value="#{userController.allUsers()}" headerClass="table-header-column25" summary="#{msg.TABLE_SUMMARY_USER_LIST}" rendered="#{userController.allUsers().size() lt 0}">
+				<ui:fragment rendered="#{profileController.isProfileLinkVisibleByUser(user)}">
+					<h:column>
+						<f:facet name="header">
+							<h:outputText value="#{msg.USER_NAME}" />
+						</f:facet>
+
+						<widgets:outputUserProfileLink user="#{user}" />
+					</h:column>
+
+					<h:column>
+						<f:facet name="header">
+							<h:outputText value="#{msg.USER_CREATED}" />
+						</f:facet>
+
+						<h:outputFormat id="userCreated" value="#{user.userCreated.time}" title="#{msg.USER_CREATED_TITLE}" />
+					</h:column>
+				</ui:fragment>
 			</h:dataTable>
 		</h:panelGroup>>
 	</ui:define>
-- 
2.39.5