Reworked hierarchy to allow constructor overloading