discovered architectural problem in equating

- problem is with java type erasure + Functional interfaces (as you can
imagine)
- it leads to class cast exceptions unless we do some run-time type
restraints.