core algorithms models observers