V3 low level search

I wanted the ability to pass a full object to the search function - so I can use it as a low-level method and write some other stuff to sit on top of it.