added move constructors, saving up some memory