See code at GitHub