For anyone interested, I released my complete code for this and I am looking for any input on how to make it better: