Under the hood I had to create a few supporting libraries to make this stuff work