Take a look at Follow Me, sounds like it already does a lot of what your looking for. Feel free to look at the code too.