I'd also think about getting Aberdeen-Inverness up to hourly. That's not so much a matter of full dualling as extra loops. Lengthen or move the awkward ones at Keith and Forres, and perhaps consider some new ones in between stations. The only bits that really need dualling are Aberdeen-Dyce and Inverness-Nairn, which would make it possible to build a station at Inverness Airport (at last!).
You would need to redouble either Elgin to Keith or Elgin to Forres for this to work well (either of which can be done with a few mins wait at one stop in one direction) - if you try to get the trains crossing at Elgin you need to do both insch to inverurie and keith to huntly, or put in some crazy waiting times.
edit: modified it slightly. Trains now have no need to wait for another train to pass. However it is with moving the Keith crossing loop.
edit2: okay. here's my timetable. The 47 minute wait at Inverness is annoying but unavoidable, as far as I can tell.
https://spreadsheets.google.com/spr...D7qhPdFJ5bG8wUUhtbEUxX0JjM2xxaVFrR0E&hl=en_US
The letters indicate specific trains. Unmarked trains are ones to/from Glasgow/Edinburgh. Train g can go off and do something else in the day, or sit in storage. 2 trains stay the night at Elgin, one on each platform. The platform is not needed for passing so the trains can sit there for a while if needed. I havent factored in any goods paths but I'm sure that wouldn't be an issue.
The timetable would require:
-Inverness to Nairn doubled
-Elgin to Forres doubled
-Keith passing loop moved to be on the station
-Dyce to Aberdeen doubled
giving:
- one train per hour aberdeen - inverness
- one train per hour aberdeen - dyce
- one train every other hour edinburgh/glasgow - inverurie
- extra trains in the peaks between elgin and inverness