This advanced [JSup] feature enable a [JSup Channels|I/O Channel] to get its I/O hooks from a [JavaCode functions|JavaCode function] that will decide which tag (for instance based according to the tag class) will be bound to which device item and if in read/write only mode. The [JavaCode functions|JavaCode function] must accept an unique parameter: ChannelInfo ch And must return an Iterable object. Its signature should be: Iterable ''functionName''( ChannelInfo ch ) throws JException; The [JavaCode functions|JavaCode function] can determine which tag to include be enumerating the tags that belong to a certain [JSup Tag classes|tag class]. The following example provides MQTT I/O hook for the tag of [JSup Tag classes|tag class] named /device/onoff: final Vector v = new Vector<>(); for( final TagRef tag : getTagClass( "/device/onoff" ).tags() ) { v.add( new IOHookCodeCreatedInfo.N.Adapter( tag, "/JSupTest/device/onoff/"+tag.getName(), true, false, null, null, false ) ); } An [JSup Channels|I/O Channel] can have both [IOHook|I/O hooks] statically entered in the [JSup Tag dialog|tag dialog] and JavaCode function provided ones. The name of the [JavaCode functions|JavaCode function] that will provide [IOHook|I/O hooks] to a channel have to be specified in the ''Auto I/O hook JavaCode fun:'' in the [JSup Channels#Channel configuration|I/O channel dialog] dialog.