diff --git a/src/app/core/data/comcol-data.service.ts b/src/app/core/data/comcol-data.service.ts
index c47d48dc07ec7df61210b1c754597bc3a27c2720..c9dff8fbe1a5da667060520af7a2f3b7b90fa4d9 100644
--- a/src/app/core/data/comcol-data.service.ts
+++ b/src/app/core/data/comcol-data.service.ts
@@ -66,19 +66,23 @@ export abstract class ComColDataService<TNormalized extends NormalizedObject, TD
     }
   }
 
-  public buildCreateParams(comcol): Observable<string> {
+  public buildCreateBody(comcol): Observable<any> {
     return comcol.owner.pipe(
       map((rd: RemoteData<Community | Collection>) => {
-        let urlParams = '?name=' + comcol.name;
+        const form: any = {
+          name: comcol.name
+        };
         if (rd.payload.id) {
-          urlParams += '&parent=' + rd.payload.id;
+          form.parent = rd.payload.id;
         }
         if (comcol.metadata) {
           for (const i of Object.keys(comcol.metadata)) {
-            urlParams += '&' + comcol.metadata[i].key + '=' + comcol.metadata[i].value;
+            if (isNotEmpty(comcol.metadata[i].value)) {
+              form[comcol.metadata[i].key] = comcol.metadata[i].value;
+            }
           }
         }
-        return urlParams;
+        return form;
       })
     );
   }
diff --git a/src/app/core/data/data.service.ts b/src/app/core/data/data.service.ts
index 9d7422cbe1c75d70e689917621b1750581611dc9..3dc32e9e696fd6cee536beee1bedc064395045af 100644
--- a/src/app/core/data/data.service.ts
+++ b/src/app/core/data/data.service.ts
@@ -14,24 +14,21 @@ import {
   FindAllRequest,
   FindByIDRequest,
   GetRequest,
-  PostRequest,
   RestRequest
 } from './request.models';
 import { RequestService } from './request.service';
 import { NormalizedObject } from '../cache/models/normalized-object.model';
-import { distinctUntilChanged, map, share, switchMap, take, withLatestFrom } from 'rxjs/operators';
+import { distinctUntilChanged, map, take, withLatestFrom } from 'rxjs/operators';
 import {
   configureRequest,
-  filterSuccessfulResponses, getRequestFromSelflink, getRequestFromUUID,
+  filterSuccessfulResponses,
   getResponseFromSelflink
 } from '../shared/operators';
 import { ResponseCacheEntry } from '../cache/response-cache.reducer';
 import { HttpOptions } from '../dspace-rest-v2/dspace-rest-v2.service';
 import { HttpHeaders } from '@angular/common/http';
-import { DSOSuccessResponse, ErrorResponse, GenericSuccessResponse } from '../cache/response-cache.models';
+import { ErrorResponse, GenericSuccessResponse } from '../cache/response-cache.models';
 import { AuthService } from '../auth/auth.service';
-import { Collection } from '../shared/collection.model';
-import { Community } from '../shared/community.model';
 import { NotificationsService } from '../../shared/notifications/notifications.service';
 import { NotificationOptions } from '../../shared/notifications/models/notification-options.model';
 
@@ -123,19 +120,18 @@ export abstract class DataService<TNormalized extends NormalizedObject, TDomain>
     const requestId = this.requestService.generateRequestId();
     const endpoint$ = this.halService.getEndpoint(this.linkPath).pipe(
       isNotEmptyOperator(),
-      distinctUntilChanged(),
-      withLatestFrom(this.buildCreateParams(dso)),
-      map(([endpointURL, params]) => endpointURL + params)
+      distinctUntilChanged()
     );
 
     const request$ = endpoint$.pipe(
       take(1),
-      map((endpoint) => {
+      withLatestFrom(this.buildCreateBody(dso)),
+      map(([endpoint, formdata]) => {
         const options: HttpOptions = Object.create({});
-        const headers = new HttpHeaders();
-        headers.append('Authentication', this.authService.buildAuthHeader());
+        let headers = new HttpHeaders();
+        headers = headers.append('Content-Type','multipart/form-data');
         options.headers = headers;
-        return new CreateRequest(requestId, endpoint, options);
+        return new CreateRequest(requestId, endpoint, formdata, options);
       }),
       configureRequest(this.requestService)
     );
@@ -162,6 +158,6 @@ export abstract class DataService<TNormalized extends NormalizedObject, TDomain>
     return this.rdbService.toRemoteDataObservable(requestEntry$, responseCache$, payload$);
   }
 
-  public abstract buildCreateParams(dso: TDomain): Observable<string>;
+  public abstract buildCreateBody(dso: TDomain): Observable<any>;
 
 }
diff --git a/src/app/core/data/dspace-object-data.service.ts b/src/app/core/data/dspace-object-data.service.ts
index eb657e1737a8d32b5d7e8cf2106e66196b1af0bb..8bae4e56ede2e0a54bfdd449f0dfac0bc668bbf7 100644
--- a/src/app/core/data/dspace-object-data.service.ts
+++ b/src/app/core/data/dspace-object-data.service.ts
@@ -36,7 +36,7 @@ class DataServiceImpl extends DataService<NormalizedDSpaceObject, DSpaceObject>
     return endpoint.replace(/\{\?uuid\}/,`?uuid=${resourceID}`);
   }
 
-  buildCreateParams(dso: DSpaceObject): Observable<string> {
+  buildCreateBody(dso: DSpaceObject): Observable<FormData> {
     return undefined;
   }
 }
diff --git a/src/app/core/data/item-data.service.ts b/src/app/core/data/item-data.service.ts
index 448d3fc84b1907ee85707cc131d48283aff18e08..343d4efede9a82d0901b41f2e5cc03fe427fbc8d 100644
--- a/src/app/core/data/item-data.service.ts
+++ b/src/app/core/data/item-data.service.ts
@@ -45,8 +45,8 @@ export class ItemDataService extends DataService<NormalizedItem, Item> {
     }
   }
 
-  buildCreateParams(dso: Item): Observable<string> {
-    // TODO: Build parameters for creating an Item on the REST service
+  buildCreateBody(dso: Item): Observable<FormData> {
+    // TODO: Build http body for creating an Item on the REST service
     return undefined;
   }