upgraded shift-it with better exception messages