private static ChannelServiceFactory createRawStack() {
		//LAYER 1: basic
		ChannelServiceFactory basic = ChannelServiceFactory.createFactory(null);

		//LAYER 2: Ensures that registerForReads/unregisterForReads lifecycle is independent of connect/disconnect
		//         for tcp AND udp
		Map<String, Object> props0 = new HashMap<String, Object>();
		props0.put(ChannelServiceFactory.KEY_IMPLEMENTATION_CLASS, ChannelServiceFactory.VAL_REGISTER_FOR_READ_MGR);
		props0.put(ChannelServiceFactory.KEY_CHILD_CHANNELMGR_FACTORY, basic);
		ChannelServiceFactory regReads = ChannelServiceFactory.createFactory(props0);
		
		//LAYER 3: special executor so channels are routed to their threads so ordering stays the same and you can
		//do decryption, or reform the packet before handing off to a threadpool that does nto map channel to thread
		Map<String, Object> props1 = new HashMap<String, Object>();
		props1.put(ChannelServiceFactory.KEY_IMPLEMENTATION_CLASS, ChannelServiceFactory.VAL_ROUTING_EXEC_MGR);
		props1.put(ChannelServiceFactory.KEY_CHILD_CHANNELMGR_FACTORY, regReads);
		ChannelServiceFactory routing = ChannelServiceFactory.createFactory(props1);
		
		//Layer 4: catch log exceptions thrown from the clients listeners
		Map<String, Object> props4 = new HashMap<String, Object>();
		props4.put(ChannelServiceFactory.KEY_IMPLEMENTATION_CLASS, ChannelServiceFactory.VAL_EXCEPTION_CHANNEL_MGR);
		props4.put(ChannelServiceFactory.KEY_CHILD_CHANNELMGR_FACTORY, routing);
		ChannelServiceFactory excFactory = ChannelServiceFactory.createFactory(props4);
		
		return excFactory;		
	}