accepts hashes