I'm a fan of [immutable objects][1] for their various benefits. Below is an example of how to make your `Ingredient` class immutable. Similar techniques can be made to your `Formula` class. I also highly recommend not using `ArrayList` in favor of a generic `List<Ingredient>` as [Trust me - I'm a Doctor][2] [recommends][3]. sealed class Ingredient { private readonly string name; private readonly decimal percentage; private readonly bool isFlour; private readonly decimal? weight; public string Name { get { return this.name; } } public decimal Percentage { get { return this.percentage; } } public bool IsFlour { get { return this.isFlour; } } public decimal? Weight { get { return this.weight; } } public Ingredient(string _Name, decimal _Percent, bool _IsFlour, decimal? _Weight) { this.name = _Name; this.percentage = _Percent; this.isFlour = _IsFlour; this.weight = _Weight; } } [1]: https://ericlippert.com/tag/immutability/ [2]: https://codereview.stackexchange.com/users/20868/patryk-%C4%86wiek [3]: https://codereview.stackexchange.com/a/20329/6172