diff --git a/goofy-client/libs/api-root-shared/src/lib/api-root.service.spec.ts b/goofy-client/libs/api-root-shared/src/lib/api-root.service.spec.ts
index 2e225596b95a5cf23fef80fe167d6a8f55d58292..27356c6eb6fb99a2e7b17d87f6176699d3c0b05f 100644
--- a/goofy-client/libs/api-root-shared/src/lib/api-root.service.spec.ts
+++ b/goofy-client/libs/api-root-shared/src/lib/api-root.service.spec.ts
@@ -1,10 +1,13 @@
-import { createEmptyStateResource } from '@goofy-client/tech-shared';
+import { BinaryFileResource } from '@goofy-client/binary-file-shared';
+import { createEmptyStateResource, createStateResource, StateResource } from '@goofy-client/tech-shared';
 import { mock } from '@goofy-client/test-utils';
-import { Resource } from '@ngxp/rest';
-import { createDummyResource } from 'libs/tech-shared/test/resource';
+import { getUrl } from '@ngxp/rest';
+import { hot } from 'jest-marbles';
 import { of } from 'rxjs';
-import { createApiRoot } from '../../test/api-root';
-import { ApiRoot } from './api-root.model';
+import { createBinaryFileResource } from '../../../binary-file-shared/test/binary-file';
+import { createApiRoot, createApiRootResource } from '../../test/api-root';
+import { ApiRootFacade } from './+state/api-root.facade';
+import { ApiRoot, ApiRootResource } from './api-root.model';
 import { ApiRootRepository } from './api-root.repository';
 import { ApiRootService } from './api-root.service';
 
@@ -12,10 +15,15 @@ describe('ApiRootService', () => {
 
 	var repository;
 	var service;
+	var facade;
+
+	const apiRoot: ApiRootResource = createApiRootResource();
+	const apiRootStateResource: StateResource<ApiRootResource> = createStateResource(apiRoot);
 
 	beforeEach(() => {
 		repository = mock(ApiRootRepository);
-		service = new ApiRootService(repository);
+		facade = mock(ApiRootFacade);
+		service = new ApiRootService(repository, facade);
 	})
 
 	describe('calling getApiRoot', () => {
@@ -73,12 +81,32 @@ describe('ApiRootService', () => {
 
 	describe('getDownloadToken', () => {
 
+		const binaryFile: BinaryFileResource = createBinaryFileResource();
+
+		beforeEach(() => {
+			facade.getApiRoot.mockReturnValue(hot('-a', { a: apiRootStateResource }));
+		})
+
+		it('should call getApiRoot', () => {
+			service.getDownloadToken(binaryFile);
+
+			expect(facade.getApiRoot).toHaveBeenCalled();
+		})
+
+		it('should NOT call repository on null apiRoot', () => {
+			service.getApiRoot = jest.fn().mockReturnValue(of(createEmptyStateResource()));
+
+			service.getDownloadToken(binaryFile).subscribe();
+
+			expect(repository.downloadToken).not.toHaveBeenCalled();
+		})
+
 		it('should call repository', () => {
-			const resource: Resource = createDummyResource();
+			facade.getApiRoot.mockReturnValue(of(apiRootStateResource));
 
-			service.getDownloadToken(resource);
+			service.getDownloadToken(binaryFile).subscribe();
 
-			expect(repository.downloadToken).toHaveBeenCalled();
-		});
-	});
+			expect(repository.downloadToken).toHaveBeenCalledWith(apiRoot, getUrl(binaryFile));
+		})
+	})
 })
\ No newline at end of file
diff --git a/goofy-client/libs/api-root-shared/src/lib/api-root.service.ts b/goofy-client/libs/api-root-shared/src/lib/api-root.service.ts
index de772e66192387d61bb4b8c5e62f3bf5baa33175..b65803b430521a39c45894cd27e5a717bd1099a2 100644
--- a/goofy-client/libs/api-root-shared/src/lib/api-root.service.ts
+++ b/goofy-client/libs/api-root-shared/src/lib/api-root.service.ts
@@ -1,8 +1,10 @@
 import { Injectable } from '@angular/core';
-import { ApiDownloadToken, ApiRootResource } from '@goofy-client/api-root-shared';
-import { createEmptyStateResource, createStateResource, doIfLoadingRequired, StateResource } from '@goofy-client/tech-shared';
+import { createEmptyStateResource, createStateResource, doIfLoadingRequired, isNotNull, StateResource } from '@goofy-client/tech-shared';
 import { getUrl, Resource } from '@ngxp/rest';
 import { BehaviorSubject, Observable } from 'rxjs';
+import { filter, switchMap } from 'rxjs/operators';
+import { ApiRootFacade } from './+state/api-root.facade';
+import { ApiDownloadToken, ApiRootResource } from './api-root.model';
 import { ApiRootRepository } from './api-root.repository';
 
 @Injectable()
@@ -10,7 +12,7 @@ export class ApiRootService {
 
 	private readonly apiRoot$: BehaviorSubject<StateResource<ApiRootResource>> = new BehaviorSubject<StateResource<ApiRootResource>>(createEmptyStateResource<ApiRootResource>());
 
-	constructor(private repository: ApiRootRepository) { }
+	constructor(private repository: ApiRootRepository, private apiRootFacade: ApiRootFacade) { }
 
 	public getApiRoot(): Observable<StateResource<ApiRootResource>> {
 		doIfLoadingRequired(this.apiRoot$.value, () => this.loadApiRoot())
@@ -29,6 +31,9 @@ export class ApiRootService {
 
 	//TOOD: In der Facade zur Verfuegung stellen, aufrufende Stelle anpassen und den service lib protected machen
 	public getDownloadToken(resource: Resource): Observable<ApiDownloadToken> {
-		return this.repository.downloadToken(this.apiRoot$.value.resource, getUrl(resource));
+		return this.apiRootFacade.getApiRoot().pipe(
+			filter(apiRoot => isNotNull(apiRoot.resource)),
+			switchMap(apiRoot => this.repository.downloadToken(apiRoot.resource, getUrl(resource)))
+		);
 	}
 }
\ No newline at end of file