public synchronized int deregisterKey(final String base64PublicKey) throws NoSuchUserException {
		
		if( peers.remove(new KeyRegistrationRecord(base64PublicKey)) == false ) {
			throw new NoSuchUserException(base64PublicKey);
		}
		
		if( key_to_record.remove(base64PublicKey) == null ) {
			logger.warning("Inconsistent key->record / peers list state: " + base64PublicKey);
		}
		
		int updated = (new SQLStatementProcessor<Integer>("DELETE FROM registered_keys WHERE public_key = ?") {
			Integer process( PreparedStatement s ) throws SQLException {
				s.setString(1, base64PublicKey);
				int updated = s.executeUpdate();
				if( updated == 0 ) {
					logger.warning("Inconsist DB/peer cache state wrt " + base64PublicKey);
				}
				return updated;
			}
		}).doit();
		
		if( updated > 0 ) { 
			load();
			logger.info("Admin removed key: " + base64PublicKey);
		}
		
		return updated;
	}