First version. Probably won't have time for improving on it.