This method feels a bit messy because of all the adaption going on.