mutable type abstraction (not working atm)