anchor.diff:  		local.password = local.authenticator.generateStrongPassword();
   		local.user = local.authenticator.createUser(local.accountName, local.password, local.password);
   		assertTrue(local.user.verifyPassword(local.password));
  -        try {
  -            local.authenticator.createUser(local.accountName, local.password, local.password); // duplicate user
  -            fail();
  -        } catch (cfesapi.org.owasp.esapi.errors.AuthenticationAccountsException e) {
  -            // success
  -        }
  -        try {
  -            local.authenticator.createUser(instance.ESAPI.randomizer().getRandomString(8, newJava("org.owasp.esapi.reference.DefaultEncoder").CHAR_ALPHANUMERICS), "password1", "password2"); // don't match
  -            fail();
  -        } catch (cfesapi.org.owasp.esapi.errors.AuthenticationCredentialsException e) {
  -            // success
  -        }
  -        try {
  -            local.authenticator.createUser(instance.ESAPI.randomizer().getRandomString(8, newJava("org.owasp.esapi.reference.DefaultEncoder").CHAR_ALPHANUMERICS), "weak1", "weak1");  // weak password
  -            fail();
  -        } catch (cfesapi.org.owasp.esapi.errors.AuthenticationCredentialsException e) {
  -            // success
  -        }
  -        try {
  -            local.authenticator.createUser("", "weak1", "weak1");  // null username
  -            fail();
  -        } catch (cfesapi.org.owasp.esapi.errors.AuthenticationAccountsException e) {
  -            // success
  -        }
  -        try {
  -            local.authenticator.createUser(instance.ESAPI.randomizer().getRandomString(8, newJava("org.owasp.esapi.reference.DefaultEncoder").CHAR_ALPHANUMERICS), "", "");  // null password
  -            fail();
  -        } catch (cfesapi.org.owasp.esapi.errors.AuthenticationCredentialsException e) {
  -            // success
  -        }
  -        try {
  -        	local.uName = "ea234kEknr";	//sufficiently random password that also works as a username
  -            local.authenticator.createUser(local.uName, local.uName, local.uName);  // using username as password
  -            fail();
  -        } catch (cfesapi.org.owasp.esapi.errors.AuthenticationCredentialsException e) {
  -            // success
  -        }
  -	}
  -
  +		try {
  +			local.authenticator.createUser(local.accountName, local.password, local.password);// duplicate user
  +			fail();
  +		}
  +		catch(cfesapi.org.owasp.esapi.errors.AuthenticationAccountsException e) {
  +			// success
  +		}
  +		try {
  +			local.authenticator.createUser(instance.ESAPI.randomizer().getRandomString(8, newJava("org.owasp.esapi.reference.DefaultEncoder").CHAR_ALPHANUMERICS), "password1", "password2");// don't match
  +			fail();
  +		}
  +		catch(cfesapi.org.owasp.esapi.errors.AuthenticationCredentialsException e) {
  +			// success
  +		}
  +		try {
  +			local.authenticator.createUser(instance.ESAPI.randomizer().getRandomString(8, newJava("org.owasp.esapi.reference.DefaultEncoder").CHAR_ALPHANUMERICS), "weak1", "weak1");// weak password
  +			fail();
  +		}
  +		catch(cfesapi.org.owasp.esapi.errors.AuthenticationCredentialsException e) {
  +			// success
  +		}
  +		try {
  +			local.authenticator.createUser("", "weak1", "weak1");// null username
  +			fail();
  +		}
  +		catch(cfesapi.org.owasp.esapi.errors.AuthenticationAccountsException e) {
  +			// success
  +		}
  +		try {
  +			local.authenticator.createUser(instance.ESAPI.randomizer().getRandomString(8, newJava("org.owasp.esapi.reference.DefaultEncoder").CHAR_ALPHANUMERICS), "", "");// null password
  +			fail();
  +		}
  +		catch(cfesapi.org.owasp.esapi.errors.AuthenticationCredentialsException e) {
  +			// success
  +		}
  +		try {
  +			local.uName = "ea234kEknr";//sufficiently random password that also works as a username
  +			local.authenticator.createUser(local.uName, local.uName, local.uName);// using username as password
  +			fail();
  +		}
  +		catch(cfesapi.org.owasp.esapi.errors.AuthenticationCredentialsException e) {
  +			// success
  +		}
  +	}
  +	
   	/**
   	 * Test of generateStrongPassword method, of class
   	 * org.owasp.esapi.Authenticator.
  
positive.code: 	 * @throws AuthenticationException
  	 *             the authentication exception
  	 */
  	public void function testGenerateStrongPassword() {
  		newJava("java.lang.System").out.println("generateStrongPassword");		
  		local.authenticator = instance.ESAPI.authenticator();
  		local.oldPassword = "iiiiiiiiii";  // i is not allowed in passwords - this prevents failures from containing pieces of old password
  		local.newPassword = "";
  		local.username = "FictionalEsapiUser";
  		local.user = new cfesapi.org.owasp.esapi.reference.DefaultUser(instance.ESAPI, local.username);
  		for (local.i = 0; local.i < 100; local.i++) {
              try {
                  local.newPassword = local.authenticator.generateStrongPassword();
                  local.authenticator.verifyPasswordStrength(local.oldPassword, local.newPassword, local.user);
              } catch( cfesapi.org.owasp.esapi.errors.AuthenticationException e ) {
              	newJava("java.lang.System").out.println( "  FAILED >> " & local.newPassword & " : " & e.getLogMessage());
                  fail();
              }
  		}
  		try {
  			local.authenticator.verifyPasswordStrength("test56^$test", "abcdx56^$sl", local.user );
  		} catch( cfesapi.org.owasp.esapi.errors.AuthenticationCredentialsException e ) {
  			// expected
  		}
  	}
  
  
  	/**
  	 * Test of getCurrentUser method, of class org.owasp.esapi.Authenticator.
  	 * 
       *
       * @throws Exception
       */
  	public void function testGetCurrentUser() {
  		newJava("java.lang.System").out.println("getCurrentUser");
          local.authenticator = instance.ESAPI.authenticator();
  		local.username1 = instance.ESAPI.randomizer().getRandomString(8, newJava("org.owasp.esapi.reference.DefaultEncoder").CHAR_ALPHANUMERICS);
  		local.username2 = instance.ESAPI.randomizer().getRandomString(8, newJava("org.owasp.esapi.reference.DefaultEncoder").CHAR_ALPHANUMERICS);
  		local.user1 = local.authenticator.createUser(local.username1, "getCurrentUser", "getCurrentUser");
  		local.user2 = local.authenticator.createUser(local.username2, "getCurrentUser", "getCurrentUser");		
  		local.user1.enable();
  	    local.request = new cfesapi.test.org.owasp.esapi.http.MockHttpServletRequest();
  		local.response = new cfesapi.test.org.owasp.esapi.http.MockHttpServletResponse();
          instance.ESAPI.httpUtilities().setCurrentHTTP(local.request, local.response);
  		local.user1.loginWithPassword(password="getCurrentUser");
  		local.currentUser = local.authenticator.getCurrentUser();
  		assertEquals( local.currentUser, local.user1 );
  		local.authenticator.setCurrentUser( user=local.user2 );
  		assertFalse( local.currentUser.getAccountName() == local.user2.getAccountName() );
  		
  		/* TODO: make this work too!
  		Runnable echo = new Runnable() {
  			private int count = 1;
              private boolean result = false;
  			public void run() {
  		        Authenticator auth = instance.ESAPI.authenticator();
  				User a = null;
  				try {
  					String password = auth.generateStrongPassword();
  					local.accountName = "TestAccount" & count++;
  					a = auth.getUser(local.accountName);
  					if ( a != null ) {
  						auth.removeUser(local.accountName);
  					}
  					a = auth.createUser(local.accountName, password, password);
  					auth.setCurrentUser(a);
  				} catch (cfesapi.org.owasp.esapi.errors.AuthenticationException e) {
  					e.printStackTrace();
  				}
  				User b = auth.getCurrentUser();
  				result &= a.equals(b);
  			}
  		};
          ThreadGroup tg = new ThreadGroup("test");
  		for ( int i = 0; i<10; i++ ) {
  			new Thread( tg, echo ).start();
  		}
          while (tg.activeCount() > 0 ) {
              Thread.sleep(100);
          }*/
  	}
  
  	/**
  	 * Test of getUser method, of class org.owasp.esapi.Authenticator.
  	 * 
  	 * @throws AuthenticationException
  	 *             the authentication exception
  	 */
  	public void function testGetUser() {
  		newJava("java.lang.System").out.println("getUser");
          local.authenticator = instance.ESAPI.authenticator();
  		local.password = local.authenticator.generateStrongPassword();
  		local.accountName = instance.ESAPI.randomizer().getRandomString(8, newJava("org.owasp.esapi.reference.DefaultEncoder").CHAR_ALPHANUMERICS);
  		local.authenticator.createUser(local.accountName, local.password, local.password);
  		assertTrue(isObject(local.authenticator.getUserByAccountName( local.accountName )));
  		assertFalse(isObject(local.authenticator.getUserByAccountName( instance.ESAPI.randomizer().getRandomString(8, newJava("org.owasp.esapi.reference.DefaultEncoder").CHAR_ALPHANUMERICS) )));
  	}
  	
      /**
       *
       * @throws org.owasp.esapi.errors.AuthenticationException
       */
      public void function testGetUserFromRememberToken() {
  		newJava("java.lang.System").out.println("getUserFromRememberToken");
          local.authenticator = instance.ESAPI.authenticator();
          local.authenticator.logout();  // in case anyone is logged in
  		local.password = local.authenticator.generateStrongPassword();
  		local.accountName = instance.ESAPI.randomizer().getRandomString(8, newJava("org.owasp.esapi.reference.DefaultEncoder").CHAR_ALPHANUMERICS);
  		local.user = local.authenticator.createUser(local.accountName, local.password, local.password);
  
negative.code: 		local.request.addParameter("username", local.username);
  		local.request.addParameter("password", local.password);
  		local.response = new cfesapi.test.org.owasp.esapi.http.MockHttpServletResponse();
  		local.test = local.authenticator.login(local.request, local.response);
  		assertTrue(local.test.isLoggedIn());
  	}
  	
  	/**
  