improve to better model structure