adds self reference and improve methods a little