Added interfaces + basic implementations