added ADT implementation