adding assertions
adding cache?