I am sure there must be an alternative solutions other than multi-threading. I saw this article http://www.netomatix.com/Development/DataListPaging.aspx in this article it users query string but how can i use it without having to use querystring could someone please help? I now have created two stored proc one returns the total count of the result which is about 35000 and the one to display for a page currently being views i.e. adverts = myBLL.GetAdverts(country, city, adtype,NowViewing,pds.PageSize); -SQL SELECT * FROM ( select ROW_NUMBER() OVER(ORDER BY adid) as RowNum, a.* from advert where isActive=1 and c.countryname like '%'+@CountryName+'%' and a.adcity like '%'+@AdCity+'%' and a.AdSubCatType like '%'+@AdSubCatType+'%' ) as DerivedTableName WHERE RowNum BETWEEN @CurrentPageIndex AND (@CurrentPageIndex + @PageSize) - 1 order by adDate desc