implement base functionality (tests failing)