API almost complete (listener still needs to be done)