diff --git a/webapp/src/app/app.routing.spec.ts b/webapp/src/app/app.routing.spec.ts
index 8debd10f408a42ecc5a2946b509cc8ec3a69f16e..fce834c7342a543dec9d394c2c8c11c226d8f212 100644
--- a/webapp/src/app/app.routing.spec.ts
+++ b/webapp/src/app/app.routing.spec.ts
@@ -17,7 +17,7 @@ import { EditorialisationComponents } from './editorialisation/components';
 import { SharedModule } from './shared/shared.module';
 import { EditorialisationService, EditorialisationServices } from './editorialisation/services';
 import { HttpClientModule } from '@angular/common/http';
-import { MetadataService, GeosourceServices } from './geosource/services';
+import { DatasetService, GeosourceServices } from './geosource/services';
 import { EditorialisationResolvers, PostDetailResolver, PostsListResolver, PostVideoResolver } from './editorialisation/resolvers';
 import { EditorialisationServiceMock } from './editorialisation/services/editorialisation.service.mock';
 import { PageResolver } from './editorialisation/resolvers/page.resolver';
@@ -78,23 +78,23 @@ describe('App routing', () => {
 
   // ********* From geosource module ********* //
 
-  it('navigate to "/recherche" redirects you to /recherche/metadata', done => {
+  it('navigate to "/recherche" redirects you to /recherche/datasets', done => {
     router.navigateByUrl('/recherche').then(() => {
-      expect(router.routerState.snapshot.url).toBe('/recherche/metadata');
+      expect(router.routerState.snapshot.url).toBe('/recherche/datasets');
       done();
     });
   });
 
-  it('navigate to "/recherche/metadata" takes you to /metadata', done => {
-    router.navigateByUrl('/recherche/metadata').then(() => {
-      expect(router.routerState.snapshot.url).toBe('/recherche/metadata');
+  it('navigate to "/recherche/datasets" takes you to /datasets', done => {
+    router.navigateByUrl('/recherche/datasets').then(() => {
+      expect(router.routerState.snapshot.url).toBe('/recherche/datasets');
       done();
     });
   });
 
-  it('navigate to "/recherche/metadata/abcdef" takes you to /recherche/metadata/abcdef', done => {
-    router.navigateByUrl('/recherche/metadata/abcdef').then(() => {
-      expect(router.routerState.snapshot.url).toBe('/recherche/metadata/abcdef');
+  it('navigate to "/recherche/datasets/abcdef" takes you to /recherche/datasets/abcdef', done => {
+    router.navigateByUrl('/recherche/datasets/abcdef').then(() => {
+      expect(router.routerState.snapshot.url).toBe('/recherche/datasets/abcdef');
       done();
     });
   });
diff --git a/webapp/src/app/core/components/header/header.component.spec.ts b/webapp/src/app/core/components/header/header.component.spec.ts
index eebdc9fc0a1645cf0c27dc9156716a13070c5717..b4e3f4d2efd0f472619833a5f8e6944d42e44ecb 100644
--- a/webapp/src/app/core/components/header/header.component.spec.ts
+++ b/webapp/src/app/core/components/header/header.component.spec.ts
@@ -92,10 +92,10 @@ describe('HeaderComponent', () => {
     expect(location.path()).toBe('/accueil');
   }));
 
-  it('should redirect to recherche/metadata route when clicking the \'Les Données\' link', fakeAsync(() => {
+  it('should redirect to recherche/datasets route when clicking the \'Les Données\' link', fakeAsync(() => {
     debugElement.query(By.css('.research-link')).nativeElement.click();
     tick();
-    expect(location.path()).toBe('/recherche/metadata');
+    expect(location.path()).toBe('/recherche/datasets');
   }));
 
   it('should redirect to /demarche when clicking the Démarche link', fakeAsync(() => {
diff --git a/webapp/src/app/core/components/main/main.component.spec.ts b/webapp/src/app/core/components/main/main.component.spec.ts
index d9c7b9e1a7174b790ae509f538f6a0a64e720f5f..9b9f9bf7add429724b1b292cdc45a95d96676c64 100644
--- a/webapp/src/app/core/components/main/main.component.spec.ts
+++ b/webapp/src/app/core/components/main/main.component.spec.ts
@@ -9,9 +9,9 @@ import { Router } from '@angular/router';
 import { Component } from '@angular/core';
 
 @Component({
-  template: `metadata`
+  template: `app-dataset-list`
 })
-export class MetadataListComponent {
+export class DatasetListComponent {
 }
 
 
@@ -24,7 +24,7 @@ describe('MainComponent', () => {
     TestBed.configureTestingModule({
       declarations: [
         MainComponent,
-        MetadataListComponent,
+        DatasetListComponent,
         MockComponent({ selector: 'app-header' }),
         MockComponent({ selector: 'app-footer' }),
       ],
@@ -32,11 +32,11 @@ describe('MainComponent', () => {
         RouterTestingModule.withRoutes([
           {
             path: '',
-            redirectTo: 'metadata',
+            redirectTo: 'datasets',
             pathMatch: 'full'
           },
-          { path: 'metadata',
-            component: MetadataListComponent
+          { path: 'datasets',
+            component: DatasetListComponent
           },
         ]),
       ]
@@ -54,11 +54,11 @@ describe('MainComponent', () => {
     expect(component).toBeTruthy();
   });
 
-  it('navigate to "" redirects you to /metadata', fakeAsync(() => {
+  it('navigate to "" redirects you to /datasets', fakeAsync(() => {
     const router: Router = TestBed.get(Router);
     location = TestBed.get(Location);
     router.navigate(['']);
     tick(50);
-    expect(location.path()).toBe('/metadata');
+    expect(location.path()).toBe('/datasets');
   }));
 });
diff --git a/webapp/src/app/geosource/components/metadata-detail/metadata-detail.component.html b/webapp/src/app/geosource/components/dataset-detail/dataset-detail.component.html
similarity index 100%
rename from webapp/src/app/geosource/components/metadata-detail/metadata-detail.component.html
rename to webapp/src/app/geosource/components/dataset-detail/dataset-detail.component.html
diff --git a/webapp/src/app/geosource/components/metadata-detail/metadata-detail.component.scss b/webapp/src/app/geosource/components/dataset-detail/dataset-detail.component.scss
similarity index 100%
rename from webapp/src/app/geosource/components/metadata-detail/metadata-detail.component.scss
rename to webapp/src/app/geosource/components/dataset-detail/dataset-detail.component.scss
diff --git a/webapp/src/app/geosource/components/metadata-detail/metadata-detail.component.spec.ts b/webapp/src/app/geosource/components/dataset-detail/dataset-detail.component.spec.ts
similarity index 71%
rename from webapp/src/app/geosource/components/metadata-detail/metadata-detail.component.spec.ts
rename to webapp/src/app/geosource/components/dataset-detail/dataset-detail.component.spec.ts
index 719c5a09de44affe2fae94855d2856575cf2664e..1a16ca4c26a59524da30d05e95db28078986a2a8 100644
--- a/webapp/src/app/geosource/components/metadata-detail/metadata-detail.component.spec.ts
+++ b/webapp/src/app/geosource/components/dataset-detail/dataset-detail.component.spec.ts
@@ -2,13 +2,13 @@ import { async, ComponentFixture, TestBed, fakeAsync } from '@angular/core/testi
 import { DebugElement, Directive, Input, NO_ERRORS_SCHEMA } from '@angular/core';
 import { ActivatedRoute, convertToParamMap, ParamMap } from '@angular/router';
 import { Observable } from 'rxjs/Observable';
-import { MetadataDetailComponent } from './metadata-detail.component';
-import { MetadataService} from '../../services/metadata.service';
+import { DatasetDetailComponent } from './dataset-detail.component';
+import { DatasetService} from '../../services/dataset.service';
 import { Metadata } from '../../models';
 import { RouterTestingModule } from '@angular/router/testing';
 import 'rxjs/add/observable/of';
 
-describe('MetadataDetailComponent', () => {
+describe('DatasetDetailComponent', () => {
 
   const metadata = {
     title: 'Metadata Title',
@@ -21,9 +21,9 @@ describe('MetadataDetailComponent', () => {
 
     const metadataId = 1;
 
-    let component: MetadataDetailComponent;
+    let component: DatasetDetailComponent;
     let activatedRouteMock: ActivatedRoute;
-    let metadataServiceMock: MetadataService;
+    let datasetServiceMock: DatasetService;
 
     beforeEach(() => {
       activatedRouteMock = {
@@ -31,13 +31,13 @@ describe('MetadataDetailComponent', () => {
           return null;
         },
       } as ActivatedRoute;
-      metadataServiceMock = jasmine.createSpyObj('metadataService', {
+      datasetServiceMock = jasmine.createSpyObj('datasetService', {
         getMetadataById: Observable.of(metadata),
       });
-      component = new MetadataDetailComponent(activatedRouteMock, metadataServiceMock);
+      component = new DatasetDetailComponent(activatedRouteMock, datasetServiceMock);
     });
 
-    it('should get metadata ID in path and get metadata details from service', () => {
+    it('should get dataset ID in path and get metadata details from service', () => {
       // Given
       const paramMapSpy = spyOnProperty(activatedRouteMock, 'paramMap', 'get').and
         .returnValue(Observable.of(convertToParamMap({ id: metadataId })));
@@ -47,7 +47,7 @@ describe('MetadataDetailComponent', () => {
 
       // Then
       expect(paramMapSpy).toHaveBeenCalled();
-      expect(metadataServiceMock.getMetadataById).toHaveBeenCalledWith(metadataId);
+      expect(datasetServiceMock.getMetadataById).toHaveBeenCalledWith(metadataId);
       expect(component.metadata).toBe(metadata);
     });
 
@@ -55,14 +55,14 @@ describe('MetadataDetailComponent', () => {
 
   describe('template', () => {
 
-    let fixture: ComponentFixture<MetadataDetailComponent>;
-    let comp: MetadataDetailComponent;
+    let fixture: ComponentFixture<DatasetDetailComponent>;
+    let comp: DatasetDetailComponent;
     let de: DebugElement;
 
     beforeEach(() => {
       TestBed.configureTestingModule({
         declarations: [
-          MetadataDetailComponent
+          DatasetDetailComponent
         ],
         imports: [
           RouterTestingModule,
@@ -72,7 +72,7 @@ describe('MetadataDetailComponent', () => {
         ],
         providers: [
           {
-            provide: MetadataService,
+            provide: DatasetService,
             useValue: {
               getMetadataById(): Observable<Metadata> {
                 return Observable.of(metadata);
@@ -84,7 +84,7 @@ describe('MetadataDetailComponent', () => {
     });
 
     beforeEach(fakeAsync(() => {
-      fixture = TestBed.createComponent(MetadataDetailComponent);
+      fixture = TestBed.createComponent(DatasetDetailComponent);
       de = fixture.debugElement;
       comp = fixture.componentInstance;
       fixture.detectChanges();
diff --git a/webapp/src/app/geosource/components/metadata-detail/metadata-detail.component.ts b/webapp/src/app/geosource/components/dataset-detail/dataset-detail.component.ts
similarity index 55%
rename from webapp/src/app/geosource/components/metadata-detail/metadata-detail.component.ts
rename to webapp/src/app/geosource/components/dataset-detail/dataset-detail.component.ts
index ebb42745e15de644bf71ccde4e2210bdb5708f1a..31221b74f144a2dacf31b5a4dd0bbe8087ffecdd 100644
--- a/webapp/src/app/geosource/components/metadata-detail/metadata-detail.component.ts
+++ b/webapp/src/app/geosource/components/dataset-detail/dataset-detail.component.ts
@@ -2,26 +2,26 @@ import { Component, OnInit } from '@angular/core';
 import { Metadata } from '../../models';
 import { Observable } from 'rxjs/Observable';
 import { Router, ActivatedRoute, ParamMap } from '@angular/router';
-import { MetadataService } from '../../services';
+import { DatasetService } from '../../services';
 import 'rxjs/add/operator/switchMap';
 
 @Component({
-  selector: 'app-metadata-detail',
-  templateUrl: './metadata-detail.component.html',
-  styleUrls: ['./metadata-detail.component.scss']
+  selector: 'app-dataset-detail',
+  templateUrl: './dataset-detail.component.html',
+  styleUrls: ['./dataset-detail.component.scss']
 })
-export class MetadataDetailComponent implements OnInit {
+export class DatasetDetailComponent implements OnInit {
 
   metadata: Metadata;
 
   constructor(
     private _route: ActivatedRoute,
-    private _metadataService: MetadataService
+    private _datasetService: DatasetService
   ) {}
 
   ngOnInit() {
     this._route.paramMap
-      .switchMap((params: ParamMap) => this._metadataService.getMetadataById(params.get('id')))
+      .switchMap((params: ParamMap) => this._datasetService.getMetadataById(params.get('id')))
       .subscribe((metadata: Metadata) => {
         this.metadata = metadata;
       });
diff --git a/webapp/src/app/geosource/components/metadata-list/metadata-list.component.html b/webapp/src/app/geosource/components/dataset-list/dataset-list.component.html
similarity index 100%
rename from webapp/src/app/geosource/components/metadata-list/metadata-list.component.html
rename to webapp/src/app/geosource/components/dataset-list/dataset-list.component.html
diff --git a/webapp/src/app/geosource/components/metadata-list/metadata-list.component.scss b/webapp/src/app/geosource/components/dataset-list/dataset-list.component.scss
similarity index 100%
rename from webapp/src/app/geosource/components/metadata-list/metadata-list.component.scss
rename to webapp/src/app/geosource/components/dataset-list/dataset-list.component.scss
diff --git a/webapp/src/app/geosource/components/metadata-list/metadata-list.component.spec.ts b/webapp/src/app/geosource/components/dataset-list/dataset-list.component.spec.ts
similarity index 88%
rename from webapp/src/app/geosource/components/metadata-list/metadata-list.component.spec.ts
rename to webapp/src/app/geosource/components/dataset-list/dataset-list.component.spec.ts
index c097e24177c27ac25f9627e6a57719f2e8d79175..3a2ad8dbcbe66a0552d0d03235869778711aa075 100644
--- a/webapp/src/app/geosource/components/metadata-list/metadata-list.component.spec.ts
+++ b/webapp/src/app/geosource/components/dataset-list/dataset-list.component.spec.ts
@@ -1,7 +1,7 @@
 import { async, ComponentFixture, TestBed } from '@angular/core/testing';
-import { MetadataListComponent } from './metadata-list.component';
+import { DatasetListComponent } from './dataset-list.component';
 import { ActivatedRoute } from '@angular/router';
-import { MetadataService, ElasticsearchService } from '../../services';
+import { DatasetService, ElasticsearchService } from '../../services';
 import { Observable } from 'rxjs/Observable';
 import { IMetadata, Dataset, SearchSuggestion } from '../../models';
 import { RouterTestingModule } from '@angular/router/testing';
@@ -15,7 +15,7 @@ import { FilterDetailComponent } from '../filter-list/filter-detail/filter-detai
 import { PaginatorComponent } from '../../../shared/components/paginator/paginator.component';
 import { FormsModule } from '@angular/forms';
 
-describe('MetadataListComponent', () => {
+describe('DatasetListComponent', () => {
   const datasetList = [{
     dataset_id: 'abcesr',
     highlights: {
@@ -58,9 +58,9 @@ describe('MetadataListComponent', () => {
     }
   }] as Dataset[];
 
-  let component: MetadataListComponent;
-  let fixture: ComponentFixture<MetadataListComponent>;
-  let service: MetadataService;
+  let component: DatasetListComponent;
+  let fixture: ComponentFixture<DatasetListComponent>;
+  let service: DatasetService;
   let elasticsearchService: ElasticsearchService;
 
   const searchSubject = new Subject<string>();
@@ -68,7 +68,7 @@ describe('MetadataListComponent', () => {
   beforeEach(async(() => {
     TestBed.configureTestingModule({
       declarations: [
-        MetadataListComponent,
+        DatasetListComponent,
         MockComponent({ selector: 'app-sort' }),
         FilterListComponent,
         FilterDetailComponent,
@@ -81,7 +81,7 @@ describe('MetadataListComponent', () => {
         FormsModule
       ],
       providers: [
-        MetadataService,
+        DatasetService,
         ElasticsearchService
       ],
     })
@@ -89,9 +89,9 @@ describe('MetadataListComponent', () => {
   }));
 
   beforeEach(() => {
-    fixture = TestBed.createComponent(MetadataListComponent);
+    fixture = TestBed.createComponent(DatasetListComponent);
     component = fixture.componentInstance;
-    service = TestBed.get(MetadataService);
+    service = TestBed.get(DatasetService);
     elasticsearchService  = TestBed.get(ElasticsearchService);
     spyOn(elasticsearchService, 'getSuggestion').and.returnValue(Observable.of(new SearchSuggestion()));
     fixture.detectChanges();
@@ -152,13 +152,13 @@ describe('MetadataListComponent', () => {
       expect(component.paginator.pageSize).toEqual(5);
     });
 
-    it('should get count of metadata from service', () => {
+    it('should get count of dataset from service', () => {
       // When
       component.search();
       expect(component.paginator.length).toBe(10);
     });
 
-    it('should get the list of metadata from service', () => {
+    it('should get the list of dataset from service', () => {
       component.search();
       expect(component.datasetList).toBe(datasetList);
     });
diff --git a/webapp/src/app/geosource/components/metadata-list/metadata-list.component.ts b/webapp/src/app/geosource/components/dataset-list/dataset-list.component.ts
similarity index 60%
rename from webapp/src/app/geosource/components/metadata-list/metadata-list.component.ts
rename to webapp/src/app/geosource/components/dataset-list/dataset-list.component.ts
index c22e4ed2c15e8bceacb3ee1178a0446b93c6ad0f..6cd414b8b9bbe0f3ac903cbcff7d485e9f21c999 100644
--- a/webapp/src/app/geosource/components/metadata-list/metadata-list.component.ts
+++ b/webapp/src/app/geosource/components/dataset-list/dataset-list.component.ts
@@ -1,22 +1,16 @@
 import { Component, OnInit, OnDestroy, ViewChild } from '@angular/core';
-import { MetadataService } from '../../services/metadata.service';
+import { DatasetService } from '../../services/dataset.service';
 import { Dataset, IMetadataUri, SearchSuggestion } from '../../models';
 import { Subscription } from 'rxjs/Subscription';
 import { ElasticsearchService } from '../../services';
-
-interface PaginatorOptions {
-  pageIndex: number;
-  length: number;
-  pageSize: number;
-  pageSizeOptions: number[];
-}
+import { PaginatorOptions } from '../../../shared/models';
 
 @Component({
-  selector: 'app-metadata-list',
-  templateUrl: './metadata-list.component.html',
-  styleUrls: ['./metadata-list.component.scss']
+  selector: 'app-dataset-list',
+  templateUrl: './dataset-list.component.html',
+  styleUrls: ['./dataset-list.component.scss']
 })
-export class MetadataListComponent implements OnInit, OnDestroy {
+export class DatasetListComponent implements OnInit, OnDestroy {
 
   datasetList: Dataset[];
   searchChangeSub: Subscription;
@@ -34,17 +28,17 @@ export class MetadataListComponent implements OnInit, OnDestroy {
   suggestion = new SearchSuggestion({});
 
   constructor(
-    private metadataService: MetadataService,
+    private datasetService: DatasetService,
     private elasticsearchService: ElasticsearchService
   ) { }
 
   ngOnInit() {
     this.loading = true;
-    this.paginator.pageIndex = this.metadataService.pageIndex + 1;
-    this.paginator.pageSize = this.metadataService.pageSize;
+    this.paginator.pageIndex = this.datasetService.pageIndex + 1;
+    this.paginator.pageSize = this.datasetService.pageSize;
     this.search();
     this.getSuggestion();
-    this.searchChangeSub = this.metadataService.searchChange$.subscribe(
+    this.searchChangeSub = this.datasetService.searchChange$.subscribe(
       (value) => {
         this.showProgressBar = true;
         this.search();
@@ -59,12 +53,12 @@ export class MetadataListComponent implements OnInit, OnDestroy {
 
   search() {
     this.loading = true;
-    this.metadataService.getDatasetList().subscribe(
+    this.datasetService.getDatasetList().subscribe(
       (res) => {
         this.datasetList = res;
-        this.paginator.pageSize = this.metadataService.pageSize;
-        this.paginator.pageIndex = this.metadataService.pageIndex + 1;
-        this.paginator.length = this.metadataService.resultsCount;
+        this.paginator.pageSize = this.datasetService.pageSize;
+        this.paginator.pageIndex = this.datasetService.pageIndex + 1;
+        this.paginator.length = this.datasetService.resultsCount;
         this.showProgressBar = false;
         this.loading = false;
       }, (err) => {
@@ -73,13 +67,13 @@ export class MetadataListComponent implements OnInit, OnDestroy {
     );
   }
 
-  // When pagination is changed by user, we update metadata with new pagination options
+  // When pagination is changed by user, we update datasetList with new pagination options
   changePagination(pageIndex) {
-    this.metadataService.paginationChanged(this.paginator.pageSize, pageIndex - 1 );
+    this.datasetService.paginationChanged(this.paginator.pageSize, pageIndex - 1 );
   }
 
   changePageSize(pageSize) {
-    this.metadataService.paginationChanged(pageSize, 0 );
+    this.datasetService.paginationChanged(pageSize, 0 );
   }
 
   formatFoundItem(e) {
@@ -97,7 +91,7 @@ export class MetadataListComponent implements OnInit, OnDestroy {
   }
 
   getSuggestion() {
-    this.elasticsearchService.getSuggestion(this.metadataService.searchString).subscribe(
+    this.elasticsearchService.getSuggestion(this.datasetService.searchString).subscribe(
       (suggestion) => {
         this.suggestion = suggestion;
         if (this.suggestion.text !== '' && this.suggestion.text !== null && this.suggestion.text !== undefined) {
@@ -110,7 +104,7 @@ export class MetadataListComponent implements OnInit, OnDestroy {
   }
 
   useSuggestion() {
-    this.metadataService.searchChanged(this.suggestion.text);
+    this.datasetService.searchChanged(this.suggestion.text);
   }
 
 }
diff --git a/webapp/src/app/geosource/components/filter-list/filter-detail/filter-detail.component.spec.ts b/webapp/src/app/geosource/components/filter-list/filter-detail/filter-detail.component.spec.ts
index a197127da8edd707b603ecbedbfcbfb43b9e5667..120dee2590706ae3b17789884908f0f3e7f47f7f 100644
--- a/webapp/src/app/geosource/components/filter-list/filter-detail/filter-detail.component.spec.ts
+++ b/webapp/src/app/geosource/components/filter-list/filter-detail/filter-detail.component.spec.ts
@@ -1,7 +1,7 @@
 import { async, ComponentFixture, TestBed } from '@angular/core/testing';
 
 import { FilterDetailComponent } from './filter-detail.component';
-import { MetadataService, ElasticsearchService } from '../../../services';
+import { DatasetService, ElasticsearchService } from '../../../services';
 import { HttpClientModule } from '@angular/common/http';
 import { FilterListComponent } from '../..';
 import { Component } from '@angular/core';
@@ -20,7 +20,7 @@ describe('FilterDetailComponent', () => {
         HttpClientModule
       ],
       providers: [
-        MetadataService,
+        DatasetService,
         ElasticsearchService
       ]
     })
diff --git a/webapp/src/app/geosource/components/filter-list/filter-detail/filter-detail.component.ts b/webapp/src/app/geosource/components/filter-list/filter-detail/filter-detail.component.ts
index 94b4222006bf8551d667a4d9a9ac1e5a88b84903..b26d7c2d5c70698bef7fab04498afb4cf1e839b5 100644
--- a/webapp/src/app/geosource/components/filter-list/filter-detail/filter-detail.component.ts
+++ b/webapp/src/app/geosource/components/filter-list/filter-detail/filter-detail.component.ts
@@ -1,4 +1,4 @@
-import {MetadataService} from '../../../services/metadata.service';
+import { DatasetService } from '../../../services/dataset.service';
 import { Component, OnInit, Input } from '@angular/core';
 import { IFilter } from '../../../models';
 
@@ -11,7 +11,7 @@ export class FilterDetailComponent implements OnInit {
   @Input() filter: IFilter;
   showList = false;
   constructor(
-    private _metadataService: MetadataService
+    private _datasetService: DatasetService
   ) {}
 
   ngOnInit() {
@@ -45,14 +45,14 @@ export class FilterDetailComponent implements OnInit {
   }
 
   addFilter(field, value) {
-    this._metadataService.addFilter(field, value);
+    this._datasetService.addFilter(field, value);
   }
 
   changeFilter(field, aggregation) {
     if (aggregation.isActive) {
-      this._metadataService.removeFilter(field, aggregation);
+      this._datasetService.removeFilter(field, aggregation);
     } else {
-      this._metadataService.addFilter(field, aggregation);
+      this._datasetService.addFilter(field, aggregation);
     }
   }
 
diff --git a/webapp/src/app/geosource/components/filter-list/filter-list.component.spec.ts b/webapp/src/app/geosource/components/filter-list/filter-list.component.spec.ts
index 25548b73065cbddf6b0cb08fb018c1ac6b2cb648..465193ef44fe2528dbfa4124e5cde9f8f4fa813b 100644
--- a/webapp/src/app/geosource/components/filter-list/filter-list.component.spec.ts
+++ b/webapp/src/app/geosource/components/filter-list/filter-list.component.spec.ts
@@ -2,7 +2,7 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing';
 
 import { FilterListComponent } from './filter-list.component';
 import { FilterDetailComponent } from './filter-detail/filter-detail.component';
-import { MetadataService, ElasticsearchService } from '../../services';
+import { DatasetService, ElasticsearchService } from '../../services';
 import { HttpClientModule } from '@angular/common/http';
 
 describe('FilterListComponent', () => {
@@ -19,7 +19,7 @@ describe('FilterListComponent', () => {
         HttpClientModule
       ],
       providers: [
-        MetadataService,
+        DatasetService,
         ElasticsearchService
       ]
     })
diff --git a/webapp/src/app/geosource/components/filter-list/filter-list.component.ts b/webapp/src/app/geosource/components/filter-list/filter-list.component.ts
index b5044a9221536881cf670ec86d642be883a438ec..21fd7129e7677bff243bd3e8cd560bf2b0477fed 100644
--- a/webapp/src/app/geosource/components/filter-list/filter-list.component.ts
+++ b/webapp/src/app/geosource/components/filter-list/filter-list.component.ts
@@ -1,5 +1,5 @@
 import { Component, OnInit, OnDestroy } from '@angular/core';
-import { MetadataService } from '../../services';
+import { DatasetService } from '../../services';
 import { Subscription } from 'rxjs/Subscription';
 import { IFilter } from '../../models';
 
@@ -10,17 +10,17 @@ import { IFilter } from '../../models';
 })
 export class FilterListComponent implements OnInit, OnDestroy {
 
-  private _metadataReloaded: Subscription;
+  private _datasetsReloaded: Subscription;
   filters: Array<IFilter>;
 
   constructor(
-    private _metadataService: MetadataService
+    private _datasetService: DatasetService
   ) {}
 
   ngOnInit() {
-    this._metadataReloaded = this._metadataService.metadataReloaded$.subscribe(
+    this._datasetsReloaded = this._datasetService.datasetsReloaded$.subscribe(
       (value) => {
-        const filters = this._metadataService.filters;
+        const filters = this._datasetService.filters;
         // If one filter is used as an active filter, we remove it of 'aggregations' property
         // that are used to display the filters categories
         filters.forEach(filter => {
@@ -38,11 +38,11 @@ export class FilterListComponent implements OnInit, OnDestroy {
   }
 
   removeFilter(field, value) {
-    this._metadataService.removeFilter(field, value);
+    this._datasetService.removeFilter(field, value);
   }
 
   ngOnDestroy() {
-    this._metadataReloaded.unsubscribe();
+    this._datasetsReloaded.unsubscribe();
   }
 
 }
diff --git a/webapp/src/app/geosource/components/index.ts b/webapp/src/app/geosource/components/index.ts
index ac6b444dca57c051503d04c81d8627622d997dee..ad0621fdea9d5352a29d2ff38bc18a7c0524c668 100644
--- a/webapp/src/app/geosource/components/index.ts
+++ b/webapp/src/app/geosource/components/index.ts
@@ -1,21 +1,21 @@
-import { MetadataListComponent } from './metadata-list/metadata-list.component';
-import { MetadataDetailComponent } from './metadata-detail/metadata-detail.component';
+import { DatasetListComponent } from './dataset-list/dataset-list.component';
+import { DatasetDetailComponent } from './dataset-detail/dataset-detail.component';
 import { SearchBarComponent } from './search-bar/search-bar.component';
 import { ResearchComponent } from './research/research.component';
 import { SortComponent } from './sort/sort.component';
 import { FilterListComponent } from './filter-list/filter-list.component';
 import { FilterDetailComponent } from './filter-list/filter-detail/filter-detail.component';
 
-export * from './metadata-detail/metadata-detail.component';
-export * from './metadata-list/metadata-list.component';
+export * from './dataset-detail/dataset-detail.component';
+export * from './dataset-list/dataset-list.component';
 export * from './filter-list/filter-list.component';
 export * from './search-bar/search-bar.component';
 export * from './research/research.component';
 export * from './sort/sort.component';
 
 export const GeosourceComponents = [
-  MetadataDetailComponent,
-  MetadataListComponent,
+  DatasetDetailComponent,
+  DatasetListComponent,
   SearchBarComponent,
   ResearchComponent,
   SortComponent,
diff --git a/webapp/src/app/geosource/components/research/research.component.spec.ts b/webapp/src/app/geosource/components/research/research.component.spec.ts
index 1797f8343cac5ababbb5b4149d13a44478181d20..0e5771dd8289ee41b727fb540a665b6e5ba83089 100644
--- a/webapp/src/app/geosource/components/research/research.component.spec.ts
+++ b/webapp/src/app/geosource/components/research/research.component.spec.ts
@@ -3,7 +3,7 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing';
 import { ResearchComponent } from './research.component';
 import { MockComponent } from 'ng2-mock-component';
 import { RouterTestingModule } from '@angular/router/testing';
-import { MetadataService, ElasticsearchService } from '../../services';
+import { DatasetService, ElasticsearchService } from '../../services';
 import { HttpClientModule } from '@angular/common/http';
 
 describe('ResearchComponent', () => {
@@ -19,10 +19,10 @@ describe('ResearchComponent', () => {
       declarations: [
         ResearchComponent,
         MockComponent({ selector: 'app-search-bar' }),
-        MockComponent({ selector: 'app-metadata-list' }),
+        MockComponent({ selector: 'app-dataset-list' }),
       ],
       providers: [
-        MetadataService,
+        DatasetService,
         ElasticsearchService
       ]
     })
diff --git a/webapp/src/app/geosource/components/research/research.component.ts b/webapp/src/app/geosource/components/research/research.component.ts
index f19402bec090c3137a0e57637f60251bd5aba6a3..8c8d95c72005842054917ae02e159e36b10f3abf 100644
--- a/webapp/src/app/geosource/components/research/research.component.ts
+++ b/webapp/src/app/geosource/components/research/research.component.ts
@@ -1,5 +1,5 @@
 import { Component, OnInit } from '@angular/core';
-import { MetadataService } from '../../services';
+import { DatasetService } from '../../services';
 import { Router, ActivatedRoute } from '@angular/router';
 
 @Component({
@@ -10,15 +10,15 @@ import { Router, ActivatedRoute } from '@angular/router';
 export class ResearchComponent implements OnInit {
 
   constructor(
-    private _metadataService: MetadataService,
+    private _datasetService: DatasetService,
     private _router: Router,
     private _route: ActivatedRoute
   ) { }
 
   ngOnInit() {
-    this._metadataService.searchChange$.subscribe(() => {
-      if ( this._route.snapshot.url[this._route.snapshot.url.length - 1].path !== 'metadata' ) {
-        this._router.navigate(['metadata'], { relativeTo: this._route});
+    this._datasetService.searchChange$.subscribe(() => {
+      if ( this._route.snapshot.url[this._route.snapshot.url.length - 1].path !== 'datasets' ) {
+        this._router.navigate(['datasets'], { relativeTo: this._route});
       }
     });
   }
diff --git a/webapp/src/app/geosource/components/search-bar/search-bar.component.spec.ts b/webapp/src/app/geosource/components/search-bar/search-bar.component.spec.ts
index 5ca35422d579e2014ac90115bed420678bfaa81d..b507e74025045026c5c74d8f0eda39b0e2c85a5f 100644
--- a/webapp/src/app/geosource/components/search-bar/search-bar.component.spec.ts
+++ b/webapp/src/app/geosource/components/search-bar/search-bar.component.spec.ts
@@ -1,5 +1,5 @@
-import {ElasticsearchService} from '../../services/elasticsearch.service';
-import {MetadataService} from '../../services/metadata.service';
+import { ElasticsearchService } from '../../services/elasticsearch.service';
+import { DatasetService } from '../../services/dataset.service';
 import { async, ComponentFixture, TestBed } from '@angular/core/testing';
 
 import { SearchBarComponent } from './search-bar.component';
@@ -22,7 +22,7 @@ describe('SearchBarComponent', () => {
         MockComponent({ selector: 'app-search-input' }),
       ],
       providers: [
-        MetadataService,
+        DatasetService,
         ElasticsearchService
       ]
     })
diff --git a/webapp/src/app/geosource/components/search-bar/search-bar.component.ts b/webapp/src/app/geosource/components/search-bar/search-bar.component.ts
index 808c831885562ed8e54e676029f88f7c1a5a43dd..7bc410a273f6aff3086129a704948da61ace75d0 100644
--- a/webapp/src/app/geosource/components/search-bar/search-bar.component.ts
+++ b/webapp/src/app/geosource/components/search-bar/search-bar.component.ts
@@ -1,5 +1,5 @@
 import { Component, OnInit } from '@angular/core';
-import { MetadataService, ElasticsearchService } from '../../services';
+import { DatasetService, ElasticsearchService } from '../../services';
 import { SearchCompletion } from '../../models';
 
 @Component({
@@ -16,7 +16,7 @@ export class SearchBarComponent implements OnInit {
   displayAutocomplete: boolean;
 
   constructor(
-    private _metadataService: MetadataService,
+    private _datasetService: DatasetService,
     private _elasticSearchService: ElasticsearchService,
   ) {
     this.options_autocomplete = [];
@@ -25,17 +25,17 @@ export class SearchBarComponent implements OnInit {
    }
 
   ngOnInit() {
-    this.searchValue = this._metadataService.searchString;
+    this.searchValue = this._datasetService.searchString;
     // When the search value has changed, we reset the autocomplete list and focus element
-    this._metadataService.searchChange$.subscribe(
+    this._datasetService.searchChange$.subscribe(
       () => {
-        this.searchValue =  this._metadataService.searchString;
+        this.searchValue =  this._datasetService.searchString;
         this.options_autocomplete = [];
         this.currentAutocompleteFocus = -1;
       }
     );
     // Used to display the loading icon
-    this._metadataService.isLoading$.subscribe((value) => {
+    this._datasetService.isLoading$.subscribe((value) => {
       this.isLoading = value;
     });
   }
@@ -64,12 +64,12 @@ export class SearchBarComponent implements OnInit {
           this.searchValue = this.options_autocomplete[this.currentAutocompleteFocus].text;
           this.currentAutocompleteFocus = -1;
         }
-        this._metadataService.searchChanged(this.searchValue);
+        this._datasetService.searchChanged(this.searchValue);
         this.options_autocomplete = [];
         break;
       case 'optionSelected':
       case 'reset':
-        this._metadataService.searchChanged(this.searchValue);
+        this._datasetService.searchChanged(this.searchValue);
         this.options_autocomplete = [];
         break;
       default:
diff --git a/webapp/src/app/geosource/components/sort/sort.component.spec.ts b/webapp/src/app/geosource/components/sort/sort.component.spec.ts
index 901114fa56a565bda93e761e9002f3515aeeafc1..9fc1c660b94a6a052e59c9e4c2e60f228338bc12 100644
--- a/webapp/src/app/geosource/components/sort/sort.component.spec.ts
+++ b/webapp/src/app/geosource/components/sort/sort.component.spec.ts
@@ -1,7 +1,7 @@
 import { async, ComponentFixture, TestBed } from '@angular/core/testing';
 
 import { SortComponent } from './sort.component';
-import { MetadataService, ElasticsearchService } from '../../services';
+import { DatasetService, ElasticsearchService } from '../../services';
 import { HttpClientModule } from '@angular/common/http';
 import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
 
@@ -17,7 +17,7 @@ describe('SortComponent', () => {
       ],
       declarations: [ SortComponent ],
       providers: [
-        MetadataService,
+        DatasetService,
         ElasticsearchService
       ],
     })
diff --git a/webapp/src/app/geosource/components/sort/sort.component.ts b/webapp/src/app/geosource/components/sort/sort.component.ts
index f03918a7ace3184ba15937fa96b07cab69f04e23..7da9c02712700e8dee15ec44bee366c4271b5cfb 100644
--- a/webapp/src/app/geosource/components/sort/sort.component.ts
+++ b/webapp/src/app/geosource/components/sort/sort.component.ts
@@ -1,5 +1,5 @@
 import { Component, OnInit } from '@angular/core';
-import { MetadataService } from '../../services';
+import { DatasetService } from '../../services';
 import { ISortOption } from '../../models';
 
 interface IDropdownOptions {
@@ -20,7 +20,7 @@ export class SortComponent implements OnInit {
   selectedOption: ISortOption;
 
   constructor(
-    private _metadataService: MetadataService
+    private _datasetService: DatasetService
   ) {
     this.options = [
       {
@@ -39,17 +39,17 @@ export class SortComponent implements OnInit {
   }
 
   ngOnInit() {
-    this.selectedOption = this._metadataService.sortOptions;
+    this.selectedOption = this._datasetService.sortOptions;
   }
 
   sortValueChanged(value) {
     this.selectedOption.value = value;
-    this._metadataService.sortChanged(value);
+    this._datasetService.sortChanged(value);
   }
 
   toggleOrder() {
     this.selectedOption.order = this.selectedOption.order === 'asc' ? 'desc' : 'asc';
-    this._metadataService.orderChanged(this.selectedOption.order);
+    this._datasetService.orderChanged(this.selectedOption.order);
   }
 
 }
diff --git a/webapp/src/app/geosource/geosource-routing.module.ts b/webapp/src/app/geosource/geosource-routing.module.ts
index d41296c770fff4095dc11d54c94c95a19a924ae5..ef446d5d6ad011e5a0148f900d928f41d6989224 100644
--- a/webapp/src/app/geosource/geosource-routing.module.ts
+++ b/webapp/src/app/geosource/geosource-routing.module.ts
@@ -1,6 +1,6 @@
 import { NgModule } from '@angular/core';
 import { Routes, RouterModule } from '@angular/router';
-import { MetadataListComponent, MetadataDetailComponent, ResearchComponent } from './components';
+import { DatasetListComponent, DatasetDetailComponent, ResearchComponent } from './components';
 
 export const routes: Routes = [
   {
@@ -9,16 +9,19 @@ export const routes: Routes = [
     children: [
       {
         path: '',
-        redirectTo: 'metadata',
+        redirectTo: 'datasets',
         pathMatch: 'full'
       },
       {
-        path: 'metadata/:id',
-        component: MetadataDetailComponent
+        path: 'datasets/:id',
+        component: DatasetDetailComponent,
+        children: [
+
+        ]
       },
       {
-        path: 'metadata',
-        component: MetadataListComponent
+        path: 'datasets',
+        component: DatasetListComponent
       },
     ]
   },
diff --git a/webapp/src/app/geosource/services/metadata.service.spec.ts b/webapp/src/app/geosource/services/dataset.service.spec.ts
similarity index 68%
rename from webapp/src/app/geosource/services/metadata.service.spec.ts
rename to webapp/src/app/geosource/services/dataset.service.spec.ts
index 2947059c1fe1f7215e5dd2fc4083d73ce8c211f9..b232c64828819bea2fa185e3f8155f349d30d053 100644
--- a/webapp/src/app/geosource/services/metadata.service.spec.ts
+++ b/webapp/src/app/geosource/services/dataset.service.spec.ts
@@ -1,8 +1,8 @@
 import { TestBed, inject } from '@angular/core/testing';
 import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
-import { MetadataService } from './metadata.service';
+import { DatasetService } from './dataset.service';
 import { IMetadata } from '../models';
 
-describe('MetadataService', () => {
+describe('DatasetService', () => {
 
 });
diff --git a/webapp/src/app/geosource/services/metadata.service.ts b/webapp/src/app/geosource/services/dataset.service.ts
similarity index 95%
rename from webapp/src/app/geosource/services/metadata.service.ts
rename to webapp/src/app/geosource/services/dataset.service.ts
index c2f55ea41c4a7ac9f06516e99f3e68f0c443acee..85a1338cb0ea3c19bd248f77635f55fd402f3719 100644
--- a/webapp/src/app/geosource/services/metadata.service.ts
+++ b/webapp/src/app/geosource/services/dataset.service.ts
@@ -14,10 +14,10 @@ import {
 import { ElasticsearchService } from './elasticsearch.service';
 
 @Injectable()
-export class MetadataService {
+export class DatasetService {
 
   private _searchChangeSubject: Subject<any>;
-  private _metadataReloadedSubject: Subject<any>;
+  private _datasetsReloadedSubject: Subject<any>;
   private _elasticsearchOptions: ElasticsearchOptions;
   private _resultsCount: number;
   private _isLoading: Subject<boolean>;
@@ -26,13 +26,13 @@ export class MetadataService {
     private _elasticsearchService: ElasticsearchService
   ) {
     this._searchChangeSubject = new Subject<any>();
-    this._metadataReloadedSubject = new Subject<any>();
+    this._datasetsReloadedSubject = new Subject<any>();
     this._elasticsearchOptions = new ElasticsearchOptions();
     this._isLoading = new Subject();
 
   }
 
-  // Get metadata from elasticsearch.
+  // Get datasets from elasticsearch.
   // Options: filter by query string and pagination
   getDatasetList(): Observable<Dataset[]> {
     this._isLoading.next(true);
@@ -52,7 +52,7 @@ export class MetadataService {
           }
         });
         // NOtify that data have been reloaded
-        this._metadataReloadedSubject.next();
+        this._datasetsReloadedSubject.next();
 
         this._isLoading.next(false);
         return this.initilizeDatasetList(e.hits.hits);
@@ -175,8 +175,8 @@ export class MetadataService {
     return this._isLoading.asObservable();
   }
 
-  get metadataReloaded$(): Observable<string> {
-    return this._metadataReloadedSubject.asObservable();
+  get datasetsReloaded$(): Observable<string> {
+    return this._datasetsReloadedSubject.asObservable();
   }
 
   get searchString(): string {
diff --git a/webapp/src/app/geosource/services/index.ts b/webapp/src/app/geosource/services/index.ts
index c1207247a7395c299d7dbf64b2e6ec745bfd8151..764bd841b5ae461c542b5633b1b4451d1363e222 100644
--- a/webapp/src/app/geosource/services/index.ts
+++ b/webapp/src/app/geosource/services/index.ts
@@ -1,10 +1,10 @@
-import { MetadataService } from './metadata.service';
+import { DatasetService } from './dataset.service';
 import { ElasticsearchService } from './elasticsearch.service';
 
-export * from './metadata.service';
+export * from './dataset.service';
 export * from './elasticsearch.service';
 
 export const GeosourceServices = [
-  MetadataService,
+  DatasetService,
   ElasticsearchService
 ];
diff --git a/webapp/src/app/shared/models/index.ts b/webapp/src/app/shared/models/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a02661fab012267fa9158f9d2156f89e6676c125
--- /dev/null
+++ b/webapp/src/app/shared/models/index.ts
@@ -0,0 +1 @@
+export * from './paginator-options.model';
diff --git a/webapp/src/app/shared/models/paginator-options.model.ts b/webapp/src/app/shared/models/paginator-options.model.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d5818ff4a472b5b5da9605428f76339e725e5b0e
--- /dev/null
+++ b/webapp/src/app/shared/models/paginator-options.model.ts
@@ -0,0 +1,6 @@
+export interface PaginatorOptions {
+  pageIndex: number;
+  length: number;
+  pageSize: number;
+  pageSizeOptions: number[];
+}