public ChannelService createChannelManager(Map<String, Object> map) {
		if(map == null)
			throw new IllegalArgumentException("Properties cannot be null");
		Object id = map.get(ChannelManager.KEY_ID);
		Object o = map.get(ChannelManager.KEY_EXECUTORSVC_FACTORY);
		Object b = map.get(ChannelManager.KEY_BUFFER_FACTORY);
		if(id == null)
			throw new IllegalArgumentException("Properties must contain a value for property key=ChannelManagerFactory.KEY_ID");
		else if(o == null)
			throw new IllegalArgumentException("Key=ChannelManager.KEY_EXECUTORSVC_FACTORY must be specified");
		else if(!(o instanceof StartableExecutorService))
			throw new IllegalArgumentException("Key=ChannelManager.KEY_EXECUTORSVC_FACTORY " +
					"must contain an object of type="+StartableExecutorService.class.getName()+", obj="+o);
		else if(b == null)
			throw new IllegalArgumentException("Key=ChannelManager.KEY_BUFFER_FACTORY must be specified");
		else if(!(b instanceof BufferFactory))
			throw new IllegalArgumentException("Key=ChannelManager.KEY_BUFFER_FACTORY must " +
					"contain an object of type="+BufferFactory.class.getName()+", obj="+o);

		BufferFactory bufFactory = (BufferFactory)b;
		StartableExecutorService executor = (StartableExecutorService)o;
		//create a real ChannelManager for the SecureChannelManager to use
		ChannelService mgr = factory.createChannelManager(map);
        SpecialExecutor proxyExecutor = new SpecialExecutor(executor);
		return new ThdChannelService(id, mgr, proxyExecutor, bufFactory);
	}