Needs some work, but good for now.