moved mode-map back into defvar
use defstruct instead of alist for throw results