Performance fix. String concatenations are very slow in Objective-C. Class objects are used as dictionary keys now. Though we can not use Protocols as keys, so we still encode them to strings.