initial generic support
add external generic support