completely new approach, again; read README for more info