docs: synchronized Object getValueGuts(String id, boolean includeInAppDataChanges) {
          //create local variable - JIT performance improvement
          final boolean isTraceOn = com.ibm.websphere.ras.TraceComponent.isAnyTracingEnabled();
          if (isTraceOn && LoggingUtil.SESSION_LOGGER_WAS.isLoggable(Level.FINER)) {
              LoggingUtil.SESSION_LOGGER_WAS.entering(methodClassName, methodNames[GET_VALUE_GUTS]);
          }
  
          if (includeInAppDataChanges && appDataChanges == null) {
              if (com.ibm.websphere.ras.TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_WAS.isLoggable(Level.FINE)) {
                  LoggingUtil.SESSION_LOGGER_WAS.logp(Level.FINE, methodClassName, methodNames[GET_VALUE_GUTS], "init appDataChanges");
              }
              appDataChanges = new Hashtable<String, Object>();
          }
  
          Object returnValue = (mNonswappableData == null) ? null : getNonswappableData().get(id);
          if (returnValue == null) {
              if (isTraceOn && LoggingUtil.SESSION_LOGGER_WAS.isLoggable(Level.FINE)) {
                  LoggingUtil.SESSION_LOGGER_WAS.logp(Level.FINE, methodClassName, methodNames[GET_VALUE_GUTS], "Value from non-swappable is null for id " + id);
              }
              returnValue = getSwappableData().get(id);
          }
  
          if (returnValue != null) {
              if (isTraceOn && LoggingUtil.SESSION_LOGGER_WAS.isLoggable(Level.FINE)) {
                  LoggingUtil.SESSION_LOGGER_WAS.logp(Level.FINE, methodClassName, methodNames[GET_VALUE_GUTS], "Retrieved cached object for " + id);
              }
              returnValue = resolveObject(returnValue);
              if (includeInAppDataChanges)
                  includeInAppDataChanges(id, returnValue, GET_VALUE_GUTS);
          } else {
              //if this is a new session, don't access the database because
              //the session in memory is up-to-date..
              if (!isNew()) {
  
                  Thread t = Thread.currentThread();
                  //And don't go to database, if object is already removed from session
                  if (appDataRemovals != null) {
                      if (isTraceOn && LoggingUtil.SESSION_LOGGER_WAS.isLoggable(Level.FINE)) {
                          LoggingUtil.SESSION_LOGGER_WAS.logp(Level.FINE, methodClassName, methodNames[GET_VALUE_GUTS], "appDataRemovals is not null");
                      }
                      if (appDataTablesPerThread) {
                          if (appDataRemovals.get(t) != null && ((Hashtable) appDataRemovals.get(t)).get(id) != null) {
                              return returnValue; // null
                          }
  
                      } else { //appDataTablesPerSession
                          if (appDataRemovals.get(id) != null) {
                              return returnValue; // null
                          }
                      }
                  }
                  if (_sessions != null) {
                      // we may get a value if running mulitrow db
                      returnValue = _sessions.loadOneValue(id, this);
                  }
                  if (returnValue != null) {
                      returnValue = resolveObject(returnValue);
                      if (includeInAppDataChanges)
                          includeInAppDataChanges(id, returnValue, GET_VALUE_GUTS);
                      if (returnValue instanceof HttpSessionBindingListener) {
                          _attributeNames.put(id, Boolean.TRUE);
                      } else {
                          _attributeNames.put(id, Boolean.FALSE);
                      }
                      getSwappableData().put(id, returnValue);
                  }
              }
              if (isTraceOn && LoggingUtil.SESSION_LOGGER_WAS.isLoggable(Level.FINE)) {
                  String s = (returnValue == null) ? "null" : "not null";
                  LoggingUtil.SESSION_LOGGER_WAS.logp(Level.FINE, methodClassName, methodNames[GET_VALUE_GUTS], "Value from db is " + s + " for id " + id);
              }
          }
          if (isTraceOn && LoggingUtil.SESSION_LOGGER_WAS.isLoggable(Level.FINE)) {
              LoggingUtil.SESSION_LOGGER_WAS.exiting(methodClassName, methodNames[GET_VALUE_GUTS]);
          }
          return returnValue;
      }