diff --git a/src/main/java/org/gcube/portlets/user/td/gwtservice/server/SessionOp.java b/src/main/java/org/gcube/portlets/user/td/gwtservice/server/SessionOp.java
new file mode 100644
index 0000000..711f07f
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/td/gwtservice/server/SessionOp.java
@@ -0,0 +1,106 @@
+package org.gcube.portlets.user.td.gwtservice.server;
+
+import java.util.HashMap;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+import org.gcube.portlets.user.td.gwtservice.server.util.ServiceCredentials;
+import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTServiceException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author Giancarlo Panichi email: g.panichi@isti.cnr.it
+ *
+ * @param
+ */
+public class SessionOp {
+
+ private static Logger logger = LoggerFactory.getLogger(SessionOp.class);
+
+ public T get(HttpServletRequest httpRequest,
+ ServiceCredentials serviceCredentials, String attribute,
+ Class cls) throws TDGWTServiceException {
+ HttpSession httpSession = httpRequest.getSession();
+ T value = null;
+
+ @SuppressWarnings("unchecked")
+ HashMap map = (HashMap) httpSession
+ .getAttribute(attribute);
+
+ if (map != null) {
+ if (map.containsKey(serviceCredentials.getScope())) {
+ value = map.get(serviceCredentials.getScope());
+ } else {
+ logger.error("" + attribute + " was not acquired");
+ try {
+ value = cls.newInstance();
+ map.put(serviceCredentials.getScope(), value);
+ } catch (InstantiationException | IllegalAccessException e) {
+ String error = "Error reading session attribute: "
+ + e.getLocalizedMessage();
+ logger.error(error, e);
+ throw new TDGWTServiceException(error, e);
+ }
+
+ }
+ } else {
+ logger.error("" + attribute + " was not acquired");
+ map = new HashMap<>();
+ try {
+ value = cls.newInstance();
+ map.put(serviceCredentials.getScope(), value);
+ httpSession.setAttribute(attribute, map);
+ } catch (InstantiationException | IllegalAccessException e) {
+ String error = "Error reading session attribute: "
+ + e.getLocalizedMessage();
+ logger.error(error, e);
+ throw new TDGWTServiceException(error, e);
+ }
+
+ }
+ return value;
+ }
+
+ public T get(HttpServletRequest httpRequest,
+ ServiceCredentials serviceCredentials, String attribute) {
+ HttpSession httpSession = httpRequest.getSession();
+ T value = null;
+
+ @SuppressWarnings("unchecked")
+ HashMap map = (HashMap) httpSession
+ .getAttribute(attribute);
+
+ if (map != null) {
+ if (map.containsKey(serviceCredentials.getScope())) {
+ value = map.get(serviceCredentials.getScope());
+ } else {
+ logger.error("" + attribute + " was not acquired");
+ }
+ } else {
+ logger.error("" + attribute + " was not acquired");
+ }
+ return value;
+ }
+
+ public void set(HttpServletRequest httpRequest,
+ ServiceCredentials serviceCredentials, String attribute, T value) {
+ HttpSession httpSession = httpRequest.getSession();
+
+ @SuppressWarnings("unchecked")
+ HashMap map = (HashMap) httpSession
+ .getAttribute(attribute);
+
+ if (map != null) {
+ map.put(serviceCredentials.getScope(), value);
+ } else {
+ map = new HashMap<>();
+ map.put(serviceCredentials.getScope(), value);
+ httpSession.setAttribute(attribute, map);
+ }
+ }
+
+}