diff --git a/src/app/+collection-page/create-collection-page/create-collection-page.component.spec.ts b/src/app/+collection-page/create-collection-page/create-collection-page.component.spec.ts
index 29350a83e0e1c9f9ab0cebeaf65e58ae45c39af4..e223b11c6568ec422d950f9841c187778534e3a7 100644
--- a/src/app/+collection-page/create-collection-page/create-collection-page.component.spec.ts
+++ b/src/app/+collection-page/create-collection-page/create-collection-page.component.spec.ts
@@ -4,7 +4,7 @@ import { TranslateModule } from '@ngx-translate/core';
 import { CommonModule } from '@angular/common';
 import { RouterTestingModule } from '@angular/router/testing';
 import { NO_ERRORS_SCHEMA } from '@angular/core';
-import { RouteService } from '../../shared/services/route.service';
+import { RouteService } from '../../core/services/route.service';
 import { SharedModule } from '../../shared/shared.module';
 import { CollectionDataService } from '../../core/data/collection-data.service';
 import { of as observableOf } from 'rxjs';
diff --git a/src/app/+collection-page/create-collection-page/create-collection-page.component.ts b/src/app/+collection-page/create-collection-page/create-collection-page.component.ts
index 94229b4932c586bf0533ba37962b3b60eff01c82..2cab36d2851ccc5b5fbc8ae102779405bd9bb1e4 100644
--- a/src/app/+collection-page/create-collection-page/create-collection-page.component.ts
+++ b/src/app/+collection-page/create-collection-page/create-collection-page.component.ts
@@ -1,6 +1,6 @@
 import { Component } from '@angular/core';
 import { CommunityDataService } from '../../core/data/community-data.service';
-import { RouteService } from '../../shared/services/route.service';
+import { RouteService } from '../../core/services/route.service';
 import { Router } from '@angular/router';
 import { CreateComColPageComponent } from '../../shared/comcol-forms/create-comcol-page/create-comcol-page.component';
 import { Collection } from '../../core/shared/collection.model';
diff --git a/src/app/+community-page/create-community-page/create-community-page.component.spec.ts b/src/app/+community-page/create-community-page/create-community-page.component.spec.ts
index dba15dbe882c803b2122daa75dec357aa84317ef..dead5a5c3baeb2ff97cc9977c1672d2421e74097 100644
--- a/src/app/+community-page/create-community-page/create-community-page.component.spec.ts
+++ b/src/app/+community-page/create-community-page/create-community-page.component.spec.ts
@@ -4,7 +4,7 @@ import { TranslateModule } from '@ngx-translate/core';
 import { CommonModule } from '@angular/common';
 import { RouterTestingModule } from '@angular/router/testing';
 import { NO_ERRORS_SCHEMA } from '@angular/core';
-import { RouteService } from '../../shared/services/route.service';
+import { RouteService } from '../../core/services/route.service';
 import { SharedModule } from '../../shared/shared.module';
 import { CollectionDataService } from '../../core/data/collection-data.service';
 import { of as observableOf } from 'rxjs';
diff --git a/src/app/+community-page/create-community-page/create-community-page.component.ts b/src/app/+community-page/create-community-page/create-community-page.component.ts
index 828d8338afae08173dd63839c7872221043ba8db..fd5f18442a957db4cf1b2946c95c8ed1193b13fb 100644
--- a/src/app/+community-page/create-community-page/create-community-page.component.ts
+++ b/src/app/+community-page/create-community-page/create-community-page.component.ts
@@ -1,7 +1,7 @@
 import { Component } from '@angular/core';
 import { Community } from '../../core/shared/community.model';
 import { CommunityDataService } from '../../core/data/community-data.service';
-import { RouteService } from '../../shared/services/route.service';
+import { RouteService } from '../../core/services/route.service';
 import { Router } from '@angular/router';
 import { CreateComColPageComponent } from '../../shared/comcol-forms/create-comcol-page/create-comcol-page.component';
 
diff --git a/src/app/+community-page/delete-community-page/delete-community-page.component.spec.ts b/src/app/+community-page/delete-community-page/delete-community-page.component.spec.ts
index f18c4fb1f153d7e7938ecc217cded0a45407a04a..c23df9397686dbfae57f4b8d08183991dc2dc6c6 100644
--- a/src/app/+community-page/delete-community-page/delete-community-page.component.spec.ts
+++ b/src/app/+community-page/delete-community-page/delete-community-page.component.spec.ts
@@ -4,7 +4,7 @@ import { TranslateModule } from '@ngx-translate/core';
 import { CommonModule } from '@angular/common';
 import { RouterTestingModule } from '@angular/router/testing';
 import { NO_ERRORS_SCHEMA } from '@angular/core';
-import { RouteService } from '../../shared/services/route.service';
+import { RouteService } from '../../core/services/route.service';
 import { SharedModule } from '../../shared/shared.module';
 import { of as observableOf } from 'rxjs';
 import { NotificationsService } from '../../shared/notifications/notifications.service';
diff --git a/src/app/+my-dspace-page/my-dspace-configuration.service.ts b/src/app/+my-dspace-page/my-dspace-configuration.service.ts
index 705ec897f89efe25d040558b55ca05c11374181d..39c7574407a06a6d682eb037a306121848b7a4c0 100644
--- a/src/app/+my-dspace-page/my-dspace-configuration.service.ts
+++ b/src/app/+my-dspace-page/my-dspace-configuration.service.ts
@@ -8,7 +8,7 @@ import { MyDSpaceConfigurationValueType } from './my-dspace-configuration-value-
 import { RoleService } from '../core/roles/role.service';
 import { SearchConfigurationOption } from '../+search-page/search-switch-configuration/search-configuration-option.model';
 import { SearchConfigurationService } from '../+search-page/search-service/search-configuration.service';
-import { RouteService } from '../shared/services/route.service';
+import { RouteService } from '../core/services/route.service';
 import { PaginationComponentOptions } from '../shared/pagination/pagination-component-options.model';
 import { SortDirection, SortOptions } from '../core/cache/models/sort-options.model';
 import { SearchFixedFilterService } from '../+search-page/search-filters/search-filter/search-fixed-filter.service';
diff --git a/src/app/+my-dspace-page/my-dspace-page.component.spec.ts b/src/app/+my-dspace-page/my-dspace-page.component.spec.ts
index 9658814a6aca4b1bd2d67617325fe352bc385f72..d31d724b9e577a4e3c41c656706faa88b42a2188 100644
--- a/src/app/+my-dspace-page/my-dspace-page.component.spec.ts
+++ b/src/app/+my-dspace-page/my-dspace-page.component.spec.ts
@@ -17,7 +17,7 @@ import { HostWindowService } from '../shared/host-window.service';
 import { PaginationComponentOptions } from '../shared/pagination/pagination-component-options.model';
 import { RemoteData } from '../core/data/remote-data';
 import { MyDSpacePageComponent, SEARCH_CONFIG_SERVICE } from './my-dspace-page.component';
-import { RouteService } from '../shared/services/route.service';
+import { RouteService } from '../core/services/route.service';
 import { routeServiceStub } from '../shared/testing/route-service-stub';
 import { SearchConfigurationServiceStub } from '../shared/testing/search-configuration-service-stub';
 import { SearchService } from '../+search-page/search-service/search.service';
diff --git a/src/app/+search-page/filtered-search-page.component.ts b/src/app/+search-page/filtered-search-page.component.ts
index 66c619b8237553cb9462192e93b57f14b6f48438..85d521ee152952433163705b47885c31107ba316 100644
--- a/src/app/+search-page/filtered-search-page.component.ts
+++ b/src/app/+search-page/filtered-search-page.component.ts
@@ -4,12 +4,14 @@ import { SearchSidebarService } from './search-sidebar/search-sidebar.service';
 import { SearchPageComponent } from './search-page.component';
 import { ChangeDetectionStrategy, Component, Inject, Input, OnInit } from '@angular/core';
 import { pushInOut } from '../shared/animations/push';
-import { RouteService } from '../shared/services/route.service';
+import { RouteService } from '../core/services/route.service';
 import { SearchConfigurationService } from './search-service/search-configuration.service';
 import { Observable } from 'rxjs';
 import { PaginatedSearchOptions } from './paginated-search-options.model';
 import { SEARCH_CONFIG_SERVICE } from '../+my-dspace-page/my-dspace-page.component';
 import { map } from 'rxjs/operators';
+import { isEmpty, isNotEmpty } from '../shared/empty.util';
+import { ActivatedRoute } from '@angular/router';
 
 /**
  * This component renders a simple item page.
@@ -53,6 +55,9 @@ export class FilteredSearchPageComponent extends SearchPageComponent implements
    * If something changes, update the list of scopes for the dropdown
    */
   ngOnInit(): void {
+    if (isEmpty(this.fixedFilter$)) {
+      this.fixedFilter$ = this.routeService.getRouteParameterValue('filter');
+    }
     super.ngOnInit();
   }
 
diff --git a/src/app/+search-page/filtered-search-page.guard.ts b/src/app/+search-page/filtered-search-page.guard.ts
index 6d41d4965d296ff4a5ac6ce1d12a446195bfe1b9..e28dadec718a6068b68ff1da98cc3eb63fa27386 100644
--- a/src/app/+search-page/filtered-search-page.guard.ts
+++ b/src/app/+search-page/filtered-search-page.guard.ts
@@ -1,6 +1,16 @@
 import { Injectable } from '@angular/core';
-import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
+import {
+  ActivatedRouteSnapshot,
+  CanActivate,
+  NavigationEnd,
+  Router,
+  RouterStateSnapshot
+} from '@angular/router';
 import { Observable } from 'rxjs';
+import { SearchFixedFilterService } from './search-filters/search-filter/search-fixed-filter.service';
+import { map, take, tap, filter } from 'rxjs/operators';
+import { isEmpty, isNotEmpty } from '../shared/empty.util';
+import { Location } from '@angular/common';
 
 @Injectable()
 /**
@@ -9,14 +19,33 @@ import { Observable } from 'rxjs';
  * - filter: The current filter stored in route.params
  */
 export class FilteredSearchPageGuard implements CanActivate {
+  constructor(private service: SearchFixedFilterService, private router: Router, private location: Location) {
+  }
+
   canActivate(
     route: ActivatedRouteSnapshot,
     state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
-    const filter = route.params.filter;
+    route.params = Object.assign({}, route.params, { filter: route.params.filter.toLowerCase() });
+    const filterName = route.params.filter;
 
-    const newTitle = filter + '.search.title';
+    const newTitle = filterName + '.search.title';
 
     route.data = { title: newTitle };
-    return true;
+
+    return this.service.getQueryByFilterName(filterName).pipe(
+      tap((query) => {
+          if (isEmpty(query)) {
+            this.router.navigateByUrl('/404', { skipLocationChange: true });
+            this.router.events
+              .pipe(
+                filter((event) => event instanceof NavigationEnd),
+                take(1)
+              )
+              .subscribe(() => this.location.replaceState(state.url));
+          }
+        }
+      ),
+      map((query) => isNotEmpty(query))
+    );
   }
 }
diff --git a/src/app/+search-page/search-filters/search-filter/search-filter.service.ts b/src/app/+search-page/search-filters/search-filter/search-filter.service.ts
index 6024ad72496998005c594852a6c9360a80135362..8482838101762576e6be51d8a5c25a233e57090b 100644
--- a/src/app/+search-page/search-filters/search-filter/search-filter.service.ts
+++ b/src/app/+search-page/search-filters/search-filter/search-filter.service.ts
@@ -14,7 +14,7 @@ import {
 } from './search-filter.actions';
 import { hasValue, isNotEmpty, } from '../../../shared/empty.util';
 import { SearchFilterConfig } from '../../search-service/search-filter-config.model';
-import { RouteService } from '../../../shared/services/route.service';
+import { RouteService } from '../../../core/services/route.service';
 import { SortDirection, SortOptions } from '../../../core/cache/models/sort-options.model';
 import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model';
 import { SearchFixedFilterService } from './search-fixed-filter.service';
diff --git a/src/app/+search-page/search-filters/search-filter/search-fixed-filter.service.spec.ts b/src/app/+search-page/search-filters/search-filter/search-fixed-filter.service.spec.ts
index 3f6c2ef13344f3d457d4a32da5a7acd4338891d5..a201d37d487196abb39d93bac2639bae9ec2ac0e 100644
--- a/src/app/+search-page/search-filters/search-filter/search-fixed-filter.service.spec.ts
+++ b/src/app/+search-page/search-filters/search-filter/search-fixed-filter.service.spec.ts
@@ -1,5 +1,5 @@
 import { SearchFixedFilterService } from './search-fixed-filter.service';
-import { RouteService } from '../../../shared/services/route.service';
+import { RouteService } from '../../../core/services/route.service';
 import { RequestService } from '../../../core/data/request.service';
 import { HALEndpointService } from '../../../core/shared/hal-endpoint.service';
 import { of as observableOf } from 'rxjs';
diff --git a/src/app/+search-page/search-filters/search-filter/search-fixed-filter.service.ts b/src/app/+search-page/search-filters/search-filter/search-fixed-filter.service.ts
index 0f17b508c9be4e1168a18e1ed45b188cced62626..85f637ce32edc841e6e927b24fe79967e28ccaa7 100644
--- a/src/app/+search-page/search-filters/search-filter/search-fixed-filter.service.ts
+++ b/src/app/+search-page/search-filters/search-filter/search-fixed-filter.service.ts
@@ -9,7 +9,6 @@ import { GenericConstructor } from '../../../core/shared/generic-constructor';
 import { FilteredDiscoveryPageResponseParsingService } from '../../../core/data/filtered-discovery-page-response-parsing.service';
 import { hasValue } from '../../../shared/empty.util';
 import { configureRequest, getResponseFromEntry } from '../../../core/shared/operators';
-import { RouteService } from '../../../shared/services/route.service';
 import { FilteredDiscoveryQueryResponse } from '../../../core/cache/response.models';
 
 /**
@@ -19,8 +18,7 @@ import { FilteredDiscoveryQueryResponse } from '../../../core/cache/response.mod
 export class SearchFixedFilterService {
   private queryByFilterPath = 'filtered-discovery-pages';
 
-  constructor(private routeService: RouteService,
-              protected requestService: RequestService,
+  constructor(protected requestService: RequestService,
               private halService: HALEndpointService) {
 
   }
diff --git a/src/app/+search-page/search-filters/search-filter/search-range-filter/search-range-filter.component.spec.ts b/src/app/+search-page/search-filters/search-filter/search-range-filter/search-range-filter.component.spec.ts
index 119f3f92a9400772f06dc6e98b8a2a9ea603f871..2b69fe7f551f1f2f18d7eef07c5d3199baf3a458 100644
--- a/src/app/+search-page/search-filters/search-filter/search-range-filter/search-range-filter.component.spec.ts
+++ b/src/app/+search-page/search-filters/search-filter/search-range-filter/search-range-filter.component.spec.ts
@@ -16,7 +16,7 @@ import { RouterStub } from '../../../../shared/testing/router-stub';
 import { Router } from '@angular/router';
 import { PageInfo } from '../../../../core/shared/page-info.model';
 import { SearchRangeFilterComponent } from './search-range-filter.component';
-import { RouteService } from '../../../../shared/services/route.service';
+import { RouteService } from '../../../../core/services/route.service';
 import { RemoteDataBuildService } from '../../../../core/cache/builders/remote-data-build.service';
 import { SEARCH_CONFIG_SERVICE } from '../../../../+my-dspace-page/my-dspace-page.component';
 import { SearchConfigurationServiceStub } from '../../../../shared/testing/search-configuration-service-stub';
diff --git a/src/app/+search-page/search-filters/search-filter/search-range-filter/search-range-filter.component.ts b/src/app/+search-page/search-filters/search-filter/search-range-filter/search-range-filter.component.ts
index 95d7441184e391759fac4be871e7f2ef7450d20b..5ac59b65f8907f9c2ae4d8a5295cc1a6d2ce37c0 100644
--- a/src/app/+search-page/search-filters/search-filter/search-range-filter/search-range-filter.component.ts
+++ b/src/app/+search-page/search-filters/search-filter/search-range-filter/search-range-filter.component.ts
@@ -14,7 +14,7 @@ import { FILTER_CONFIG, IN_PLACE_SEARCH, SearchFilterService } from '../search-f
 import { SearchService } from '../../../search-service/search.service';
 import { Router } from '@angular/router';
 import * as moment from 'moment';
-import { RouteService } from '../../../../shared/services/route.service';
+import { RouteService } from '../../../../core/services/route.service';
 import { hasValue } from '../../../../shared/empty.util';
 import { SearchConfigurationService } from '../../../search-service/search-configuration.service';
 import { SEARCH_CONFIG_SERVICE } from '../../../../+my-dspace-page/my-dspace-page.component';
diff --git a/src/app/+search-page/search-page-routing.module.ts b/src/app/+search-page/search-page-routing.module.ts
index c3cf4e13436d93256372fc3946011e53bd467f97..e3a91c6f69472ffb5aac5ef21162f665e0c6ed21 100644
--- a/src/app/+search-page/search-page-routing.module.ts
+++ b/src/app/+search-page/search-page-routing.module.ts
@@ -9,8 +9,13 @@ import { FilteredSearchPageGuard } from './filtered-search-page.guard';
   imports: [
     RouterModule.forChild([
       { path: '', component: SearchPageComponent, data: { title: 'search.title' } },
-      { path: ':filter', component: FilteredSearchPageComponent, canActivate: [FilteredSearchPageGuard]}
+      {
+        path: ':filter',
+        component: FilteredSearchPageComponent,
+        canActivate: [FilteredSearchPageGuard],
+      }
     ])
   ]
 })
-export class SearchPageRoutingModule { }
+export class SearchPageRoutingModule {
+}
diff --git a/src/app/+search-page/search-page.component.spec.ts b/src/app/+search-page/search-page.component.spec.ts
index 88c7c693d39a84069c4098bcd8c74f76f12bca7a..2bc3d4071dc869abf92997fbd3c13fa2b08e2d3b 100644
--- a/src/app/+search-page/search-page.component.spec.ts
+++ b/src/app/+search-page/search-page.component.spec.ts
@@ -21,7 +21,7 @@ import { SearchFilterService } from './search-filters/search-filter/search-filte
 import { SearchConfigurationService } from './search-service/search-configuration.service';
 import { RemoteData } from '../core/data/remote-data';
 import { SEARCH_CONFIG_SERVICE } from '../+my-dspace-page/my-dspace-page.component';
-import { RouteService } from '../shared/services/route.service';
+import { RouteService } from '../core/services/route.service';
 import { SearchConfigurationServiceStub } from '../shared/testing/search-configuration-service-stub';
 import { PaginatedSearchOptions } from './paginated-search-options.model';
 import { SearchFixedFilterService } from './search-filters/search-filter/search-fixed-filter.service';
diff --git a/src/app/+search-page/search-page.component.ts b/src/app/+search-page/search-page.component.ts
index 5e0a5ab9a27d69fa079afd102cb67225766a2922..8fe38eaebb64f71db967568c9d79a4d3a25bbdf6 100644
--- a/src/app/+search-page/search-page.component.ts
+++ b/src/app/+search-page/search-page.component.ts
@@ -13,7 +13,7 @@ import { SearchSidebarService } from './search-sidebar/search-sidebar.service';
 import { hasValue, isNotEmpty } from '../shared/empty.util';
 import { SearchConfigurationService } from './search-service/search-configuration.service';
 import { getSucceededRemoteData } from '../core/shared/operators';
-import { RouteService } from '../shared/services/route.service';
+import { RouteService } from '../core/services/route.service';
 import { SEARCH_CONFIG_SERVICE } from '../+my-dspace-page/my-dspace-page.component';
 
 export const SEARCH_ROUTE = '/search';
@@ -114,16 +114,16 @@ export class SearchPageComponent implements OnInit {
     this.searchLink = this.getSearchLink();
     this.searchOptions$ = this.getSearchOptions();
     this.sub = this.searchOptions$.pipe(
-      switchMap((options) => this.service.search(options).pipe(getSucceededRemoteData(), startWith(observableOf(undefined)))))
+      switchMap((options) => this.service.search(options).pipe(
+        getSucceededRemoteData(),
+        startWith(undefined)
+      )))
       .subscribe((results) => {
         this.resultsRD$.next(results);
       });
     this.scopeListRD$ = this.searchConfigService.getCurrentScope('').pipe(
       switchMap((scopeId) => this.service.getScopes(scopeId))
     );
-    if (!isNotEmpty(this.fixedFilter$)) {
-      this.fixedFilter$ = this.routeService.getRouteParameterValue('filter');
-    }
   }
 
   /**
diff --git a/src/app/+search-page/search-service/search-configuration.service.ts b/src/app/+search-page/search-service/search-configuration.service.ts
index 14fcdd8d6053e5ba062ca437adbdef1b0ea01795..fa43b27e66df7e1dda5beb66030df96e04b325ed 100644
--- a/src/app/+search-page/search-service/search-configuration.service.ts
+++ b/src/app/+search-page/search-service/search-configuration.service.ts
@@ -14,7 +14,7 @@ import { SortDirection, SortOptions } from '../../core/cache/models/sort-options
 import { PaginationComponentOptions } from '../../shared/pagination/pagination-component-options.model';
 import { SearchOptions } from '../search-options.model';
 import { PaginatedSearchOptions } from '../paginated-search-options.model';
-import { RouteService } from '../../shared/services/route.service';
+import { RouteService } from '../../core/services/route.service';
 import { hasNoValue, hasValue, isNotEmpty, isNotEmptyOperator } from '../../shared/empty.util';
 import { RemoteData } from '../../core/data/remote-data';
 import { getSucceededRemoteData } from '../../core/shared/operators';
diff --git a/src/app/+search-page/search-service/search.service.spec.ts b/src/app/+search-page/search-service/search.service.spec.ts
index 9ec5bc35f212fedc72ca371d22396df6907c4cd5..b50550487015aee72692b5b8c2188357c554cf5d 100644
--- a/src/app/+search-page/search-service/search.service.spec.ts
+++ b/src/app/+search-page/search-service/search.service.spec.ts
@@ -26,7 +26,7 @@ import { CommunityDataService } from '../../core/data/community-data.service';
 import { ViewMode } from '../../core/shared/view-mode.model';
 import { DSpaceObjectDataService } from '../../core/data/dspace-object-data.service';
 import { map } from 'rxjs/operators';
-import { RouteService } from '../../shared/services/route.service';
+import { RouteService } from '../../core/services/route.service';
 import { routeServiceStub } from '../../shared/testing/route-service-stub';
 
 @Component({ template: '' })
diff --git a/src/app/+search-page/search-service/search.service.ts b/src/app/+search-page/search-service/search.service.ts
index 52be0417a8c922e3faf59e6490921dde62507527..6685e7b71590b50eadb63a2095a15b5128747ce2 100644
--- a/src/app/+search-page/search-service/search.service.ts
+++ b/src/app/+search-page/search-service/search.service.ts
@@ -42,7 +42,7 @@ import { CommunityDataService } from '../../core/data/community-data.service';
 import { ViewMode } from '../../core/shared/view-mode.model';
 import { ResourceType } from '../../core/shared/resource-type';
 import { DSpaceObjectDataService } from '../../core/data/dspace-object-data.service';
-import { RouteService } from '../../shared/services/route.service';
+import { RouteService } from '../../core/services/route.service';
 
 /**
  * Service that performs all general actions that have to do with the search page
diff --git a/src/app/app.component.spec.ts b/src/app/app.component.spec.ts
index bd2d832c6756e8d4db42a1c68ad62f1656e3805f..b7b34f9c55c55cc2f5a1ae0b6a431ca9bfbfa34e 100644
--- a/src/app/app.component.spec.ts
+++ b/src/app/app.component.spec.ts
@@ -26,7 +26,7 @@ import { HostWindowResizeAction } from './shared/host-window.actions';
 import { MetadataService } from './core/metadata/metadata.service';
 
 import { GLOBAL_CONFIG, ENV_CONFIG } from '../config';
-import { NativeWindowRef, NativeWindowService } from './shared/services/window.service';
+import { NativeWindowRef, NativeWindowService } from './core/services/window.service';
 
 import { MockTranslateLoader } from './shared/mocks/mock-translate-loader';
 import { MockMetadataService } from './shared/mocks/mock-metadata-service';
@@ -41,7 +41,7 @@ import { MenuServiceStub } from './shared/testing/menu-service-stub';
 import { HostWindowService } from './shared/host-window.service';
 import { HostWindowServiceStub } from './shared/testing/host-window-service-stub';
 import { ActivatedRoute, Router } from '@angular/router';
-import { RouteService } from './shared/services/route.service';
+import { RouteService } from './core/services/route.service';
 import { MockActivatedRoute } from './shared/mocks/mock-active-router';
 import { MockRouter } from './shared/mocks/mock-router';
 
diff --git a/src/app/app.component.ts b/src/app/app.component.ts
index 37cc79155824f453d41cae19784a643f5b80f654..836c20208de066b04279d471d0d1d4b3a57a9ca9 100644
--- a/src/app/app.component.ts
+++ b/src/app/app.component.ts
@@ -19,11 +19,11 @@ import { GLOBAL_CONFIG, GlobalConfig } from '../config';
 import { MetadataService } from './core/metadata/metadata.service';
 import { HostWindowResizeAction } from './shared/host-window.actions';
 import { HostWindowState } from './shared/host-window.reducer';
-import { NativeWindowRef, NativeWindowService } from './shared/services/window.service';
+import { NativeWindowRef, NativeWindowService } from './core/services/window.service';
 import { isAuthenticated } from './core/auth/selectors';
 import { AuthService } from './core/auth/auth.service';
 import { Angulartics2GoogleAnalytics } from 'angulartics2/ga';
-import { RouteService } from './shared/services/route.service';
+import { RouteService } from './core/services/route.service';
 import variables from '../styles/_exposed_variables.scss';
 import { CSSVariableService } from './shared/sass-helper/sass-helper.service';
 import { MenuService } from './shared/menu/menu.service';
diff --git a/src/app/core/auth/auth.service.spec.ts b/src/app/core/auth/auth.service.spec.ts
index e766a45e48c92fd0ff7db80fbf8130e194252b7e..ab2e6fd86b400be56bbe5c861053593af5a01e14 100644
--- a/src/app/core/auth/auth.service.spec.ts
+++ b/src/app/core/auth/auth.service.spec.ts
@@ -7,12 +7,12 @@ import { REQUEST } from '@nguniversal/express-engine/tokens';
 import { of as observableOf } from 'rxjs';
 
 import { authReducer, AuthState } from './auth.reducer';
-import { NativeWindowRef, NativeWindowService } from '../../shared/services/window.service';
+import { NativeWindowRef, NativeWindowService } from '../services/window.service';
 import { AuthService } from './auth.service';
 import { RouterStub } from '../../shared/testing/router-stub';
 import { ActivatedRouteStub } from '../../shared/testing/active-router-stub';
 
-import { CookieService } from '../../shared/services/cookie.service';
+import { CookieService } from '../services/cookie.service';
 import { AuthRequestServiceStub } from '../../shared/testing/auth-request-service-stub';
 import { AuthRequestService } from './auth-request.service';
 import { AuthStatus } from './models/auth-status.model';
@@ -20,7 +20,7 @@ import { AuthTokenInfo } from './models/auth-token-info.model';
 import { EPerson } from '../eperson/models/eperson.model';
 import { EPersonMock } from '../../shared/testing/eperson-mock';
 import { AppState } from '../../app.reducer';
-import { ClientCookieService } from '../../shared/services/client-cookie.service';
+import { ClientCookieService } from '../services/client-cookie.service';
 import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service';
 import { getMockRemoteDataBuildService } from '../../shared/mocks/mock-remote-data-build.service';
 
diff --git a/src/app/core/auth/auth.service.ts b/src/app/core/auth/auth.service.ts
index a01768e687cd7719b53faf7885a313903085b293..08c94b02f2b3fd3a71735cd068fe508c27482384 100644
--- a/src/app/core/auth/auth.service.ts
+++ b/src/app/core/auth/auth.service.ts
@@ -15,11 +15,11 @@ import { HttpOptions } from '../dspace-rest-v2/dspace-rest-v2.service';
 import { AuthStatus } from './models/auth-status.model';
 import { AuthTokenInfo, TOKENITEM } from './models/auth-token-info.model';
 import { isEmpty, isNotEmpty, isNotNull, isNotUndefined } from '../../shared/empty.util';
-import { CookieService } from '../../shared/services/cookie.service';
+import { CookieService } from '../services/cookie.service';
 import { getAuthenticationToken, getRedirectUrl, isAuthenticated, isTokenRefreshing } from './selectors';
 import { AppState, routerStateSelector } from '../../app.reducer';
 import { ResetAuthenticationMessagesAction, SetRedirectUrlAction } from './auth.actions';
-import { NativeWindowRef, NativeWindowService } from '../../shared/services/window.service';
+import { NativeWindowRef, NativeWindowService } from '../services/window.service';
 import { Base64EncodeUrl } from '../../shared/utils/encode-decode.util';
 import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service';
 
diff --git a/src/app/core/core.effects.ts b/src/app/core/core.effects.ts
index 9ade23e6c59fe5011d3febb4646c407eb6474f6c..f657b5d449ee47d082f7732bb52f5a23a0b5f8a0 100644
--- a/src/app/core/core.effects.ts
+++ b/src/app/core/core.effects.ts
@@ -6,7 +6,7 @@ import { AuthEffects } from './auth/auth.effects';
 import { JsonPatchOperationsEffects } from './json-patch/json-patch-operations.effects';
 import { ServerSyncBufferEffects } from './cache/server-sync-buffer.effects';
 import { ObjectUpdatesEffects } from './data/object-updates/object-updates.effects';
-import { RouteEffects } from '../shared/services/route.effects';
+import { RouteEffects } from './services/route.effects';
 
 export const coreEffects = [
   RequestEffects,
diff --git a/src/app/core/core.module.ts b/src/app/core/core.module.ts
index 6550435aa3ab4ca102c07345e287d5f826ad3374..31d1da1ede533ae93257a7b58c19cda2c0b871db 100644
--- a/src/app/core/core.module.ts
+++ b/src/app/core/core.module.ts
@@ -15,7 +15,7 @@ import { coreReducers } from './core.reducers';
 
 import { isNotEmpty } from '../shared/empty.util';
 
-import { ApiService } from '../shared/services/api.service';
+import { ApiService } from './services/api.service';
 import { BrowseEntriesResponseParsingService } from './data/browse-entries-response-parsing.service';
 import { CollectionDataService } from './data/collection-data.service';
 import { CommunityDataService } from './data/community-data.service';
@@ -35,12 +35,12 @@ import { PaginationComponentOptions } from '../shared/pagination/pagination-comp
 import { RemoteDataBuildService } from './cache/builders/remote-data-build.service';
 import { RequestService } from './data/request.service';
 import { EndpointMapResponseParsingService } from './data/endpoint-map-response-parsing.service';
-import { ServerResponseService } from '../shared/services/server-response.service';
-import { NativeWindowFactory, NativeWindowService } from '../shared/services/window.service';
+import { ServerResponseService } from './services/server-response.service';
+import { NativeWindowFactory, NativeWindowService } from './services/window.service';
 import { BrowseService } from './browse/browse.service';
 import { BrowseResponseParsingService } from './data/browse-response-parsing.service';
 import { ConfigResponseParsingService } from './config/config-response-parsing.service';
-import { RouteService } from '../shared/services/route.service';
+import { RouteService } from './services/route.service';
 import { SubmissionDefinitionsConfigService } from './config/submission-definitions-config.service';
 import { SubmissionFormsConfigService } from './config/submission-forms-config.service';
 import { SubmissionSectionsConfigService } from './config/submission-sections-config.service';
diff --git a/src/app/core/core.reducers.ts b/src/app/core/core.reducers.ts
index 7aecb91a7ad1ff4ee248201bb85149c8ef605854..4fcf36f9cca890331597b472d3c452c33c2ed02d 100644
--- a/src/app/core/core.reducers.ts
+++ b/src/app/core/core.reducers.ts
@@ -13,7 +13,7 @@ import {
   objectUpdatesReducer,
   ObjectUpdatesState
 } from './data/object-updates/object-updates.reducer';
-import { routeReducer, RouteState } from '../shared/services/route.reducer';
+import { routeReducer, RouteState } from './services/route.reducer';
 
 export interface CoreState {
   'cache/object': ObjectCacheState,
diff --git a/src/app/shared/services/api.service.ts b/src/app/core/services/api.service.ts
similarity index 100%
rename from src/app/shared/services/api.service.ts
rename to src/app/core/services/api.service.ts
diff --git a/src/app/shared/services/client-cookie.service.ts b/src/app/core/services/client-cookie.service.ts
similarity index 100%
rename from src/app/shared/services/client-cookie.service.ts
rename to src/app/core/services/client-cookie.service.ts
diff --git a/src/app/shared/services/cookie.service.spec.ts b/src/app/core/services/cookie.service.spec.ts
similarity index 100%
rename from src/app/shared/services/cookie.service.spec.ts
rename to src/app/core/services/cookie.service.spec.ts
diff --git a/src/app/shared/services/cookie.service.ts b/src/app/core/services/cookie.service.ts
similarity index 100%
rename from src/app/shared/services/cookie.service.ts
rename to src/app/core/services/cookie.service.ts
diff --git a/src/app/shared/services/route.actions.ts b/src/app/core/services/route.actions.ts
similarity index 100%
rename from src/app/shared/services/route.actions.ts
rename to src/app/core/services/route.actions.ts
diff --git a/src/app/shared/services/route.effects.ts b/src/app/core/services/route.effects.ts
similarity index 100%
rename from src/app/shared/services/route.effects.ts
rename to src/app/core/services/route.effects.ts
diff --git a/src/app/shared/services/route.reducer.ts b/src/app/core/services/route.reducer.ts
similarity index 100%
rename from src/app/shared/services/route.reducer.ts
rename to src/app/core/services/route.reducer.ts
diff --git a/src/app/shared/services/route.service.spec.ts b/src/app/core/services/route.service.spec.ts
similarity index 97%
rename from src/app/shared/services/route.service.spec.ts
rename to src/app/core/services/route.service.spec.ts
index c6003521a7859b0a888a76700ac5b7efad106ab5..ae31f2838420dafb1642208cd8d3585baad696ed 100644
--- a/src/app/shared/services/route.service.spec.ts
+++ b/src/app/core/services/route.service.spec.ts
@@ -6,9 +6,9 @@ import { Store } from '@ngrx/store';
 import { getTestScheduler, hot } from 'jasmine-marbles';
 
 import { RouteService } from './route.service';
-import { MockRouter } from '../mocks/mock-router';
+import { MockRouter } from '../../shared/mocks/mock-router';
 import { TestScheduler } from 'rxjs/testing';
-import { AddUrlToHistoryAction } from '../history/history.actions';
+import { AddUrlToHistoryAction } from '../../shared/history/history.actions';
 
 describe('RouteService', () => {
   let scheduler: TestScheduler;
diff --git a/src/app/shared/services/route.service.ts b/src/app/core/services/route.service.ts
similarity index 95%
rename from src/app/shared/services/route.service.ts
rename to src/app/core/services/route.service.ts
index dc626484c1215f427a52d06c5720d2cf75e78ff8..65aa85894539aa2c680564f6cefef7491dc71084 100644
--- a/src/app/shared/services/route.service.ts
+++ b/src/app/core/services/route.service.ts
@@ -12,12 +12,12 @@ import { combineLatest, Observable } from 'rxjs';
 import { createSelector, MemoizedSelector, select, Store } from '@ngrx/store';
 import { isEqual } from 'lodash';
 
-import { AddUrlToHistoryAction } from '../history/history.actions';
-import { historySelector } from '../history/selectors';
+import { AddUrlToHistoryAction } from '../../shared/history/history.actions';
+import { historySelector } from '../../shared/history/selectors';
 import { SetParametersAction, SetQueryParametersAction } from './route.actions';
-import { CoreState } from '../../core/core.reducers';
-import { hasValue } from '../empty.util';
-import { coreSelector } from '../../core/core.selectors';
+import { CoreState } from '../core.reducers';
+import { hasValue } from '../../shared/empty.util';
+import { coreSelector } from '../core.selectors';
 
 /**
  * Selector to select all route parameters from the store
diff --git a/src/app/shared/services/server-cookie.service.ts b/src/app/core/services/server-cookie.service.ts
similarity index 100%
rename from src/app/shared/services/server-cookie.service.ts
rename to src/app/core/services/server-cookie.service.ts
diff --git a/src/app/shared/services/server-response.service.ts b/src/app/core/services/server-response.service.ts
similarity index 100%
rename from src/app/shared/services/server-response.service.ts
rename to src/app/core/services/server-response.service.ts
diff --git a/src/app/shared/services/window.service.ts b/src/app/core/services/window.service.ts
similarity index 100%
rename from src/app/shared/services/window.service.ts
rename to src/app/core/services/window.service.ts
diff --git a/src/app/pagenotfound/pagenotfound.component.ts b/src/app/pagenotfound/pagenotfound.component.ts
index 6e173b4139bf89a9760677c82073541740a99691..b11de582694711f576941672570135ea8d40813f 100644
--- a/src/app/pagenotfound/pagenotfound.component.ts
+++ b/src/app/pagenotfound/pagenotfound.component.ts
@@ -1,4 +1,4 @@
-import { ServerResponseService } from '../shared/services/server-response.service';
+import { ServerResponseService } from '../core/services/server-response.service';
 import { Component, ChangeDetectionStrategy, OnInit } from '@angular/core';
 import { AuthService } from '../core/auth/auth.service';
 
diff --git a/src/app/shared/comcol-forms/create-comcol-page/create-comcol-page.component.spec.ts b/src/app/shared/comcol-forms/create-comcol-page/create-comcol-page.component.spec.ts
index 4dad4a703f72ae909807eefb7f64c85451fca00f..c53c45fbe9a7b51953af24113166b7fea27dc68f 100644
--- a/src/app/shared/comcol-forms/create-comcol-page/create-comcol-page.component.spec.ts
+++ b/src/app/shared/comcol-forms/create-comcol-page/create-comcol-page.component.spec.ts
@@ -1,6 +1,6 @@
 import { async, ComponentFixture, TestBed } from '@angular/core/testing';
 import { CommunityDataService } from '../../../core/data/community-data.service';
-import { RouteService } from '../../services/route.service';
+import { RouteService } from '../../../core/services/route.service';
 import { Router } from '@angular/router';
 import { TranslateModule } from '@ngx-translate/core';
 import { of as observableOf } from 'rxjs';
diff --git a/src/app/shared/comcol-forms/create-comcol-page/create-comcol-page.component.ts b/src/app/shared/comcol-forms/create-comcol-page/create-comcol-page.component.ts
index c9fcfecb97815ad487a1abb0678a69fbddc58c0c..e07f2a5a0ab3cd13a3d6987a9cdd902ff2813e28 100644
--- a/src/app/shared/comcol-forms/create-comcol-page/create-comcol-page.component.ts
+++ b/src/app/shared/comcol-forms/create-comcol-page/create-comcol-page.component.ts
@@ -2,7 +2,7 @@ import { Component, OnInit } from '@angular/core';
 import { Community } from '../../../core/shared/community.model';
 import { CommunityDataService } from '../../../core/data/community-data.service';
 import { Observable } from 'rxjs';
-import { RouteService } from '../../services/route.service';
+import { RouteService } from '../../../core/services/route.service';
 import { Router } from '@angular/router';
 import { RemoteData } from '../../../core/data/remote-data';
 import { isNotEmpty, isNotUndefined } from '../../empty.util';
diff --git a/src/app/submission/submission.module.ts b/src/app/submission/submission.module.ts
index e6c24226e27f0d119853766e57e6ced32b896f8b..82f57ea970bcdbd2b37677a4f16efc1becd87d82 100644
--- a/src/app/submission/submission.module.ts
+++ b/src/app/submission/submission.module.ts
@@ -31,7 +31,7 @@ import { SubmissionSubmitComponent } from './submit/submission-submit.component'
 @NgModule({
   imports: [
     CommonModule,
-    CoreModule,
+    CoreModule.forRoot(),
     SharedModule,
     StoreModule.forFeature('submission', submissionReducers, {}),
     EffectsModule.forFeature(submissionEffects),
diff --git a/src/app/submission/submission.service.spec.ts b/src/app/submission/submission.service.spec.ts
index d764f095381da3efe3f8525a291e4d6303e92efd..80ad3b606ab105126d3528e033e00abf71438457 100644
--- a/src/app/submission/submission.service.spec.ts
+++ b/src/app/submission/submission.service.spec.ts
@@ -12,7 +12,7 @@ import { MockRouter } from '../shared/mocks/mock-router';
 import { SubmissionService } from './submission.service';
 import { submissionReducers } from './submission.reducers';
 import { SubmissionRestService } from '../core/submission/submission-rest.service';
-import { RouteService } from '../shared/services/route.service';
+import { RouteService } from '../core/services/route.service';
 import { SubmissionRestServiceStub } from '../shared/testing/submission-rest-service-stub';
 import { MockActivatedRoute } from '../shared/mocks/mock-active-router';
 import { GLOBAL_CONFIG } from '../../config';
diff --git a/src/app/submission/submission.service.ts b/src/app/submission/submission.service.ts
index 82185a8eaeca0828e0bdbd3883c2fd294ba09b2f..36aedaaab65fca8b4f374068bf7a5cc50e50abdf 100644
--- a/src/app/submission/submission.service.ts
+++ b/src/app/submission/submission.service.ts
@@ -35,7 +35,7 @@ import { SubmissionRestService } from '../core/submission/submission-rest.servic
 import { SectionDataObject } from './sections/models/section-data.model';
 import { SubmissionScopeType } from '../core/submission/submission-scope-type';
 import { SubmissionObject } from '../core/submission/models/submission-object.model';
-import { RouteService } from '../shared/services/route.service';
+import { RouteService } from '../core/services/route.service';
 import { SectionsType } from './sections/sections-type';
 import { NotificationsService } from '../shared/notifications/notifications.service';
 import { SubmissionDefinitionsModel } from '../core/config/models/config-submission-definitions.model';
diff --git a/src/modules/app/browser-app.module.ts b/src/modules/app/browser-app.module.ts
index b20894880b174baf9a00b0ff85d6bd09ea66e02f..7ff70457bbb67346a08396dfbd91af2ce88694ee 100644
--- a/src/modules/app/browser-app.module.ts
+++ b/src/modules/app/browser-app.module.ts
@@ -15,8 +15,8 @@ import { AppComponent } from '../../app/app.component';
 import { AppModule } from '../../app/app.module';
 import { DSpaceBrowserTransferStateModule } from '../transfer-state/dspace-browser-transfer-state.module';
 import { DSpaceTransferState } from '../transfer-state/dspace-transfer-state.service';
-import { ClientCookieService } from '../../app/shared/services/client-cookie.service';
-import { CookieService } from '../../app/shared/services/cookie.service';
+import { ClientCookieService } from '../../app/core/services/client-cookie.service';
+import { CookieService } from '../../app/core/services/cookie.service';
 import { AuthService } from '../../app/core/auth/auth.service';
 import { Angulartics2Module } from 'angulartics2';
 import { Angulartics2GoogleAnalytics } from 'angulartics2/ga';
diff --git a/src/modules/app/server-app.module.ts b/src/modules/app/server-app.module.ts
index d809d3ccedafc3dcf56d056b2d8767675e2b78ac..bd3379c8ded039e6b104d278f5b16bc1fd65ea3a 100644
--- a/src/modules/app/server-app.module.ts
+++ b/src/modules/app/server-app.module.ts
@@ -13,8 +13,8 @@ import { DSpaceServerTransferStateModule } from '../transfer-state/dspace-server
 import { DSpaceTransferState } from '../transfer-state/dspace-transfer-state.service';
 
 import { TranslateUniversalLoader } from '../translate-universal-loader';
-import { CookieService } from '../../app/shared/services/cookie.service';
-import { ServerCookieService } from '../../app/shared/services/server-cookie.service';
+import { CookieService } from '../../app/core/services/cookie.service';
+import { ServerCookieService } from '../../app/core/services/server-cookie.service';
 import { AuthService } from '../../app/core/auth/auth.service';
 import { ServerAuthService } from '../../app/core/auth/server-auth.service';