Full rewrite of nischelwitzer/smartfritz