Alter soup implementation + tests (but can be further refined)