reimplemented with pointer