work in progress
close to finish...