optimizations on Decoder:
- Avoiding multiple instances
- stateless Decoder/Encoder (can always reuse the same instance now)
- avoiding intermediate Lists when possible (done on Transfer at this point only)
- a few optimizations based on tests