make substitutions optional

todo
- [ ] tests
- [ ] benchmarks
- [ ] docs