There have been two previous implementations, the first can be found here and the most recent can be found here