Found issue with not calling designated initialiser, fixed and added test to cover the issue
Changed to override isEqual:, which returns NO for non ordered dictionaries or calls through to the classes equals method isEqualToOrderedDictionary:, the same applies for the isEqualToDictionary: method