public synchronized UUID bind( InetAddress address,
				   int port,
				   //Map<String,BasicType> bindSettings 
				   Environment<String,BasicType> bindSettings
				   ) 
	throws IOException,
	       GeneralSecurityException {

	if( bindSettings.get(Constants.CONFIG_SERVER_PROTOCOL) == null )
	    bindSettings.put( Constants.CONFIG_SERVER_PROTOCOL, new BasicStringType(Constants.NAME_PROTOCOL_TCP) );


	if( bindSettings.get(Constants.CONFIG_SERVER_PROTOCOL).getString(Constants.NAME_PROTOCOL_TCP).equalsIgnoreCase(Constants.NAME_PROTOCOL_TCP) ) {
	    
	    ServerSocketThread server = new ServerSocketThread( this.getLogger(),
								address,
								port,
								bindSettings,
								this  // observer
								);
	    // Register server
	    this.serverSocketThreads.put( server.getUUID(), server );
	    
	    // Also store ID into settings
	    bindSettings.put( Constants.CONFIG_SERVER_ADDRESS, new BasicStringType(address.getHostName()) );
	    bindSettings.put( Constants.CONFIG_SERVER_PORT,    new BasicNumberType(port) );
	    bindSettings.put( Constants.KEY_ID,                new BasicUUIDType(server.getUUID()) );

	    // Tell the listeners about the new server
	    this.fireServerCreated( server.getUUID() );

	    // Then start thread
	    server.start();

	    // Return the new ID
	    return server.getUUID();

	} else if( bindSettings.get(Constants.KEY_PROTOCOL) != null || bindSettings.get(Constants.KEY_PROTOCOL).getString(Constants.NAME_PROTOCOL_UDP).equalsIgnoreCase(Constants.NAME_PROTOCOL_UDP) ) {
	    
	    throw new IOException( "Protocol UDP not yet supported, sorry." );
	    
	} else {

	    throw new IOException( "Unknown protocol: " + bindSettings.get(Constants.KEY_PROTOCOL) );

	}


    }