Edit: Newer version posted below.