There are a few 'TODO's that are pretty self explanatory.
Otherwise, the only issue I had was using getMonthsElapsed(), I ended up using the original transaction's timstamp instead.
Maybe we could remove getMonthsElapsed()?