diff --git a/src/python/dm/common/service/loginController.py b/src/python/dm/common/service/loginController.py
index 662957a9a8a1a2e505f0ae5d81fd176e1dbe64f5..3f2707c5ffe7c4efb8a78b55564abb90956fdffd 100755
--- a/src/python/dm/common/service/loginController.py
+++ b/src/python/dm/common/service/loginController.py
@@ -1,6 +1,7 @@
 #!/usr/bin/env python
 
 import cherrypy
+import datetime
 import urllib
 from cherrypy.lib import httpauth
 
@@ -14,6 +15,7 @@ from dm.common.exceptions.invalidSession import InvalidSession
 from dm.common.utility.loggingManager import LoggingManager
 from dm.common.service.dmController import DmController
 from dm.common.service.auth.authorizationPrincipalManager import AuthorizationPrincipalManager
+from dm.common.service.auth.singleSignOnManager import SingleSignOnManager
 
 class LoginController(DmController):
     """ Controller to provide login and logout actions. """
@@ -21,6 +23,7 @@ class LoginController(DmController):
     SESSION_USERNAME_KEY = '_cp_username'
     SESSION_USER_KEY = 'user'
     SESSION_ROLE_KEY = 'role'
+    ORIGINAL_SESSION_ID_KEY = 'originalid'
     INVALID_SESSION_KEY = 'invalidSession'
 
     _cp_config = {
@@ -97,6 +100,14 @@ class LoginController(DmController):
         if principal:
             cherrypy.session[LoginController.SESSION_ROLE_KEY] = principal.getRole()
             logger.debug('Successful login from user: %s (role: %s)' % (username, principal.getRole()))
+            # Try adding to SingleSignOnManager
+            sessionId = cherrypy.serving.session.id
+            sessionCache = cherrypy.session.cache
+            sessionInfo = {LoginController.SESSION_ROLE_KEY : principal.getRole()}
+            sessionInfo[LoginController.SESSION_USER_KEY] = principal.getUserInfo()
+            sessionInfo[LoginController.SESSION_USERNAME_KEY] = username
+            ssoManager = SingleSignOnManager.getInstance()
+            ssoManager.addSession(sessionId, sessionInfo)
         else:
             logger.debug('Login denied for user: %s' % username)
             username = cherrypy.session.get(LoginController.SESSION_USERNAME_KEY, None)
@@ -128,17 +139,37 @@ class LoginController(DmController):
 
         sessionId = cherrypy.serving.session.id
         sessionCache = cherrypy.session.cache
+        # If session cache does not have current session id, reuse original
+        # session id
+        if not sessionCache.has_key(sessionId) and cherrypy.serving.session.__dict__.has_key(LoginController.ORIGINAL_SESSION_ID_KEY):
+            logger.debug('Reusing original session id: %s' % sessionId)
+            sessionId = cherrypy.serving.session.__dict__.get(LoginController.ORIGINAL_SESSION_ID_KEY)
         #logger.debug('Session: %s' % ((cherrypy.session.__dict__)))
-        #logger.debug('Session cache length: %s' % (len(sessionCache)))
+        logger.debug('Session cache length: %s' % (len(sessionCache)))
         #logger.debug('Session cache: %s' % (sessionCache))
 
         # Check session.
-        if not sessionCache.has_key(sessionId):
+        # Try SingleSignOnManager first
+        ssoManager = SingleSignOnManager.getInstance()
+
+        # SSO Manager returns session info
+        sessionInfo = ssoManager.checkSession(sessionId)
+        if not sessionInfo:
+            # Cache has tuple (sessionInfo, updateTime)
+            sessionTuple = sessionCache.get(sessionId)
+            if sessionTuple:
+                sessionInfo = sessionTuple[0]
+        else:
+            logger.debug('Retrieved session %s from SSO Manager' % sessionId)
+            sessionCache[sessionId] = (sessionInfo, datetime.datetime.now())
+
+        if not sessionInfo:
             errorMsg = 'Invalid or expired session id: %s.' % sessionId
             logger.debug(errorMsg)
             raise DmHttpError(dmHttpStatus.DM_HTTP_UNAUTHORIZED, 'User Not Authorized', InvalidSession(errorMsg))
 
-        username = cherrypy.session.get(LoginController.SESSION_USERNAME_KEY)
+        username = sessionInfo.get(LoginController.SESSION_USERNAME_KEY)
+        cherrypy.session[LoginController.SESSION_ROLE_KEY] = sessionInfo[LoginController.SESSION_ROLE_KEY]
         logger.debug('Session id %s is valid (username: %s)' % (sessionId, username))
         if username:
             cherrypy.request.login = username