add shift/ctrl/etc support