add libs
include libs
made it more functional
impl new interface