neede classes implemented first structure