some experiments and refactors