Read about some of the implementations here: