http://cc.oulu.fi/~pleinon/