While that's nice and functional, and please correct me if I'm wrong, but that probably doesn't involve any cacheing. Since finding matches 400-410 involves finding the first 400 matches and discarding them, i would imagine that the DBI cacheing mechanism as well as CGI::Cache might be useful here, minimally. Unless I'm wrong about the cacheing, i might consider a stronger cacheing system. Perhaps when a user extracts a few from the beginning, the system-persistent CGI can do some forward-cacheing, expecting the user to submit for some more results. Just a thought on intelligent and efficient programming...