Added a few new abstraction methods to test bugs

- Attempting to fix a few bugs, and am moving some of the logic into a
  more readable function (or series of functions) to allow for easier
  testing and for better code maintenance.