Changing cache interface. This will lead to HUGE changes
New test cases needed
write test cases, again.
cache: done