added types for Key & Val