Free API

1990 BMW 325I

2.5L I6 M20RWDAUTOMATICgas
Be the first sponsor for this vehicle

For $99, we generate the full set of step-by-step repair procedures for this exact vehicle. Free for everyone, forever, with your name on every one.

Sponsor — $99
Dead battery / stuck in Park? Emergency neutral procedure for this 325i
5-Year Cost of Ownership
$13,447 maintenance + known platform issues
~$2,689/yr · 220¢/mile equivalent · $7,739 maintenance + $5,008 expected platform issues
Compare this engine
vs
3.0L I6 N52
vs
2.5L I6 M54

Common Problems & Known Issues

The E30 325i with the M20B25 engine is a robust platform, but 30+ years old means cooling system failures, worn suspension bushings, and electrical gremlins are the norm. The straight-six engine is nearly bulletproof if maintained, but deferred maintenance leads to expensive head gasket and bottom-end failures.

Cooling System Catastrophic Failure (Radiator, Water Pump, Thermostat Housing)

Common · high severity
Typical onset: any mileage on original parts—age matters more than miles
Symptoms: Sudden overheating with coolant loss, Cracked plastic radiator neck or thermostat housing, Water pump bearing noise or weeping coolant, Steam from under hood
Fix: Replace entire cooling system as preventive maintenance: radiator, water pump, thermostat, hoses, expansion tank. 4-6 labor hours. Neglect leads to warped head and blown head gasket adding another 12-15 hours.
Estimated cost: $800-1,500 (preventive); $2,500-4,000 if head gasket blown

Cylinder Head Gasket Failure (M20B25)

Occasional · high severity
Typical onset: 120,000-180,000 mi or after overheating event
Symptoms: White smoke from exhaust, Coolant disappearing without visible leaks, Oil milkshake in valve cover or coolant overflow, Rough idle and misfires
Fix: Head removal, resurface, new gasket and bolts, valve stem seals while apart. 12-15 labor hours. Often combined with timing belt/chain service. If overheated badly, head may crack requiring replacement.
Estimated cost: $2,000-3,500

Timing Chain and Guides (M20 engines after 150k mi)

Common · high severity
Typical onset: 150,000-200,000 mi
Symptoms: Rattling from front of engine on cold start, Check engine light with cam/crank correlation codes, Loss of power and rough running, Metal shavings in oil
Fix: Replace timing chain, guides, tensioner rail, upper and lower sprockets. 8-10 labor hours. Failure destroys valves and pistons—catastrophic. Always do water pump and front main seal while in there.
Estimated cost: $1,800-2,800

Rear Subframe and Trailing Arm Bushings

Common · medium severity
Typical onset: 80,000-120,000 mi
Symptoms: Clunking over bumps from rear, Unstable rear end in corners—car feels loose, Visible cracks or voids in rubber bushings, Uneven rear tire wear
Fix: Replace all rear subframe mounts, trailing arm bushings, and shock mounts. Requires subframe drop. 6-8 labor hours. Use polyurethane for longevity but harsher ride, or OEM rubber for comfort.
Estimated cost: $1,200-2,000

Fuel System (Tank Rust, Pump, Injectors)

Occasional · medium severity
Typical onset: any mileage—age and ethanol damage
Symptoms: Hard starting or no-start when tank below 1/4, Fuel smell in cabin or trunk, Rough idle and poor fuel economy, Stalling at idle after warm-up
Fix: Fuel pump replacement in-tank: 2-3 hours. Injector cleaning or replacement: 3-4 hours. Rusty tank needs drop and replacement: 4-5 hours. Fuel filter every 30k miles is critical preventive.
Estimated cost: $400-800 (pump); $600-1,200 (injectors); $800-1,500 (tank)

Transmission Mounts and Guibo (Flex Disc)

Common · low severity
Typical onset: 60,000-100,000 mi
Symptoms: Clunk on 1st to 2nd shift or throttle lift, Vibration at highway speed, Visible torn rubber on guibo or collapsed trans mount
Fix: Replace transmission mount and guibo together. Also inspect center support bearing. 2-3 labor hours total. Cheap insurance against driveline damage.
Estimated cost: $400-700

Electrical: Window Regulators, Instrument Cluster Pixels, Wiring Harness Brittleness

Common · low severity
Typical onset: any mileage—age-related failure
Symptoms: Windows drop into door or move slowly, Speedometer or tach dead, missing LCD segments, Intermittent no-start or gauge flickering, Burnt smell from fuse box
Fix: Window regulator replacement per door: 2 hours. Cluster pixel repair: 1-2 hours or send out for rebuild. Engine harness replacement: 8-12 hours if brittle. Small electrical faults cascade into bigger headaches.
Estimated cost: $200-400 per window; $150-350 cluster rebuild; $1,000-1,800 harness
Owner tips
  • Replace the entire cooling system preventively before it grenades—cheap insurance against head gasket jobs.
  • Change oil every 5,000 miles with quality 10W-40 or 20W-50; the M20 engine will run 300k+ miles if fed clean oil.
  • Inspect timing chain tensioner at every valve adjustment (every 30k miles)—rattles on startup mean you're on borrowed time.
  • Budget $1,500-2,500 annually for deferred maintenance catching up on 30-year-old rubber and plastic parts.
Buy it if the cooling system, timing chain, and rear suspension have been done; otherwise, budget $3k-5k in catch-up maintenance within the first year—but a well-sorted E30 is one of the most reliable classic BMWs.
AI-assisted summary drawn from NHTSA recall data, our labor-times database, and platform knowledge. Not a substitute for a pre-purchase inspection on a specific vehicle.

Labor Times — 1990 BMW 325i

501 jobs across 17 categories

body (31)

brakes (41)

drivetrain (24)

electrical (74)

engine (64)

exhaust (23)

hvac (23)

interior (24)

maintenance (30)

steering (19)

suspension (42)

transmission (44)

🔧 Built by master technician Chris Hackleman · Master Technician · 20+ years.
Stuck on a repair? Take it to The Diag Desk — ask a master tech about this exact car → real human answer within 24h, never AI
Building an app?
Free API access to all this data — 10 requests/day, no card required.
Get an API key →
Run a shop?
Manage repairs, estimates, and customers with ShopBase — $249/mo, all features included. Built by the same team.
Try ShopBase →