E46 3-Series B48/B58 + ZF 8HP: Why one chassis name still hides several different cars
What the record says
The E46 public record is configuration-specific. A running B58 E46 Touring conversion with an M140i donor and custom engine mounts was reported by an editorial source. A separate field record documents an S54 E46 Touring with a RWD N55 8HP45 and TurboLamik control. Multiple vendors market E46 B58 or B48 mount kits and an E46 8HP transmission mount for 8HP45 and 8HP70.
A Touring result does not automatically cover a sedan or coupe. A mount kit listing is a component-market signal, not a complete compatibility statement. A vendor's own description may name configuration-specific work such as a rear-sump pan, transmission-pan fin trimming, or steering-rack boss clearance.
What you can use today
Record the recipient body style, steering side, production phase, original drivetrain, subframe and rack state, and baseline electrical state before ordering parts. Keep separate records for separate cars.
A practical builder checklist
E46 3-Series remains research content, not a customer manual or a fitment promise.
The E46 B48/B58 + ZF 8HP planning reference takes this research into a build-ready record system: donor and 8HP identity cards, controller-first decisions, measurement records, commissioning logs, and the full as-built record. See the E46 guide →
Before you buy anything — the compatibility checklist
The free B48/B58 compatibility checklist: what the donor must come with, what the 8HP adds, and the measurements that decide whether your exact chassis is a build or a different problem entirely.
FAQ
Does one E46 build answer the question for every E46?
No. Body style, steering side, production phase, drivetrain, and electrical state change the answer.
Can I copy a solution from a different-body or different-steering-side E46?
You can use it to identify a question. You cannot treat it as a verified answer until the same configuration is measured and tested.
What should I do next?
Complete the variant and identity records first. If a field is blank, treat it as a stop signal.