working on interface and shit