Revert "Revert "abstract object""

This reverts commit 64023f0bf2838481c43fbc52fb2a591aa3002431.