diff --git a/src/main/java/com/inteligr8/alfresco/activiti/api/AppDefinitionsCxfApi.java b/src/main/java/com/inteligr8/alfresco/activiti/api/AppDefinitionsCxfApi.java
index b798e13..0d20916 100644
--- a/src/main/java/com/inteligr8/alfresco/activiti/api/AppDefinitionsCxfApi.java
+++ b/src/main/java/com/inteligr8/alfresco/activiti/api/AppDefinitionsCxfApi.java
@@ -9,10 +9,9 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.MediaType;
 
-import org.apache.cxf.jaxrs.ext.multipart.MultipartBody;
-
 import com.inteligr8.alfresco.activiti.model.AppDefinitionRepresentation;
 import com.inteligr8.alfresco.activiti.model.AppDefinitionUpdateResultRepresentation;
+import com.inteligr8.alfresco.activiti.model.FileMultipartCxf;
 
 @Path("/api/enterprise/app-definitions")
 public interface AppDefinitionsCxfApi {
@@ -22,7 +21,7 @@ public interface AppDefinitionsCxfApi {
     @Consumes({ MediaType.MULTIPART_FORM_DATA })
     @Produces({ MediaType.APPLICATION_JSON })
     AppDefinitionRepresentation import_(
-    		MultipartBody body,
+    		FileMultipartCxf body,
     		@QueryParam("renewIdmEntries") Boolean renewIdmEntries);
 
     @POST
@@ -31,7 +30,7 @@ public interface AppDefinitionsCxfApi {
     @Produces({ MediaType.APPLICATION_JSON })
     AppDefinitionRepresentation import_(
     		@PathParam("modelId") Long appId,
-    		MultipartBody body,
+    		FileMultipartCxf body,
     		@QueryParam("renewIdmEntries") Boolean renewIdmEntries);
 
     @POST
@@ -39,7 +38,7 @@ public interface AppDefinitionsCxfApi {
     @Consumes({ MediaType.MULTIPART_FORM_DATA })
     @Produces({ MediaType.APPLICATION_JSON })
     AppDefinitionUpdateResultRepresentation publishApp(
-    		MultipartBody body);
+    		FileMultipartCxf body);
 
     @POST
     @Path("{modelId}/publish-app")
@@ -47,6 +46,6 @@ public interface AppDefinitionsCxfApi {
     @Produces({ MediaType.APPLICATION_JSON })
     AppDefinitionUpdateResultRepresentation publishApp(
     		@PathParam("modelId") Long appId,
-    		MultipartBody body);
+    		FileMultipartCxf body);
 
 }
diff --git a/src/main/java/com/inteligr8/alfresco/activiti/api/AppDefinitionsJerseyApi.java b/src/main/java/com/inteligr8/alfresco/activiti/api/AppDefinitionsJerseyApi.java
index 37ebfda..866ce7d 100644
--- a/src/main/java/com/inteligr8/alfresco/activiti/api/AppDefinitionsJerseyApi.java
+++ b/src/main/java/com/inteligr8/alfresco/activiti/api/AppDefinitionsJerseyApi.java
@@ -9,11 +9,9 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.MediaType;
 
-import org.glassfish.jersey.media.multipart.FormDataMultiPart;
-import org.glassfish.jersey.media.multipart.FormDataParam;
-
 import com.inteligr8.alfresco.activiti.model.AppDefinitionRepresentation;
 import com.inteligr8.alfresco.activiti.model.AppDefinitionUpdateResultRepresentation;
+import com.inteligr8.alfresco.activiti.model.FileMultipartJersey;
 
 @Path("/api/enterprise/app-definitions")
 public interface AppDefinitionsJerseyApi {
@@ -23,7 +21,7 @@ public interface AppDefinitionsJerseyApi {
     @Consumes({ MediaType.MULTIPART_FORM_DATA })
     @Produces({ MediaType.APPLICATION_JSON })
     AppDefinitionRepresentation importApp(
-    		@FormDataParam("file") FormDataMultiPart file,
+    		FileMultipartJersey file,
     		@QueryParam("renewIdmEntries") Boolean renewIdmEntries);
 
     @POST
@@ -32,7 +30,7 @@ public interface AppDefinitionsJerseyApi {
     @Produces({ MediaType.APPLICATION_JSON })
     AppDefinitionRepresentation importApp(
     		@PathParam("modelId") Long appId,
-    		@FormDataParam("file") FormDataMultiPart file,
+    		FileMultipartJersey file,
     		@QueryParam("renewIdmEntries") Boolean renewIdmEntries);
 
     @POST
@@ -40,7 +38,7 @@ public interface AppDefinitionsJerseyApi {
     @Consumes({ MediaType.MULTIPART_FORM_DATA })
     @Produces({ MediaType.APPLICATION_JSON })
     AppDefinitionUpdateResultRepresentation publishApp(
-    		FormDataMultiPart file);
+    		FileMultipartJersey file);
 
     @POST
     @Path("{modelId}/publish-app")
@@ -48,6 +46,6 @@ public interface AppDefinitionsJerseyApi {
     @Produces({ MediaType.APPLICATION_JSON })
     AppDefinitionUpdateResultRepresentation publishApp(
     		@PathParam("modelId") Long appId,
-    		FormDataMultiPart file);
+    		FileMultipartJersey file);
 
 }
diff --git a/src/main/java/com/inteligr8/alfresco/activiti/model/FileMultipartCxf.java b/src/main/java/com/inteligr8/alfresco/activiti/model/FileMultipartCxf.java
new file mode 100644
index 0000000..ce84a6d
--- /dev/null
+++ b/src/main/java/com/inteligr8/alfresco/activiti/model/FileMultipartCxf.java
@@ -0,0 +1,38 @@
+package com.inteligr8.alfresco.activiti.model;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.cxf.jaxrs.ext.multipart.Attachment;
+import org.apache.cxf.jaxrs.ext.multipart.ContentDisposition;
+import org.apache.cxf.jaxrs.ext.multipart.MultipartBody;
+
+public class FileMultipartCxf extends MultipartBody {
+	
+	public static FileMultipartCxf from(String filename, InputStream istream) throws IOException {
+		return new FileMultipartCxf(Arrays.asList(toAttachment(filename, istream)));
+	}
+ 	
+	public FileMultipartCxf(List<Attachment> atts) throws IOException {
+		super(atts);
+	}
+ 	
+	public FileMultipartCxf(List<Attachment> atts, boolean outbound) {
+		super(atts, outbound);
+	}
+	
+	public Attachment getFileAttachment() {
+		return this.getAttachment("file");
+	}
+
+	private static Attachment toAttachment(String filename, InputStream istream) {
+		if (filename == null) {
+			return new Attachment("file", istream, new ContentDisposition("form-data; name=\"file\""));
+		} else {
+			return new Attachment("file", istream, new ContentDisposition("form-data; name=\"file\"; filename=\"" + filename + "\""));
+		}
+	}
+
+}
diff --git a/src/main/java/com/inteligr8/alfresco/activiti/model/FileMultipartJersey.java b/src/main/java/com/inteligr8/alfresco/activiti/model/FileMultipartJersey.java
new file mode 100644
index 0000000..99160c5
--- /dev/null
+++ b/src/main/java/com/inteligr8/alfresco/activiti/model/FileMultipartJersey.java
@@ -0,0 +1,38 @@
+package com.inteligr8.alfresco.activiti.model;
+
+import java.io.InputStream;
+import java.text.ParseException;
+
+import org.glassfish.jersey.media.multipart.BodyPart;
+import org.glassfish.jersey.media.multipart.FormDataBodyPart;
+import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
+import org.glassfish.jersey.media.multipart.FormDataMultiPart;
+
+public class FileMultipartJersey extends FormDataMultiPart {
+	
+	public static FileMultipartJersey from(String filename, InputStream istream) throws ParseException {
+		FileMultipartJersey multipart = new FileMultipartJersey();
+		multipart.bodyPart(toBodyPart(filename, istream));
+		return multipart;
+	}
+	
+	private FileMultipartJersey() {
+	}
+	
+	public FormDataBodyPart getFileAttachment() {
+		return this.getField("file");
+	}
+
+	private static BodyPart toBodyPart(String filename, InputStream istream) throws ParseException {
+		if (filename == null) {
+			return new FormDataBodyPart()
+					.contentDisposition(new FormDataContentDisposition("form-data; name=\"file\""))
+					.entity(istream);
+		} else {
+			return new FormDataBodyPart()
+					.contentDisposition(new FormDataContentDisposition("form-data; name=\"file\"; filename=\"" + filename + "\""))
+					.entity(istream);
+		}
+	}
+
+}