use alist instead of hash table makes code cleaner