Add refresh

@nubs The first commit is so that I can reduce code duplication, but I'm not sure I like it.  Any ideas?