this it not going to be easy ;)