Used descriptor protocol to make things slightly less hacky