This is a first working version.
Very Messy!