Initial commit, needs tons of cleanup.