refactor: intercafes & abstract classes