#47 .IsEqualTo only invokes funcs once now, needs refactoring to make it more generic