**MAJOR** update / redesign, too much stuff to break down.