Changed the structure, so it dosen't depend on one implementation
anymore.