This module is waaay to big 
we need to split it somehow