Basic implementation with several assumptions.