http://weblogs.java.net/blog/enicholas/archive/2006/05/understanding_w.html