diff --git a/js/app/controllers/EpnTapModule.js b/js/app/controllers/EpnTapModule.js
index 75da672..ee159cc 100644
--- a/js/app/controllers/EpnTapModule.js
+++ b/js/app/controllers/EpnTapModule.js
@@ -163,10 +163,7 @@ Ext.define('amdaDesktop.EpnTapModule', {
 	send a new query and fill `granulesGrid`.
 	*/
 	onServiceSelected: function(record) {
-		this.servicesStore.each(function(record) {
-			record.set('selected', false);
-		}, this);
-		record.set('selected', true);
+		this.granulesStore.selectedService = record.data.id;
 		Ext.Ajax.suspendEvent('requestexception');
 		Ext.Ajax.abortAll();
 		var nbRes = record.get('nb_results');
diff --git a/js/app/views/EpnTapUI.js b/js/app/views/EpnTapUI.js
index 4939dd4..1531265 100644
--- a/js/app/views/EpnTapUI.js
+++ b/js/app/views/EpnTapUI.js
@@ -7,6 +7,7 @@
  * 24/10/2016: file creation
  */
 
+Ext.require(['Ext.grid.plugin.BufferedRenderer']);
 /**
 `productTypesStore`: An ExtJS Store containing the list of the different data product types defined on all granules, on
 all available EPN-TAP services (defined in `generic_data/EpnTapData/metadata.json`, updated periodically with a cron
@@ -108,8 +109,7 @@ Ext.create('Ext.data.Store', {
 		{name: 'created', type: 'date', dateFormat: 'c'},
 		{name: 'updated', type: 'date', dateFormat: 'c'},
 		{name: 'nb_results', type: 'integer'},
-		{name: 'info', type: 'string'},
-		{name: 'selected', type: 'boolean'}
+		{name: 'info', type: 'string'}
 	],
 	proxy: {
 		type: 'ajax',
@@ -145,22 +145,30 @@ selected.
 - `thumbnail_url`: the thumbnail_url EPN-TAP parameter (ibid).
 */
 // TODO: Add granules filter (see http://docs.sencha.com/extjs/4.0.7/#!/example/grid-filtering/grid-filter-local.html)
+
+Ext.define('GranulesModel', {
+	extend: 'Ext.data.Model'
+	// columns are created dynamically
+});
+
 Ext.create('Ext.data.Store', {
 	storeId: 'granulesStore',
-	model: 'granulesModel', // Created dynamically
+	model: 'GranulesModel',
 	buffered: true,
-	leadingBufferZone: 50,
 	autoload: false,
-	pageSize: 50,
+	pageSize: 500,
+	leadingBufferZone: 0,
 	proxy: {
 		type: 'ajax',
 		url: 'php/epntap.php',
 		reader: { type: 'json', root: 'data'},
 		simpleSortMode: true
-	}, listeners: {
+	},
+	listeners: {
 		'beforeprefetch': function(store, operation) {
-			var servicesStore = Ext.data.StoreManager.lookup('servicesStore');
-			var service = servicesStore.getAt(servicesStore.findExact('selected', true)).data;
+			Ext.Ajax.suspendEvent('requestexception');
+			Ext.Ajax.abortAll();
+			var service = Ext.data.StoreManager.lookup('servicesStore').getById(store.selectedService).data;
 			store.getProxy().extraParams = {
 				'action': 'getGranules',
 				'url': service['access_url'],
@@ -636,6 +644,11 @@ Ext.define('amdaUI.EpnTapUI', {
 			title: 'Granules',
 			store: Ext.data.StoreManager.lookup('granulesStore'),
 			flex: 4,
+			plugins: {
+				ptype: 'bufferedrenderer',
+				trailingBufferZone: 20,
+				leadingBufferZone: 50
+			},
 			columns: []
 		};
 	}
--
libgit2 0.21.2