Please visit this link to view the updated and improved version of this post.