I'd first like to credit @Mike Self with finding this fix. He published a column on this back in 2007 (which he'd be happy to forward you), I'm just adding photos to his findings.
Main symptom - Your speedo needle pins to 120mph when you hit highway speeds.
Secondary symptom - Your speedo is slightly off and or you get needle fluttering below 10-ish mph.
Unrelated symptom - If your speedo needle is constantly fluttering throughout the speed range it's more likely that your cable is binding in the sheath. There are other posts on the best way to lubricate the speedo cable but note that just shooting lubricant down from the top might not work for your car. Models with a thermal reactor have an upper and lower cable with junction in-between that won't allow lube to get to the bottom half.
The square shaft that your speedo cable plugs into is pressed into a drum. The shaft can back its way out of the drum a few mm which allows the drum to move enough to drag against the needle drum it rotates within.
From Mike Self:
"the speedometer needle is not directly connected to the cable. The cable drives a drum with small magnets attached to it. The spinning, magnetized drum in turn drives a second aluminum drum, via a bit of physics known as “magnetic eddy currents.” Please don’t ask me to explain, but it works. The second drum is attached by a shaft to the speedometer needle."
A QUICK TEST:
To quickly test if this could be your issue remove the cluster. If you're car's missing the kick panel like mine no tools needed here! Just reach under and around back of the cluster, the 3 thumb nuts you need to remove are all knurled, you'll be able to feel them. One big one around the speedo cable, and 2 smaller ones (about 14mm) on either side of it. Pull the cluster out of the dash towards the steering wheel and unplug the wiring. Out it comes.
On the back of the speedo grab the tip of the square drive shaft and check for play. There shouldn't be any. If you have more than a mm it's time for a fix!
- Put a wrench on the large 22 or 23mm nut on the backside of the speedo and crack it loose, but don't remove it. (I did this later and it was more difficult)
- Remove the six 6mm nuts at the corners of the speedo and tach gauges.
- Unplug the gray/green/brown wiring plug and remove the gauges.
- Remove the 2 tiny screws on the back of the speedo and CAREFULLY pull it straight off. There is a very tiny pin shaft in the center of the needle drum you need to avoid tweaking. See below on the left.
- Notice the wear marks from the cable drum contacting the needle drum. This is due to the shaft of the cable drum backing out.
Place a socket or something similar under the cable drum and give the square drive a few light taps to re-seat it so it's flush in the drum.
- Once it's tapped in enough that there's no more play and the shaft spins freely you're fixed! Now's a good time to clean off the old grease on the gear drives and replace it. Mine was pretty hard so I used a q-tip and acetone to remove the old stuff then replaced it with a little wheel bearing grease. It's also a good time to clean the backside of the lenses!
* Be very careful when reassembling the cable drum to the needle drum to avoid bending the tiny center pin. You'll need to get them in place and very lightly slide the two around a bit until the tiny needle finds the hole and the cable drum drops into place. You'll know it's in place when there's no gap between the mating surfaces of the 2 screw bosses.
And as they say...installation is the reverse of removal. Hope this helps!