Copyright(C) 2010 noconoco.