add traverse and setattr funcs