added type equality test
added reverse