This is just a weak attempt to learn this stuff.