uses two kinds of keys