add constructor and destructor