public Session EstablishSession(Subject targetSubject) {
		// Setup a session
		Session session = targetSubject.getSession();

		// Determine the rough use of the session, store it for easy access
		if (targetSubject.hasRole("nothing")) {
			session.setAttribute("USE", "");
			session.setAttribute("SecurityLevel", "0");
			session.setAttribute("OS", "AuthFailed");
		} else {
			// Load the OS type into the client attribute list for easy recall
			// later
			session.setAttribute("OS", System.getProperty("os.name").toString());
			// Create and save a small pseudo random integer that we will use to
			// uniquely identify this client (when used along with its IP
			// address)
			int SmallRandom = (1 + (int) (Math.random() * 65536));
			session.setAttribute("ID", String.valueOf(SmallRandom));
			// Authorization specific
			if (targetSubject.hasRole("secureTarget")) {
				session.setAttribute("USE", "private");
				session.setAttribute("SecurityLevel", "2");
			} else if (targetSubject.hasRole("insecureTarget")) {
				session.setAttribute("USE", "public");
				session.setAttribute("SecurityLevel", "1");
			} else if (targetSubject.hasRole("sourceTarget")) {
				session.setAttribute("USE", "server");
				session.setAttribute("SecurityLevel", "0");
			} else if (targetSubject.hasRole("resultTarget")) {
				session.setAttribute("USE", "dropoff");
				session.setAttribute("SecurityLevel", "0");
			}
		}
		// Return created and annotated session
		return session;
	}