See http://user.it.uu.se/~gusbj192/courses/M4CO