diff --git a/src/app/request-copy/grant-deny-request-copy/grant-deny-request-copy.component.html b/src/app/request-copy/grant-deny-request-copy/grant-deny-request-copy.component.html
new file mode 100644
index 0000000000..ae38a964e8
--- /dev/null
+++ b/src/app/request-copy/grant-deny-request-copy/grant-deny-request-copy.component.html
@@ -0,0 +1,20 @@
+
+
{{'grant-deny-request-copy.header' | translate}}
+
{{'grant-deny-request-copy.intro' | translate}}
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/request-copy/grant-deny-request-copy/grant-deny-request-copy.component.scss b/src/app/request-copy/grant-deny-request-copy/grant-deny-request-copy.component.scss
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/app/request-copy/grant-deny-request-copy/grant-deny-request-copy.component.ts b/src/app/request-copy/grant-deny-request-copy/grant-deny-request-copy.component.ts
new file mode 100644
index 0000000000..f8134cdf96
--- /dev/null
+++ b/src/app/request-copy/grant-deny-request-copy/grant-deny-request-copy.component.ts
@@ -0,0 +1,50 @@
+import { Component, OnInit } from '@angular/core';
+import { TranslateService } from '@ngx-translate/core';
+import { EPersonDataService } from '../../core/eperson/eperson-data.service';
+import { Store } from '@ngrx/store';
+import { CoreState } from '../../core/core.reducers';
+import { ActivatedRoute, Router } from '@angular/router';
+import { FormBuilder } from '@angular/forms';
+import { NotificationsService } from '../../shared/notifications/notifications.service';
+import { EndUserAgreementService } from '../../core/end-user-agreement/end-user-agreement.service';
+import { map } from 'rxjs/operators';
+import { Registration } from '../../core/shared/registration.model';
+import { ItemRequest } from '../../core/shared/item-request.model';
+import { Observable } from 'rxjs/internal/Observable';
+import { getFirstCompletedRemoteData, redirectOn4xx } from '../../core/shared/operators';
+import { RemoteData } from '../../core/data/remote-data';
+import { AuthService } from '../../core/auth/auth.service';
+
+@Component({
+ selector: 'ds-grant-deny-request-copy',
+ styleUrls: ['./grant-deny-request-copy.component.scss'],
+ templateUrl: './grant-deny-request-copy.component.html'
+})
+export class GrantDenyRequestCopyComponent implements OnInit {
+ private itemRequest$: Observable>;
+
+
+ constructor(
+ private translateService: TranslateService,
+ private ePersonDataService: EPersonDataService,
+ private store: Store,
+ private router: Router,
+ private route: ActivatedRoute,
+ private formBuilder: FormBuilder,
+ private notificationsService: NotificationsService,
+ private endUserAgreementService: EndUserAgreementService,
+ private authService: AuthService
+ ) {
+
+ }
+
+ ngOnInit(): void {
+ this.itemRequest$ = this.route.data.pipe(
+ map((data) => data.request as RemoteData),
+ getFirstCompletedRemoteData(),
+ redirectOn4xx(this.router, this.authService)
+ );
+
+ }
+
+}
diff --git a/src/app/request-copy/request-copy-routing.module.ts b/src/app/request-copy/request-copy-routing.module.ts
new file mode 100644
index 0000000000..734a661014
--- /dev/null
+++ b/src/app/request-copy/request-copy-routing.module.ts
@@ -0,0 +1,27 @@
+import { NgModule } from '@angular/core';
+import { RouterModule } from '@angular/router';
+import { EndUserAgreementCookieGuard } from '../core/end-user-agreement/end-user-agreement-cookie.guard';
+import { RequestCopyResolver } from './request-copy.resolver';
+import { GrantDenyRequestCopyComponent } from './grant-deny-request-copy/grant-deny-request-copy.component';
+
+@NgModule({
+ imports: [
+ RouterModule.forChild([
+ {
+ path: ':token',
+ component: GrantDenyRequestCopyComponent,
+ resolve: {request: RequestCopyResolver},
+ canActivate: [EndUserAgreementCookieGuard]
+ }
+ ])
+ ],
+ providers: [
+ RequestCopyResolver,
+ GrantDenyRequestCopyComponent
+ ]
+})
+/**
+ * Module related to the navigation to components used to register a new user
+ */
+export class RegisterPageRoutingModule {
+}
diff --git a/src/app/request-copy/request-copy.module.ts b/src/app/request-copy/request-copy.module.ts
new file mode 100644
index 0000000000..eef0ee4313
--- /dev/null
+++ b/src/app/request-copy/request-copy.module.ts
@@ -0,0 +1,22 @@
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { SharedModule } from '../shared/shared.module';
+import { GrantDenyRequestCopyComponent } from './grant-deny-request-copy/grant-deny-request-copy.component';
+
+@NgModule({
+ imports: [
+ CommonModule,
+ SharedModule,
+ ],
+ declarations: [
+ GrantDenyRequestCopyComponent
+ ],
+ providers: []
+})
+
+/**
+ * Module related to components used to register a new user
+ */
+export class RequestCopyModule {
+
+}
diff --git a/src/app/request-copy/request-copy.resolver.ts b/src/app/request-copy/request-copy.resolver.ts
new file mode 100644
index 0000000000..0086d51e57
--- /dev/null
+++ b/src/app/request-copy/request-copy.resolver.ts
@@ -0,0 +1,19 @@
+import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';
+import { RemoteData } from '../core/data/remote-data';
+import { ItemRequest } from '../core/shared/item-request.model';
+import { Observable } from 'rxjs/internal/Observable';
+import { ItemRequestDataService } from '../core/data/item-request-data.service';
+
+export class RequestCopyResolver implements Resolve> {
+
+ constructor(
+ private itemRequestDataService: ItemRequestDataService,
+ ) {
+ }
+
+ resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable> | Promise> | RemoteData {
+ // TODO add method after knowing whether they will change the rest object to be compatible with normal dataservice.
+ return undefined;
+ }
+
+}
\ No newline at end of file