Major Overhaul of the whole class, see README