add Join annotation
add upper/lower trim methods
use generic type