added some magic to constructors
some freaky restructurations