diff --git a/src/app/core/data/comcol-data.service.ts b/src/app/core/data/comcol-data.service.ts
index 8519bb2b2561aa7084b12916af685f8201f94170..0859d075ca9b78578d38f9b5e41c0ff6df070c3b 100644
--- a/src/app/core/data/comcol-data.service.ts
+++ b/src/app/core/data/comcol-data.service.ts
@@ -66,20 +66,4 @@ export abstract class ComColDataService<TNormalized extends NormalizedObject, TD
     }
   }
 
-  public buildFormData(comcol, parentUUID): FormData {
-    const form: FormData = new FormData();
-    form.append('name', comcol.name);
-    if (isNotEmpty(parentUUID)) {
-      form.append('parent', parentUUID);
-    }
-    if (comcol.metadata) {
-      for (const i of Object.keys(comcol.metadata)) {
-        if (isNotEmpty(comcol.metadata[i].value)) {
-          form.append(comcol.metadata[i].key, comcol.metadata[i].value);
-        }
-      }
-    }
-    return form;
-  }
-
 }
diff --git a/src/app/core/data/data.service.ts b/src/app/core/data/data.service.ts
index b2946b2164977979248a7a2b839916e674f17b2c..13550b2358cf174592b48b908c553668afd2d3e4 100644
--- a/src/app/core/data/data.service.ts
+++ b/src/app/core/data/data.service.ts
@@ -121,12 +121,13 @@ export abstract class DataService<TNormalized extends NormalizedObject, TDomain>
     const requestId = this.requestService.generateRequestId();
     const endpoint$ = this.halService.getEndpoint(this.linkPath).pipe(
       isNotEmptyOperator(),
-      distinctUntilChanged()
+      distinctUntilChanged(),
+      map((endpoint: string) => parentUUID ? `${endpoint}?parent=${parentUUID}` : endpoint)
     );
 
     const request$ = endpoint$.pipe(
       take(1),
-      map((endpoint: string) => new CreateRequest(requestId, endpoint, this.buildFormData(dso, parentUUID))),
+      map((endpoint: string) => new CreateRequest(requestId, endpoint, dso)),
       configureRequest(this.requestService)
     );
 
@@ -153,6 +154,4 @@ export abstract class DataService<TNormalized extends NormalizedObject, TDomain>
     return this.rdbService.toRemoteDataObservable(requestEntry$, responseCache$, payload$);
   }
 
-  public abstract buildFormData(dso: TDomain, parentUUID: string): FormData;
-
 }
diff --git a/src/app/core/data/dspace-object-data.service.ts b/src/app/core/data/dspace-object-data.service.ts
index 14540d0782c50d56ebdb00173c88a17b9d2cf7d5..d14d7f8a0b9432f8fae7a697eedc646ae9775464 100644
--- a/src/app/core/data/dspace-object-data.service.ts
+++ b/src/app/core/data/dspace-object-data.service.ts
@@ -37,10 +37,6 @@ class DataServiceImpl extends DataService<NormalizedDSpaceObject, DSpaceObject>
   getFindByIDHref(endpoint, resourceID): string {
     return endpoint.replace(/\{\?uuid\}/,`?uuid=${resourceID}`);
   }
-
-  buildFormData(dso: DSpaceObject, parentUUID: string): FormData {
-    return undefined;
-  }
 }
 
 @Injectable()
diff --git a/src/app/core/data/item-data.service.ts b/src/app/core/data/item-data.service.ts
index c3c32691ce909558fee92ef9ae41e2754fad3f96..6b62fe6688633bb8d1e61fc74b343cb89dfdfd06 100644
--- a/src/app/core/data/item-data.service.ts
+++ b/src/app/core/data/item-data.service.ts
@@ -47,9 +47,4 @@ export class ItemDataService extends DataService<NormalizedItem, Item> {
     }
   }
 
-  buildFormData(dso: Item, parentUUID: string): FormData {
-    // TODO: build FormData for creating an Item
-    return undefined;
-  }
-
 }
diff --git a/src/app/core/data/request.effects.ts b/src/app/core/data/request.effects.ts
index 9d27717dc699f829216f224f478200a6d74d5ba5..5fadd316f42288b9111635c4fbd7a8b572062d9f 100644
--- a/src/app/core/data/request.effects.ts
+++ b/src/app/core/data/request.effects.ts
@@ -38,7 +38,7 @@ export class RequestEffects {
     }),
     map((entry: RequestEntry) => entry.request),
     flatMap((request: RestRequest) => {
-      let body = request.body;
+      let body;
       if (isNotEmpty(request.body)) {
         const serializer = new DSpaceRESTv2Serializer(NormalizedObjectFactory.getConstructor(request.body.type));
         body = serializer.serialize(request.body);
diff --git a/src/app/core/dspace-rest-v2/dspace-rest-v2.service.ts b/src/app/core/dspace-rest-v2/dspace-rest-v2.service.ts
index 78c93b8c080ab66de1bac2c0f5ac582ae62f3cd1..c8cced9e8ae9bd64aedefe379e4ba0cc8181a723 100644
--- a/src/app/core/dspace-rest-v2/dspace-rest-v2.service.ts
+++ b/src/app/core/dspace-rest-v2/dspace-rest-v2.service.ts
@@ -6,6 +6,8 @@ import { RestRequestMethod } from '../data/request.models';
 
 import { DSpaceRESTV2Response } from './dspace-rest-v2-response.model';
 import { HttpObserve } from '@angular/common/http/src/client';
+import { isNotEmpty } from '../../shared/empty.util';
+import { DSpaceObject } from '../shared/dspace-object.model';
 
 export interface HttpOptions {
   body?: any;
@@ -59,6 +61,9 @@ export class DSpaceRESTv2Service {
   request(method: RestRequestMethod, url: string, body?: any, options?: HttpOptions): Observable<DSpaceRESTV2Response> {
     const requestOptions: HttpOptions = {};
     requestOptions.body = body;
+    if (method === RestRequestMethod.Post && isNotEmpty(body)) {
+      requestOptions.body = this.buildFormData(body);
+    }
     requestOptions.observe = 'response';
     if (options && options.headers) {
       requestOptions.headers = Object.assign(new HttpHeaders(),  options.headers);
@@ -74,4 +79,17 @@ export class DSpaceRESTv2Service {
       });
   }
 
+  buildFormData(dso: DSpaceObject): FormData {
+    const form: FormData = new FormData();
+    form.append('name', dso.name);
+    if (dso.metadata) {
+      for (const i of Object.keys(dso.metadata)) {
+        if (isNotEmpty(dso.metadata[i].value)) {
+          form.append(dso.metadata[i].key, dso.metadata[i].value);
+        }
+      }
+    }
+    return form;
+  }
+
 }