The parts: The Universal Transmitter (pn 82-11-1-470-125). I paid $145 including shipping from the BMW Store, 800-543-1649. But you may want to check around more at your favorite parts purveyors. That's it!! No other parts needed. When you open it up and read the directions you'll think you have two problems. First, it says that it's for an E39. Don't worry!! It fits an E46 too. I did it last night and it fits just fine. The second problem you'll think you have is that it also says you need a replacement trim panel (it even mentions some part numbers). Don't worry about this either. The existing trim panel is all you need, as you'll discover as you read below.
The tools: a utility knife, and something small, thin, and soft to pry with. I used a clean, thin wooden stick, like the kind that ice cream can come mounted on. Like a tongue depressor, only smaller.
The steps: remove the trim panel that has the sunroof switch mounted in it by using the prying tool to gently pry out the sides of the trim panel. It doesn't take much to pop it out. Disconnect the wire from the sunroof switch. You don't need to remove the sunroof switch from the trim panel. If you have the cellular phone microphone option, disconnect that wire too.
On a clean surface, turn the trim panel over to the back side and you'll see the cutout hole where the transmitter will fit. With a utility knife, lightly score all four sides of the cutout without cutting the facing material on the front side of the trim panel. I went over the scores lightly several times until the cutout was loose. If you're patient and careful you'll avoid cutting the facing material. Turn the trim panel over to the front side and cut the cloth facing material leaving about one-quarter inch of material all the way around inside the cutout hole. Then gently pull the cutout piece out. The facing material is glued to the cutout piece so you'll have to work it a bit to get it out. Again, if you are patient and careful you'll avoid stretching or tearing the facing material. When done with this step, the hole in the facing material will be smaller than the cutout hole. Do not try to cut or trim the facing material. The facing material is stretchable and will conform to shape when you pop the transmitter into the hole you just made in the trim panel. Follow the directions that come with the universal transmitter for installing the transmitter into the cutout hole. It just pops into place easily without having to be forced. Just make sure you have the transmitter properly aligned according to the orientation of the trim panel and the front of the car. To find the wire for the transmitter, look on the passenger side of the sunroof mechanisms. You'll see a white connector bound to its wiring with some felt tape. Take the tape off and connect the wire to the transmitter. Then reconnect the sunroof switch wire and microphone wire. Finally, press the trim panel back into place, making sure you've got any wires stowed out of the way. Press around all four sides of the trim panel to make sure it's properly seated.
That's it!! Now all you have to do is follow the instructions that come with the transmitter to program it for your garage door opener. They have instructions for both single and rolling code openers. Total time, including programming, was 20 minutes!! It's a breeze!!
The savings: for me I paid $145 inclusive instead of the $179.95 plus tax the dealership wanted. And the dealership would have charged me for one-half hour labor. So I figure I saved somewhere in the neighborhood of $90-100!!