Reimplemented & improved API