split into seperate components
have loader