Basic implementation up to eval