Rebuilding this from scratch due to the fact that its pretty outdated.