diff --git a/bnd.bnd b/bnd.bnd
index cff728c..0415daf 100644
--- a/bnd.bnd
+++ b/bnd.bnd
@@ -1,16 +1,21 @@
 Bundle-Name: Liferay Dummy Factory Portlet
 Bundle-SymbolicName: liferay.dummy.factory
-Bundle-Version: 7.4.0
+Bundle-Version: 7.4.1
 Web-ContextPath: /liferay-dummy-factory
 -dsannotations-options: inherit
 -sources: true
 
+-consumer-policy: ${replacestring;${range;[==,==]};.*,(.*)];$1}
+-provider-policy: ${replacestring;${range;[==,==]};.*,(.*)];$1}
+
 Import-Package:\
 	!org.apache.commons.fileupload.*,\
 	!com.google.*,\
 	!com.sun.*,\
 	!org.apache.commons.beanutils.*,\
 	!org.apache.commons.codec.*,\
+    !org.apache.tika.*,\
+    !org.apache.tools.*,\
 	!org.checkerframework.*,\
 	!com.linkedin.*,\
 	!de.malkusch.*,\
diff --git a/build.gradle b/build.gradle
index 27a88d2..1ca326c 100644
--- a/build.gradle
+++ b/build.gradle
@@ -4,144 +4,101 @@ apply plugin: 'idea'
 apply plugin: 'eclipse'
 apply plugin: 'jacoco'
 
-sourceCompatibility = 1.8
-targetCompatibility = 1.8
+sourceCompatibility = 11
+targetCompatibility = 11
 
 //Need for Windows
 def defaultEncoding = 'UTF-8'
 
 repositories {
-	mavenCentral()
-	jcenter()
-	maven {
-		url "http://repository.jboss.org/nexus/content/groups/public-jboss" // JBoss
-		url "http://repository.apache.org/content/groups/public"            // Apache
-		url "http://repository.springsource.com/maven/bundles/release"      // SpringSource
-		url "http://repository.codehaus.org"                                // Codehaus
-		url "http://download.java.net/maven/2"                              // Java.NET
-		url "http://download.java.net/maven/glassfish"                     	// Glassfish
-		url "http://m2repo.spockframework.org/snapshots"                    // Spock Snapshot
-		url "http://repository.sonatype.org/content/groups/public"
-		url "https://mvnrepository.com/artifact/com.sun/tools"
-		url 'https://jitpack.io'
-	}
+    mavenCentral()
+    jcenter()
+    maven {
+        url "http://repository.jboss.org/nexus/content/groups/public-jboss"
+    }
+    maven { url "http://repository.apache.org/content/groups/public" }
+    maven { url "http://repository.springsource.com/maven/bundles/release" }
+    maven { url "http://repository.codehaus.org" }
+    maven { url "http://download.java.net/maven/2" }
+    maven { url "http://download.java.net/maven/glassfish" }
+    maven { url "http://m2repo.spockframework.org/snapshots" }
+    maven { url "http://repository.sonatype.org/content/groups/public" }
+    maven { url "https://mvnrepository.com/artifact/com.sun/tools" }
+    maven { url 'https://jitpack.io' }
 }
 
 buildscript {
-	repositories {
-		mavenCentral()
-	}
+    repositories {
+        mavenCentral()
+    }
 
-	dependencies {
-		classpath 'org.kt3k.gradle.plugin:coveralls-gradle-plugin:latest.release'
-	}
+    dependencies {
+        classpath 'org.kt3k.gradle.plugin:coveralls-gradle-plugin:latest.release'
+    }
 }
 
 apply plugin: 'com.github.kt3k.coveralls'
 
 dependencies {
-	compile 'biz.aQute.bnd:biz.aQute.bndlib:3.5.0'
-	compile 'com.google.errorprone:error_prone_annotations:2.3.1'
-	compile 'commons-digester:commons-digester:2.1'
-	compile "com.google.guava:guava:27.1-jre"
-	compile "commons-io:commons-io:2.5"
-	compile "commons-validator:commons-validator:1.6"
-	compile "org.apache.commons:commons-lang3:3.9"
-	compile "com.github.mifmif:generex:1.0.2"
-	compile "dk.brics.automaton:automaton:1.11-8"
-	compile "com.github.javafaker:javafaker:1.0.2"
-	compile("com.goikosoft.crawler4j:crawler4j:4.5.10") {
-		exclude module: 'tika-bundle'
-		exclude module: 'tika-core'
-		exclude module: 'tika-parsers'
-	}
-
-	compile group: 'com.sleepycat', name: 'je', version: '18.3.12'
-	compile "io.reactivex.rxjava2:rxjava:2.2.+"
-	compile group: 'org.apache.httpcomponents', name: 'httpcore-osgi', version: '4.4.+'
-	compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.+'
-	compile group: 'org.reactivestreams', name: 'reactive-streams', version: '1.0.+'
-	compile group: "commons-fileupload", name: "commons-fileupload", version: "1.3.3"
-	compile group: "org.apache.felix", name: "org.apache.felix.gogo.runtime", version: "1.1.+"
-
-	compile "com.liferay:com.liferay.application.list.api"
-	compile "com.liferay:com.liferay.frontend.taglib"
-	compile "com.liferay:com.liferay.frontend.taglib.clay"
-	compile "com.liferay:com.liferay.frontend.taglib.util"
-	compile "com.liferay:com.liferay.item.selector.api"
-	compile "com.liferay:com.liferay.item.selector.criteria.api"
-	compile "com.liferay:com.liferay.item.selector.taglib"
-	compile "com.liferay:com.liferay.trash.taglib"
-	compile "com.liferay:com.liferay.portal.spring.extender:2.1.+"
-	compile "com.liferay:com.liferay.portal.instances.api"
-	
-	compile "com.liferay:com.liferay.frontend.js.loader.modules.extender.api"
-
-	compile "com.liferay.portal:com.liferay.portal.kernel"
-	compile "com.liferay.portal:com.liferay.portal.impl"
-	compile "com.liferay.portal:com.liferay.util.taglib"
-	compile "com.liferay:com.liferay.message.boards.api"
-	compile "com.liferay:com.liferay.message.boards.service"
-	compile "com.liferay:com.liferay.blogs.api"
-
-	compile "com.liferay:com.liferay.portal.settings.api"
-
-	compile "com.liferay:com.liferay.journal.api"
-	compile "com.liferay:com.liferay.journal.service"
-	compile "com.liferay:com.liferay.wiki.api"
-	compile "com.liferay:com.liferay.wiki.service"
-	compile "com.liferay:com.liferay.wiki.web"
-
-	compile "com.liferay:com.liferay.petra.string"
-	compile "com.liferay:com.liferay.petra.function"
-
-	compile "com.liferay:com.liferay.dynamic.data.lists.service"
-	compile "com.liferay:com.liferay.dynamic.data.lists.api"
-	compile "com.liferay:com.liferay.dynamic.data.mapping.api"
-	compile "com.liferay:com.liferay.dynamic.data.mapping.service"
-	compile "com.liferay:com.liferay.dynamic.data.mapping.taglib"
-	compile "com.liferay:com.liferay.dynamic.data.mapping.io:4.0.+"
-	compile "com.liferay:com.liferay.dynamic.data.mapping.validator"
-	compile "com.liferay:com.liferay.portal.configuration.metatype:2.0.+"
-	compile "com.liferay:com.liferay.portal.background.task.api"
-	compile "com.liferay:com.liferay.document.library.api"
-
-	compile group: "javax.portlet", name: "portlet-api", version: "3.0.0"
-	compile group: "javax.servlet", name: "javax.servlet-api", version: "3.0.1"
-	compile group: "jstl", name: "jstl", version: "1.2"
-	compile group: "org.osgi", name: "org.osgi.service.component.annotations", version: "1.3.0"
-	compile group: "org.osgi", name: "osgi.core", version: "6.0.0"
-
-	testCompile 'org.codehaus.groovy:groovy-all:2.5.+'
-	testCompile group: 'cglib', name: 'cglib-nodep', version:'latest.integration'
-	testCompile group: 'junit', name: 'junit', version:'4.12'
-	testCompile group: 'org.apache.tika', name: 'tika-core', version: '1.22'
-	testCompile group: 'org.apache.tika', name: 'tika-parsers', version: '1.22'
-
-	testCompile group: 'org.hamcrest', name: 'hamcrest-core', version:'latest.integration'
-	testCompile group: 'org.objenesis', name: 'objenesis', version:'latest.integration'
-	testCompile group: 'org.mockito', name: 'mockito-core', version: '2.23.0'
-	testCompile group: 'org.powermock', name: 'powermock-core', version: '1.7.4'
-	testCompile group: 'org.powermock', name: 'powermock-classloading-xstream', version:'1.7.4'
-	testCompile group: 'org.powermock', name: 'powermock-module-junit4', version:'1.7.4'
-	testCompile group: 'org.powermock', name: 'powermock-module-junit4-common', version:'1.7.4'
-	testCompile group: 'org.powermock', name: 'powermock-module-junit4-rule', version:'1.7.4'
-	testCompile group: 'org.powermock', name: 'powermock-api-mockito', version: '1.7.4'
-	testCompile group: 'org.powermock', name: 'powermock-api-mockito-common', version: '1.7.4'
-	testCompile('org.spockframework:spock-core:1.2-groovy-2.5') {
-		exclude module: 'groovy-all'
-	}
+    compile 'com.google.errorprone:error_prone_annotations:2.3.1'
+    compile 'commons-digester:commons-digester:2.1'
+    compile "com.google.guava:guava:27.1-jre"
+    compile "commons-io:commons-io:2.5"
+    compile "commons-validator:commons-validator:1.6"
+    compile "org.apache.commons:commons-lang3:3.9"
+    compile "com.github.mifmif:generex:1.0.2"
+    compile "dk.brics.automaton:automaton:1.11-8"
+    compile "com.github.javafaker:javafaker:1.0.2"
+    compile("com.goikosoft.crawler4j:crawler4j:4.5.10") {
+        exclude module: 'tika-bundle'
+        exclude module: 'tika-core'
+        exclude module: 'tika-parsers'
+    }
+
+    compile group: 'com.sleepycat', name: 'je', version: '18.3.12'
+    compile "io.reactivex.rxjava2:rxjava:2.2.+"
+    compile group: 'org.apache.httpcomponents', name: 'httpcore-osgi', version: '4.4.+'
+    compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.+'
+    compile group: 'org.reactivestreams', name: 'reactive-streams', version: '1.0.+'
+    compile group: "commons-fileupload", name: "commons-fileupload", version: "1.3.3"
+    compile group: "org.apache.felix", name: "org.apache.felix.gogo.runtime", version: "1.1.+"
+
+    compileOnly group: "com.liferay.portal", name: "release.dxp.api"
+
+    testCompile 'org.codehaus.groovy:groovy-all:2.5.+'
+    testCompile group: 'cglib', name: 'cglib-nodep', version: 'latest.integration'
+    testCompile group: 'junit', name: 'junit', version: '4.12'
+    testCompile group: 'org.apache.tika', name: 'tika-core', version: '1.22'
+    testCompile group: 'org.apache.tika', name: 'tika-parsers', version: '1.22'
+
+    testCompile group: 'org.hamcrest', name: 'hamcrest-core', version: 'latest.integration'
+    testCompile group: 'org.objenesis', name: 'objenesis', version: 'latest.integration'
+    testCompile group: 'org.mockito', name: 'mockito-core', version: '2.23.0'
+    testCompile group: 'org.powermock', name: 'powermock-core', version: '1.7.4'
+    testCompile group: 'org.powermock', name: 'powermock-classloading-xstream', version: '1.7.4'
+    testCompile group: 'org.powermock', name: 'powermock-module-junit4', version: '1.7.4'
+    testCompile group: 'org.powermock', name: 'powermock-module-junit4-common', version: '1.7.4'
+    testCompile group: 'org.powermock', name: 'powermock-module-junit4-rule', version: '1.7.4'
+    testCompile group: 'org.powermock', name: 'powermock-api-mockito', version: '1.7.4'
+    testCompile group: 'org.powermock', name: 'powermock-api-mockito-common', version: '1.7.4'
+    testCompile('org.spockframework:spock-core:1.2-groovy-2.5') {
+        exclude module: 'groovy-all'
+    }
 }
 
 test {
-	testLogging.showStandardStreams = true
+    testLogging.showStandardStreams = true
 }
 
 jacocoTestReport {
-	reports {
-		xml.enabled true
-		html.enabled = true
-	}
+    reports {
+        xml.enabled true
+        html.enabled = true
+    }
+}
+
+task prepareKotlinBuildScriptModel {
+
 }
 
 check.dependsOn jacocoTestReport
\ No newline at end of file
diff --git a/latest/liferay.dummy.factory-7.4.0.jar b/latest/liferay.dummy.factory-7.4.1.jar
similarity index 90%
rename from latest/liferay.dummy.factory-7.4.0.jar
rename to latest/liferay.dummy.factory-7.4.1.jar
index 1c12a73..12048ee 100644
Binary files a/latest/liferay.dummy.factory-7.4.0.jar and b/latest/liferay.dummy.factory-7.4.1.jar differ
diff --git a/package.json b/package.json
index c424f46..32ab87c 100644
--- a/package.json
+++ b/package.json
@@ -6,8 +6,9 @@
     "lodash": "^4.17.21"
   },
   "devDependencies": {
-    "@liferay/npm-scripts": "^45.0.0",
-    "liferay-npm-bundler": "^2.24.3"
+    "@liferay/npm-scripts": "^47.6.1",
+    "liferay-npm-bundler": "^2.28.3",
+    "liferay-npm-build-support": "^2.28.3"
   },
   "scripts": {
     "build": "liferay-npm-bundler"
diff --git a/src/main/java/com/liferay/support/tools/document/library/DLDefaultDummyGenerator.java b/src/main/java/com/liferay/support/tools/document/library/DLDefaultDummyGenerator.java
index 60dbbee..40287d7 100644
--- a/src/main/java/com/liferay/support/tools/document/library/DLDefaultDummyGenerator.java
+++ b/src/main/java/com/liferay/support/tools/document/library/DLDefaultDummyGenerator.java
@@ -19,171 +19,176 @@
 import com.liferay.portal.kernel.util.WebKeys;
 import com.liferay.support.tools.common.DummyGenerator;
 import com.liferay.support.tools.utils.ProgressManager;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
 
+import javax.portlet.ActionRequest;
+import java.io.File;
+import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
 
-import javax.portlet.ActionRequest;
-
-import org.osgi.service.component.annotations.Component;
-import org.osgi.service.component.annotations.Reference;
-
 /**
  * Document Library Generator
- * 
- * @author Yasuyuki Takeo
  *
+ * @author Yasuyuki Takeo
  */
 @Component(immediate = true, service = DLDefaultDummyGenerator.class)
 public class DLDefaultDummyGenerator extends DummyGenerator<DLContext> {
 
-	@Override
-	protected DLContext getContext(ActionRequest request) {
-
-		return new DLContext(request);
-	}
-
-	@Override
-	protected void exec(ActionRequest request, DLContext paramContext) throws PortalException {
-
-		//Tracking progress start
-		ProgressManager progressManager = new ProgressManager();
-		progressManager.start(request);
-		
-		System.out.println("Starting to create " + paramContext.getNumberOfDocuments() + " documents");
-
-		for (long i = 1; i <= paramContext.getNumberOfDocuments(); i++) {
-			//Update progress
-			progressManager.trackProgress(i, paramContext.getNumberOfDocuments());
-			
-			StringBundler title = new StringBundler(2);
-			title.append(paramContext.getBaseDocumentTitle());
-
-			//Add number more then one docunent
-			if(1 < paramContext.getNumberOfDocuments()) {
-				title.append(i);
-			}
-
-			StringBundler sourceFileName = new StringBundler(2);
-			sourceFileName.append(title.toString());
-			sourceFileName.append(".txt");
-
-			byte[] dummyFile = new byte[0];
-			
-			try {
-				
-				if(paramContext.getTempFileEntries().size() == 0) {
-					
-					_dLAppLocalService.addFileEntry(
-						paramContext.getServiceContext().getUserId(), //userId, 
-						paramContext.getGroupId(), // repositoryId,
-						paramContext.getFolderId(), // folderId,
-						sourceFileName.toString(), //sourceFileName, 
-						ContentTypes.APPLICATION_OCTET_STREAM, //mimeType, 
-						title.toString(), //title, 
-						paramContext.getBaseDocumentDescription(), //description,
-						StringPool.BLANK, //changeLog, 
-						dummyFile, //file,
-						paramContext.getServiceContext());
-					
-				} else {
-					FileEntry tf = paramContext.getRandomFileEntry();
-					String fileName = title.toString() + StringPool.PERIOD + tf.getExtension();
-					
-					_dLAppLocalService.addFileEntry(
-						paramContext.getServiceContext().getUserId(), //userId, 
-						paramContext.getGroupId(), // repositoryId,
-						paramContext.getFolderId(), // folderId,
-						fileName, //sourceFileName, 
-						tf.getMimeType(), //mimeType, 
-						fileName, //title, 
-						paramContext.getBaseDocumentDescription(), //description,
-						StringPool.BLANK, //changeLog, 
-						tf.getContentStream(), //file,
-						tf.getSize(),
-						paramContext.getServiceContext());
-				}
-				
-			} catch (Exception e) {
-				
-				if(e instanceof DuplicateFileEntryException) {
-					_log.error(e.getMessage() + " Skip creation.");
-					continue;
-				} else {
-					//Finish progress
-					progressManager.finish();	
-					throw e;
-				}
-			}
-		}
-
-		// Delete all temp files
-		deleteAllTempFileEntries(paramContext.getTempFileEntries());
-		deleteAllFilesInFolder(request, paramContext);
-		
-		//Finish progress
-		progressManager.finish();	
-
-		System.out.println("Finished creating " + paramContext.getNumberOfDocuments() + " documents");
-
-	}
-
-	/**
-	 * Delete All temp file entries
-	 * 
-	 * @param tempFileEntries
-	 * @throws PortalException
-	 */
-	protected void deleteAllTempFileEntries(List<FileEntry> tempFileEntries) throws PortalException {
-
-		for(FileEntry fileEntry : tempFileEntries) {
-			TempFileEntryUtil.deleteTempFileEntry(fileEntry.getFileEntryId());
-		}
-	}
-	
-	/**
-	 * Delete all files in a temp folder.
-	 * 
-	 * @param request
-	 * @param paramContext
-	 * @throws PortalException
-	 */
-	protected void deleteAllFilesInFolder(ActionRequest request, DLContext paramContext) throws PortalException {
-		ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
-		
-		List<DLFolder> dlAllFolders = 
-				_dlFolderLocalService.getCompanyFolders(
-						themeDisplay.getCompanyId(), 
-						QueryUtil.ALL_POS, 
-						QueryUtil.ALL_POS);
-		
-		List<DLFolder> dlFolders = dlAllFolders.stream()
-		.filter(
-			df -> df.getName().equals(EditFileEntryMVCActionCommand.TEMP_FOLDER_NAME)
-		)
-		.collect(Collectors.toList());
-		
-		for(DLFolder df : dlFolders) {
-			
-			List<DLFileEntry> dlFileEntries =  
-				_dlFileEntryLocalService.getFileEntries(
-						df.getGroupId(), df.getFolderId());
-			
-			for(DLFileEntry fileEntry : dlFileEntries) {
-				TempFileEntryUtil.deleteTempFileEntry(fileEntry.getFileEntryId());
-			}
-		}
-	}
-	
-	@Reference
-	private DLAppLocalService _dLAppLocalService;
-	
-	@Reference
-	private DLFolderLocalService _dlFolderLocalService;
-	
-	@Reference
-	private DLFileEntryLocalService _dlFileEntryLocalService;
-	
-	private static final Log _log = LogFactoryUtil.getLog(DLDefaultDummyGenerator.class);
-	
+    @Override
+    protected DLContext getContext(ActionRequest request) {
+
+        return new DLContext(request);
+    }
+
+    @Override
+    protected void exec(ActionRequest request, DLContext paramContext) throws PortalException {
+
+        //Tracking progress start
+        ProgressManager progressManager = new ProgressManager();
+        progressManager.start(request);
+
+        System.out.println("Starting to create " + paramContext.getNumberOfDocuments() + " documents");
+
+        for (long i = 1; i <= paramContext.getNumberOfDocuments(); i++) {
+            //Update progress
+            progressManager.trackProgress(i, paramContext.getNumberOfDocuments());
+
+            StringBundler title = new StringBundler(2);
+            title.append(paramContext.getBaseDocumentTitle());
+
+            //Add number more then one docunent
+            if (1 < paramContext.getNumberOfDocuments()) {
+                title.append(i);
+            }
+
+            StringBundler sourceFileName = new StringBundler(2);
+            sourceFileName.append(title.toString());
+            sourceFileName.append(".txt");
+
+            try {
+
+                if (paramContext.getTempFileEntries().size() == 0) {
+
+                    _dLAppLocalService.addFileEntry(
+                        null, // externalReferenceCode
+                        paramContext.getServiceContext().getUserId(), //userId,
+                        paramContext.getGroupId(), // repositoryId,
+                        paramContext.getFolderId(), // folderId,
+                        sourceFileName.toString(), //sourceFileName,
+                        ContentTypes.APPLICATION_OCTET_STREAM, //mimeType,
+                        title.toString(), //title,
+                        StringPool.BLANK, // urlTitle
+                        paramContext.getBaseDocumentDescription(), //description,
+                        StringPool.BLANK, //changeLog,
+                        new File(System.getProperty("java.io.tmpdir"), "dummy"), //file,
+                        (Date)null, // expirationDate
+                        (Date)null, // reviewDate
+                        paramContext.getServiceContext());
+
+                } else {
+                    FileEntry tf = paramContext.getRandomFileEntry();
+                    String fileName = title.toString() + StringPool.PERIOD + tf.getExtension();
+
+                    _dLAppLocalService.addFileEntry(
+                        null,
+                        paramContext.getServiceContext().getUserId(), //userId,
+                        paramContext.getGroupId(), // repositoryId,
+                        paramContext.getFolderId(), // folderId,
+                        fileName, //sourceFileName,
+                        tf.getMimeType(), //mimeType,
+                        fileName, //title,
+                        StringPool.BLANK, // urlTitle
+                        paramContext.getBaseDocumentDescription(), //description,
+                        StringPool.BLANK, //changeLog,
+                        tf.getContentStream(), //file,
+                        tf.getSize(),
+                        (Date)null, // expirationDate
+                        (Date)null, // reviewDate
+                        paramContext.getServiceContext());
+                }
+
+            } catch (Exception e) {
+
+                if (e instanceof DuplicateFileEntryException) {
+                    _log.error(e.getMessage() + " Skip creation.");
+                    continue;
+                } else {
+                    //Finish progress
+                    progressManager.finish();
+                    throw e;
+                }
+            }
+        }
+
+        // Delete all temp files
+        deleteAllTempFileEntries(paramContext.getTempFileEntries());
+        deleteAllFilesInFolder(request, paramContext);
+
+        //Finish progress
+        progressManager.finish();
+
+        System.out.println("Finished creating " + paramContext.getNumberOfDocuments() + " documents");
+
+    }
+
+    /**
+     * Delete All temp file entries
+     *
+     * @param tempFileEntries
+     * @throws PortalException
+     */
+    protected void deleteAllTempFileEntries(List<FileEntry> tempFileEntries) throws PortalException {
+
+        for (FileEntry fileEntry : tempFileEntries) {
+            TempFileEntryUtil.deleteTempFileEntry(fileEntry.getFileEntryId());
+        }
+    }
+
+    /**
+     * Delete all files in a temp folder.
+     *
+     * @param request
+     * @param paramContext
+     * @throws PortalException
+     */
+    protected void deleteAllFilesInFolder(ActionRequest request, DLContext paramContext) throws PortalException {
+        ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
+
+        List<DLFolder> dlAllFolders =
+            _dlFolderLocalService.getCompanyFolders(
+                themeDisplay.getCompanyId(),
+                QueryUtil.ALL_POS,
+                QueryUtil.ALL_POS);
+
+        List<DLFolder> dlFolders = dlAllFolders.stream()
+            .filter(
+                df -> df.getName().equals(EditFileEntryMVCActionCommand.TEMP_FOLDER_NAME)
+            )
+            .collect(Collectors.toList());
+
+        for (DLFolder df : dlFolders) {
+
+            List<DLFileEntry> dlFileEntries =
+                _dlFileEntryLocalService.getFileEntries(
+                    df.getGroupId(), df.getFolderId());
+
+            for (DLFileEntry fileEntry : dlFileEntries) {
+                TempFileEntryUtil.deleteTempFileEntry(fileEntry.getFileEntryId());
+            }
+        }
+    }
+
+    @Reference
+    private DLAppLocalService _dLAppLocalService;
+
+    @Reference
+    private DLFolderLocalService _dlFolderLocalService;
+
+    @Reference
+    private DLFileEntryLocalService _dlFileEntryLocalService;
+
+    private static final Log _log = LogFactoryUtil.getLog(DLDefaultDummyGenerator.class);
+
 }
diff --git a/src/main/java/com/liferay/support/tools/document/library/EditFileEntryMVCActionCommand.java b/src/main/java/com/liferay/support/tools/document/library/EditFileEntryMVCActionCommand.java
index 1bf572c..a92767a 100644
--- a/src/main/java/com/liferay/support/tools/document/library/EditFileEntryMVCActionCommand.java
+++ b/src/main/java/com/liferay/support/tools/document/library/EditFileEntryMVCActionCommand.java
@@ -4,17 +4,7 @@
 import com.liferay.asset.kernel.exception.AssetTagException;
 import com.liferay.document.library.configuration.DLConfiguration;
 import com.liferay.document.library.kernel.antivirus.AntivirusScannerException;
-import com.liferay.document.library.kernel.exception.DuplicateFileEntryException;
-import com.liferay.document.library.kernel.exception.DuplicateFolderNameException;
-import com.liferay.document.library.kernel.exception.FileEntryLockException;
-import com.liferay.document.library.kernel.exception.FileExtensionException;
-import com.liferay.document.library.kernel.exception.FileMimeTypeException;
-import com.liferay.document.library.kernel.exception.FileNameException;
-import com.liferay.document.library.kernel.exception.FileSizeException;
-import com.liferay.document.library.kernel.exception.InvalidFileVersionException;
-import com.liferay.document.library.kernel.exception.NoSuchFileEntryException;
-import com.liferay.document.library.kernel.exception.NoSuchFolderException;
-import com.liferay.document.library.kernel.exception.SourceFileNameException;
+import com.liferay.document.library.kernel.exception.*;
 import com.liferay.document.library.kernel.model.DLFileEntry;
 import com.liferay.document.library.kernel.model.DLVersionNumberIncrease;
 import com.liferay.document.library.kernel.service.DLAppService;
@@ -48,535 +38,534 @@
 import com.liferay.portal.kernel.settings.TypedSettings;
 import com.liferay.portal.kernel.theme.PortletDisplay;
 import com.liferay.portal.kernel.theme.ThemeDisplay;
-import com.liferay.portal.kernel.upload.LiferayFileItemException;
-import com.liferay.portal.kernel.upload.UploadException;
-import com.liferay.portal.kernel.upload.UploadPortletRequest;
-import com.liferay.portal.kernel.upload.UploadRequestSizeException;
-import com.liferay.portal.kernel.upload.UploadServletRequestConfigurationHelper;
-import com.liferay.portal.kernel.util.ArrayUtil;
-import com.liferay.portal.kernel.util.Constants;
-import com.liferay.portal.kernel.util.ContentTypes;
-import com.liferay.portal.kernel.util.MimeTypesUtil;
-import com.liferay.portal.kernel.util.ParamUtil;
-import com.liferay.portal.kernel.util.PortalUtil;
-import com.liferay.portal.kernel.util.StreamUtil;
-import com.liferay.portal.kernel.util.StringUtil;
-import com.liferay.portal.kernel.util.TempFileEntryUtil;
-import com.liferay.portal.kernel.util.TextFormatter;
-import com.liferay.portal.kernel.util.Validator;
-import com.liferay.portal.kernel.util.WebKeys;
+import com.liferay.portal.kernel.upload.*;
+import com.liferay.portal.kernel.util.*;
 import com.liferay.portal.kernel.workflow.WorkflowConstants;
 import com.liferay.support.tools.constants.LDFPortletKeys;
+import org.apache.commons.fileupload.FileUploadBase;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
 
+import javax.portlet.*;
+import javax.servlet.http.HttpServletResponse;
 import java.io.InputStream;
+import java.util.Date;
 import java.util.HashSet;
 import java.util.Set;
 
-import javax.portlet.ActionRequest;
-import javax.portlet.ActionResponse;
-import javax.portlet.MutableRenderParameters;
-import javax.portlet.PortletConfig;
-import javax.portlet.PortletRequest;
-import javax.portlet.PortletResponse;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.fileupload.FileUploadBase;
-import org.osgi.service.component.annotations.Component;
-import org.osgi.service.component.annotations.Reference;
-
 @Component(
-	property = {
-		"javax.portlet.name=" + LDFPortletKeys.LIFERAY_DUMMY_FACTORY,
-		"mvc.command.name=/df/document/edit_file_entry",
-		"mvc.command.name=/df/document/upload_multiple_file_entries"
-	},
-	service = MVCActionCommand.class
+    property = {
+        "javax.portlet.name=" + LDFPortletKeys.LIFERAY_DUMMY_FACTORY,
+        "mvc.command.name=/df/document/edit_file_entry",
+        "mvc.command.name=/df/document/upload_multiple_file_entries"
+    },
+    service = MVCActionCommand.class
 )
 public class EditFileEntryMVCActionCommand extends BaseMVCActionCommand {
 
-	@Override
-	protected void doProcessAction(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception {
-
-		String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
-		
-		FileEntry fileEntry = null;
-
-		PortletConfig portletConfig = getPortletConfig(actionRequest);
-
-		try {
-			UploadException uploadException = (UploadException) actionRequest.getAttribute(WebKeys.UPLOAD_EXCEPTION);
-
-			if (uploadException != null) {
-				Throwable cause = uploadException.getCause();
-
-				if (cmd.equals(Constants.ADD_TEMP)) {
-					if (cause instanceof FileUploadBase.IOFileUploadException) {
-						if (_log.isInfoEnabled()) {
-							_log.info("Temporary upload was cancelled");
-						}
-					}
-				} else {
-					if (uploadException.isExceededFileSizeLimit()) {
-						throw new FileSizeException(cause);
-					}
-
-					if (uploadException.isExceededLiferayFileItemSizeLimit()) {
-						throw new LiferayFileItemException(cause);
-					}
-
-					if (uploadException.isExceededUploadRequestSizeLimit()) {
-						throw new UploadRequestSizeException(cause);
-					}
-
-					throw new PortalException(cause);
-				}
-			} else if (cmd.equals(Constants.ADD)) {
-
-				fileEntry = updateFileEntry(portletConfig, actionRequest, actionResponse);
-			} else if (cmd.equals(Constants.ADD_TEMP)) {
-				addTempFileEntry(actionRequest, actionResponse);
-			} else if (cmd.equals(Constants.DELETE)) {
-				deleteFileEntry(actionRequest, false);
-			} else if (cmd.equals(Constants.DELETE_TEMP)) {
-				deleteTempFileEntry(actionRequest, actionResponse);
-			} 
-
-			if (cmd.equals(Constants.ADD_TEMP) 		|| 
-				cmd.equals(Constants.DELETE_TEMP)) {
-				MutableRenderParameters mutableRenderParameters = actionResponse.getRenderParameters();
-				mutableRenderParameters.setValue("mvcPath", "/null.jsp");
-			} else {
-				String redirect = ParamUtil.getString(actionRequest, "redirect");
-				int workflowAction = ParamUtil.getInteger(actionRequest, "workflowAction",
-						WorkflowConstants.ACTION_SAVE_DRAFT);
-
-				if ((fileEntry != null) && (workflowAction == WorkflowConstants.ACTION_SAVE_DRAFT)) {
-
-					redirect = getSaveAndContinueRedirect(portletConfig, actionRequest, fileEntry, redirect);
-
-					sendRedirect(actionRequest, actionResponse, redirect);
-				}
-			}
-		} catch (Exception e) {
-			handleUploadException(portletConfig, actionRequest, actionResponse, cmd, e);
-		}
-	}
-
-	/**
-	 * Managing redirect after saving FileEntry
-	 * 
-	 * @param portletConfig
-	 * @param actionRequest
-	 * @param fileEntry
-	 * @param redirect
-	 * @return
-	 * @throws Exception
-	 */
-	protected String getSaveAndContinueRedirect(
-			PortletConfig portletConfig, ActionRequest actionRequest,
-			FileEntry fileEntry, String redirect)
-		throws Exception {
-
-		ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
-				WebKeys.THEME_DISPLAY);
-		
-		LiferayPortletURL portletURL = PortletURLFactoryUtil.create(
-			actionRequest, portletConfig.getPortletName(), themeDisplay.getLayout(),
-			PortletRequest.RENDER_PHASE);
-
-		MutableRenderParameters mutableRenderParameters = portletURL.getRenderParameters();
-	
-		mutableRenderParameters.setValues(
-			"mvcRenderCommandName", "/df/document/edit_file_entry");
-		mutableRenderParameters.setValues(Constants.CMD, Constants.UPDATE);
-		mutableRenderParameters.setValues("redirect", redirect);
-		mutableRenderParameters.setValues(
-			"groupId", String.valueOf(fileEntry.getGroupId()));
-		mutableRenderParameters.setValues(
-			"fileEntryId", String.valueOf(fileEntry.getFileEntryId()));
-		mutableRenderParameters.setValues(
-			"version", String.valueOf(fileEntry.getVersion()));
-		portletURL.setWindowState(actionRequest.getWindowState());
-
-		return portletURL.toString();
-	}	
-	
-
-	
-	/**
-	 * Delete Temp file entry
-	 * 
-	 * @param actionRequest
-	 * @param actionResponse
-	 * @throws Exception
-	 */
-	protected void deleteTempFileEntry(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception {
-
-		ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
-
-		long folderId = ParamUtil.getLong(actionRequest, "folderId");
-		String fileName = ParamUtil.getString(actionRequest, "fileName");
-
-		JSONObject jsonObject = JSONFactoryUtil.createJSONObject();
-
-		try {
-			_dlAppService.deleteTempFileEntry(themeDisplay.getScopeGroupId(), folderId, TEMP_FOLDER_NAME, fileName);
-
-			jsonObject.put("deleted", Boolean.TRUE);
-		} catch (Exception e) {
-			String errorMessage = themeDisplay.translate("an-unexpected-error-occurred-while-deleting-the-file");
-
-			jsonObject.put("deleted", Boolean.FALSE);
-			jsonObject.put("errorMessage", errorMessage);
-		}
-
-		JSONPortletResponseUtil.writeJSON(actionRequest, actionResponse, jsonObject);
-	}
-
-	/**
-	 * Delete File entry
-	 * 
-	 * @param actionRequest
-	 * @param moveToTrash
-	 * @throws Exception
-	 */
-	protected void deleteFileEntry(ActionRequest actionRequest, boolean moveToTrash) throws Exception {
-
-		long fileEntryId = ParamUtil.getLong(actionRequest, "fileEntryId");
-
-		if (fileEntryId == 0) {
-			return;
-		}
-
-		String version = ParamUtil.getString(actionRequest, "version");
-
-		if (Validator.isNotNull(version)) {
-			_dlAppService.deleteFileVersion(fileEntryId, version);
-
-			return;
-		}
-
-		if (!moveToTrash) {
-			_dlAppService.deleteFileEntry(fileEntryId);
-
-			return;
-		}
-
-		FileEntry fileEntry = _dlAppService.getFileEntry(fileEntryId);
-
-		if (fileEntry.isRepositoryCapabilityProvided(TrashCapability.class)) {
-			fileEntry = _dlTrashService.moveFileEntryToTrash(fileEntryId);
-		}
-
-		hideDefaultSuccessMessage(actionRequest);
-	}
-
-	/**
-	 * Add temp file entry
-	 * 
-	 * While creating a journal document, files are stored in the temporaly
-	 * repository until the journal article is actually created.
-	 * 
-	 * @param actionRequest
-	 * @param actionResponse
-	 * @throws Exception
-	 */
-	protected void addTempFileEntry(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception {
+    @Override
+    protected void doProcessAction(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception {
+
+        String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
+
+        FileEntry fileEntry = null;
+
+        PortletConfig portletConfig = getPortletConfig(actionRequest);
+
+        try {
+            UploadException uploadException = (UploadException) actionRequest.getAttribute(WebKeys.UPLOAD_EXCEPTION);
+
+            if (uploadException != null) {
+                Throwable cause = uploadException.getCause();
+
+                if (cmd.equals(Constants.ADD_TEMP)) {
+                    if (cause instanceof FileUploadBase.IOFileUploadException) {
+                        if (_log.isInfoEnabled()) {
+                            _log.info("Temporary upload was cancelled");
+                        }
+                    }
+                } else {
+                    if (uploadException.isExceededFileSizeLimit()) {
+                        throw new FileSizeException(cause);
+                    }
+
+                    if (uploadException.isExceededLiferayFileItemSizeLimit()) {
+                        throw new LiferayFileItemException(cause);
+                    }
+
+                    if (uploadException.isExceededUploadRequestSizeLimit()) {
+                        throw new UploadRequestSizeException(cause);
+                    }
+
+                    throw new PortalException(cause);
+                }
+            } else if (cmd.equals(Constants.ADD)) {
+
+                fileEntry = updateFileEntry(portletConfig, actionRequest, actionResponse);
+            } else if (cmd.equals(Constants.ADD_TEMP)) {
+                addTempFileEntry(actionRequest, actionResponse);
+            } else if (cmd.equals(Constants.DELETE)) {
+                deleteFileEntry(actionRequest, false);
+            } else if (cmd.equals(Constants.DELETE_TEMP)) {
+                deleteTempFileEntry(actionRequest, actionResponse);
+            }
+
+            if (cmd.equals(Constants.ADD_TEMP) ||
+                cmd.equals(Constants.DELETE_TEMP)) {
+                MutableRenderParameters mutableRenderParameters = actionResponse.getRenderParameters();
+                mutableRenderParameters.setValue("mvcPath", "/null.jsp");
+            } else {
+                String redirect = ParamUtil.getString(actionRequest, "redirect");
+                int workflowAction = ParamUtil.getInteger(actionRequest, "workflowAction",
+                    WorkflowConstants.ACTION_SAVE_DRAFT);
+
+                if ((fileEntry != null) && (workflowAction == WorkflowConstants.ACTION_SAVE_DRAFT)) {
+
+                    redirect = getSaveAndContinueRedirect(portletConfig, actionRequest, fileEntry, redirect);
+
+                    sendRedirect(actionRequest, actionResponse, redirect);
+                }
+            }
+        } catch (Exception e) {
+            handleUploadException(portletConfig, actionRequest, actionResponse, cmd, e);
+        }
+    }
+
+    /**
+     * Managing redirect after saving FileEntry
+     *
+     * @param portletConfig
+     * @param actionRequest
+     * @param fileEntry
+     * @param redirect
+     * @return
+     * @throws Exception
+     */
+    protected String getSaveAndContinueRedirect(
+        PortletConfig portletConfig, ActionRequest actionRequest,
+        FileEntry fileEntry, String redirect)
+        throws Exception {
+
+        ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(
+            WebKeys.THEME_DISPLAY);
+
+        LiferayPortletURL portletURL = PortletURLFactoryUtil.create(
+            actionRequest, portletConfig.getPortletName(), themeDisplay.getLayout(),
+            PortletRequest.RENDER_PHASE);
+
+        MutableRenderParameters mutableRenderParameters = portletURL.getRenderParameters();
+
+        mutableRenderParameters.setValues(
+            "mvcRenderCommandName", "/df/document/edit_file_entry");
+        mutableRenderParameters.setValues(Constants.CMD, Constants.UPDATE);
+        mutableRenderParameters.setValues("redirect", redirect);
+        mutableRenderParameters.setValues(
+            "groupId", String.valueOf(fileEntry.getGroupId()));
+        mutableRenderParameters.setValues(
+            "fileEntryId", String.valueOf(fileEntry.getFileEntryId()));
+        mutableRenderParameters.setValues(
+            "version", String.valueOf(fileEntry.getVersion()));
+        portletURL.setWindowState(actionRequest.getWindowState());
+
+        return portletURL.toString();
+    }
+
+
+    /**
+     * Delete Temp file entry
+     *
+     * @param actionRequest
+     * @param actionResponse
+     * @throws Exception
+     */
+    protected void deleteTempFileEntry(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception {
+
+        ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
+
+        long folderId = ParamUtil.getLong(actionRequest, "folderId");
+        String fileName = ParamUtil.getString(actionRequest, "fileName");
+
+        JSONObject jsonObject = JSONFactoryUtil.createJSONObject();
+
+        try {
+            _dlAppService.deleteTempFileEntry(themeDisplay.getScopeGroupId(), folderId, TEMP_FOLDER_NAME, fileName);
+
+            jsonObject.put("deleted", Boolean.TRUE);
+        } catch (Exception e) {
+            String errorMessage = themeDisplay.translate("an-unexpected-error-occurred-while-deleting-the-file");
+
+            jsonObject.put("deleted", Boolean.FALSE);
+            jsonObject.put("errorMessage", errorMessage);
+        }
+
+        JSONPortletResponseUtil.writeJSON(actionRequest, actionResponse, jsonObject);
+    }
+
+    /**
+     * Delete File entry
+     *
+     * @param actionRequest
+     * @param moveToTrash
+     * @throws Exception
+     */
+    protected void deleteFileEntry(ActionRequest actionRequest, boolean moveToTrash) throws Exception {
+
+        long fileEntryId = ParamUtil.getLong(actionRequest, "fileEntryId");
+
+        if (fileEntryId == 0) {
+            return;
+        }
+
+        String version = ParamUtil.getString(actionRequest, "version");
+
+        if (Validator.isNotNull(version)) {
+            _dlAppService.deleteFileVersion(fileEntryId, version);
+
+            return;
+        }
+
+        if (!moveToTrash) {
+            _dlAppService.deleteFileEntry(fileEntryId);
+
+            return;
+        }
+
+        FileEntry fileEntry = _dlAppService.getFileEntry(fileEntryId);
+
+        if (fileEntry.isRepositoryCapabilityProvided(TrashCapability.class)) {
+            fileEntry = _dlTrashService.moveFileEntryToTrash(fileEntryId);
+        }
+
+        hideDefaultSuccessMessage(actionRequest);
+    }
+
+    /**
+     * Add temp file entry
+     * <p>
+     * While creating a journal document, files are stored in the temporaly
+     * repository until the journal article is actually created.
+     *
+     * @param actionRequest
+     * @param actionResponse
+     * @throws Exception
+     */
+    protected void addTempFileEntry(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception {
+
+        UploadPortletRequest uploadPortletRequest = PortalUtil.getUploadPortletRequest(actionRequest);
+
+        ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
+
+        long folderId = ParamUtil.getLong(uploadPortletRequest, "folderId");
+        String sourceFileName = uploadPortletRequest.getFileName("file");
 
-		UploadPortletRequest uploadPortletRequest = PortalUtil.getUploadPortletRequest(actionRequest);
+        InputStream inputStream = null;
 
-		ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
+        try {
+            String tempFileName = TempFileEntryUtil.getTempFileName(sourceFileName);
 
-		long folderId = ParamUtil.getLong(uploadPortletRequest, "folderId");
-		String sourceFileName = uploadPortletRequest.getFileName("file");
+            inputStream = uploadPortletRequest.getFileAsStream("file");
 
-		InputStream inputStream = null;
+            String mimeType = uploadPortletRequest.getContentType("file");
 
-		try {
-			String tempFileName = TempFileEntryUtil.getTempFileName(sourceFileName);
+            FileEntry fileEntry = _dlAppService.addTempFileEntry(themeDisplay.getScopeGroupId(), folderId,
+                TEMP_FOLDER_NAME, tempFileName, inputStream, mimeType);
 
-			inputStream = uploadPortletRequest.getFileAsStream("file");
+            JSONObject jsonObject = JSONFactoryUtil.createJSONObject();
 
-			String mimeType = uploadPortletRequest.getContentType("file");
+            jsonObject.put("groupId", fileEntry.getGroupId());
+            jsonObject.put("name", fileEntry.getTitle());
+            jsonObject.put("title", sourceFileName);
+            jsonObject.put("uuid", fileEntry.getUuid());
 
-			FileEntry fileEntry = _dlAppService.addTempFileEntry(themeDisplay.getScopeGroupId(), folderId,
-					TEMP_FOLDER_NAME, tempFileName, inputStream, mimeType);
+            JSONPortletResponseUtil.writeJSON(actionRequest, actionResponse, jsonObject);
+        } finally {
+            StreamUtil.cleanUp(true, inputStream);
+        }
+    }
+
+    /**
+     * File Entry Update
+     *
+     * @param portletConfig
+     * @param actionRequest
+     * @param actionResponse
+     * @return
+     * @throws Exception
+     */
+    public FileEntry updateFileEntry(PortletConfig portletConfig, ActionRequest actionRequest,
+                                     ActionResponse actionResponse) throws Exception {
+
+        UploadPortletRequest uploadPortletRequest = PortalUtil.getUploadPortletRequest(actionRequest);
+
+        ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
+
+        String cmd = ParamUtil.getString(uploadPortletRequest, Constants.CMD);
+
+        long fileEntryId = ParamUtil.getLong(uploadPortletRequest, "fileEntryId");
+
+        long repositoryId = ParamUtil.getLong(uploadPortletRequest, "repositoryId");
+        long folderId = ParamUtil.getLong(uploadPortletRequest, "folderId");
+        String sourceFileName = uploadPortletRequest.getFileName("file");
+        String title = ParamUtil.getString(uploadPortletRequest, "title");
+        String description = ParamUtil.getString(uploadPortletRequest, "description");
+        String changeLog = ParamUtil.getString(uploadPortletRequest, "changeLog");
+        DLVersionNumberIncrease dlVersionNumberIncrease =
+            DLVersionNumberIncrease.valueOf(
+                uploadPortletRequest.getParameter("versionIncrease"),
+                DLVersionNumberIncrease.AUTOMATIC);
+
+        boolean updateVersionDetails = ParamUtil.getBoolean(
+            uploadPortletRequest, "updateVersionDetails");
+
+        if (!updateVersionDetails) {
+            dlVersionNumberIncrease = DLVersionNumberIncrease.AUTOMATIC;
+        }
+
+        if (folderId > 0) {
+            Folder folder = _dlAppService.getFolder(folderId);
+
+            if (folder.getGroupId() != themeDisplay.getScopeGroupId()) {
+                throw new NoSuchFolderException("{folderId=" + folderId + "}");
+            }
+        }
+
+        InputStream inputStream = null;
+
+        try {
+            String contentType = uploadPortletRequest.getContentType("file");
+            long size = uploadPortletRequest.getSize("file");
+
+            if ((cmd.equals(Constants.ADD)) && (size == 0)) {
+
+                contentType = MimeTypesUtil.getContentType(title);
+            }
+
+            inputStream = uploadPortletRequest.getFileAsStream("file");
+
+            ServiceContext serviceContext = ServiceContextFactory.getInstance(DLFileEntry.class.getName(),
+                uploadPortletRequest);
+
+            FileEntry fileEntry = null;
+
+            if (cmd.equals(Constants.ADD)) {
+
+                // Add file entry
+                fileEntry = _dlAppService.addFileEntry(
+                    null,
+                    repositoryId,
+                    folderId,
+                    sourceFileName,
+                    contentType,
+                    title,
+                    StringPool.BLANK,
+                    description,
+                    changeLog,
+                    inputStream,
+                    size,
+                    (Date)null,
+                    (Date)null,
+                    serviceContext);
+
+            } else {
+
+                // Update file entry
+                fileEntry = _dlAppService.updateFileEntry(
+                    fileEntryId,
+                    sourceFileName,
+                    contentType,
+                    title,
+                    StringPool.BLANK,
+                    description,
+                    changeLog,
+                    dlVersionNumberIncrease,
+                    inputStream,
+                    size,
+                    (Date)null,
+                    (Date)null,
+                    serviceContext);
+            }
+
+            return fileEntry;
+        } finally {
+            StreamUtil.cleanUp(true, inputStream);
+        }
+    }
+
+    /**
+     * Exception Handler
+     *
+     * @param portletConfig
+     * @param actionRequest
+     * @param actionResponse
+     * @param cmd
+     * @param e
+     * @throws Exception
+     */
+    protected void handleUploadException(PortletConfig portletConfig, ActionRequest actionRequest,
+                                         ActionResponse actionResponse, String cmd, Exception e) throws Exception {
+
+        if (e instanceof AssetCategoryException || e instanceof AssetTagException) {
+
+            SessionErrors.add(actionRequest, e.getClass(), e);
+        } else if (e instanceof AntivirusScannerException || e instanceof DuplicateFileEntryException
+            || e instanceof DuplicateFolderNameException || e instanceof FileExtensionException
+            || e instanceof FileMimeTypeException || e instanceof FileNameException
+            || e instanceof FileSizeException || e instanceof LiferayFileItemException
+            || e instanceof NoSuchFolderException || e instanceof SourceFileNameException
+            || e instanceof StorageFieldRequiredException || e instanceof UploadRequestSizeException) {
+
+            if (!cmd.equals(Constants.ADD_DYNAMIC) && !cmd.equals(Constants.ADD_MULTIPLE)
+                && !cmd.equals(Constants.ADD_TEMP)) {
+
+                if (e instanceof AntivirusScannerException) {
+                    SessionErrors.add(actionRequest, e.getClass(), e);
+                } else {
+                    SessionErrors.add(actionRequest, e.getClass());
+                }
+
+                return;
+            } else if (cmd.equals(Constants.ADD_TEMP)) {
+                hideDefaultErrorMessage(actionRequest);
+            }
+
+            if (e instanceof AntivirusScannerException || e instanceof DuplicateFileEntryException
+                || e instanceof FileExtensionException || e instanceof FileNameException
+                || e instanceof FileSizeException || e instanceof UploadRequestSizeException) {
+
+                HttpServletResponse response = PortalUtil.getHttpServletResponse(actionResponse);
+
+                response.setContentType(ContentTypes.TEXT_HTML);
+                response.setStatus(HttpServletResponse.SC_OK);
+
+                String errorMessage = StringPool.BLANK;
+                int errorType = 0;
+
+                ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
+
+                DLConfiguration dlConfiguration = ConfigurationProviderUtil.getSystemConfiguration(DLConfiguration.class);
+
+                if (e instanceof AntivirusScannerException) {
+                    AntivirusScannerException ase = (AntivirusScannerException) e;
+
+                    errorMessage = themeDisplay.translate(ase.getMessageKey());
+                    errorType = ServletResponseConstants.SC_FILE_ANTIVIRUS_EXCEPTION;
+                }
+
+                if (e instanceof DuplicateFileEntryException) {
+                    errorMessage = themeDisplay.translate("please-enter-a-unique-document-name");
+                    errorType = ServletResponseConstants.SC_DUPLICATE_FILE_EXCEPTION;
+                } else if (e instanceof FileExtensionException) {
+                    errorMessage = themeDisplay.translate("please-enter-a-file-with-a-valid-extension-x",
+                        StringUtil.merge(getAllowedFileExtensions(portletConfig, actionRequest, actionResponse)));
+                    errorType = ServletResponseConstants.SC_FILE_EXTENSION_EXCEPTION;
+                } else if (e instanceof FileNameException) {
+                    errorMessage = themeDisplay.translate("please-enter-a-file-with-a-valid-file-name");
+                    errorType = ServletResponseConstants.SC_FILE_NAME_EXCEPTION;
+                } else if (e instanceof FileSizeException) {
+                    long fileMaxSize = _uploadServletRequestConfigurationHelper.getMaxSize();
+
+                    errorMessage = themeDisplay.translate(
+                        "please-enter-a-file-with-a-valid-file-size-no-larger" + "-than-x",
+                        TextFormatter.formatStorageSize(fileMaxSize, themeDisplay.getLocale()));
+
+                    errorType = ServletResponseConstants.SC_FILE_SIZE_EXCEPTION;
+                }
+
+                JSONObject jsonObject = JSONFactoryUtil.createJSONObject();
+
+                jsonObject.put("message", errorMessage);
+                jsonObject.put("status", errorType);
+
+                JSONPortletResponseUtil.writeJSON(actionRequest, actionResponse, jsonObject);
+            }
+
+            if (e instanceof AntivirusScannerException) {
+                SessionErrors.add(actionRequest, e.getClass(), e);
+            } else {
+                SessionErrors.add(actionRequest, e.getClass());
+            }
+        } else if (e instanceof DuplicateLockException || e instanceof FileEntryLockException.MustOwnLock
+            || e instanceof InvalidFileVersionException || e instanceof NoSuchFileEntryException
+            || e instanceof PrincipalException) {
+
+            if (e instanceof DuplicateLockException) {
+                DuplicateLockException dle = (DuplicateLockException) e;
+
+                SessionErrors.add(actionRequest, dle.getClass(), dle.getLock());
+            } else {
+                SessionErrors.add(actionRequest, e.getClass());
+            }
+
+            MutableRenderParameters mutableRenderParameters = actionResponse.getRenderParameters();
+            mutableRenderParameters.setValue("mvcPath", "/error.jsp");
+        } else {
+            Throwable cause = e.getCause();
 
-			JSONObject jsonObject = JSONFactoryUtil.createJSONObject();
+            if (cause instanceof DuplicateFileEntryException) {
+                SessionErrors.add(actionRequest, DuplicateFileEntryException.class);
+            } else {
+                throw e;
+            }
+        }
+    }
 
-			jsonObject.put("groupId", fileEntry.getGroupId());
-			jsonObject.put("name", fileEntry.getTitle());
-			jsonObject.put("title", sourceFileName);
-			jsonObject.put("uuid", fileEntry.getUuid());
+    /**
+     * Get Allowed file extensions
+     *
+     * @param portletConfig
+     * @param portletRequest
+     * @param portletResponse
+     * @return
+     * @throws PortalException
+     */
+    protected String[] getAllowedFileExtensions(PortletConfig portletConfig, PortletRequest portletRequest,
+                                                PortletResponse portletResponse) throws PortalException {
 
-			JSONPortletResponseUtil.writeJSON(actionRequest, actionResponse, jsonObject);
-		} finally {
-			StreamUtil.cleanUp(true, inputStream);
-		}
-	}
+        ThemeDisplay themeDisplay = (ThemeDisplay) portletRequest.getAttribute(WebKeys.THEME_DISPLAY);
 
-	/**
-	 * File Entry Update
-	 * 
-	 * @param portletConfig
-	 * @param actionRequest
-	 * @param actionResponse
-	 * @return
-	 * @throws Exception
-	 */
-	public FileEntry updateFileEntry(PortletConfig portletConfig, ActionRequest actionRequest,
-			ActionResponse actionResponse) throws Exception {
+        PortletDisplay portletDisplay = themeDisplay.getPortletDisplay();
 
-		UploadPortletRequest uploadPortletRequest = PortalUtil.getUploadPortletRequest(actionRequest);
+        Settings settings = SettingsFactoryUtil
+            .getSettings(new PortletInstanceSettingsLocator(themeDisplay.getLayout(), portletDisplay.getId()));
 
-		ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
+        TypedSettings typedSettings = new TypedSettings(settings);
 
-		String cmd = ParamUtil.getString(uploadPortletRequest, Constants.CMD);
+        Set<String> extensions = new HashSet<>();
 
-		long fileEntryId = ParamUtil.getLong(uploadPortletRequest, "fileEntryId");
+        String[] mimeTypes = typedSettings.getValues("mimeTypes", _MIME_TYPES_DEFAULT);
 
-		long repositoryId = ParamUtil.getLong(uploadPortletRequest, "repositoryId");
-		long folderId = ParamUtil.getLong(uploadPortletRequest, "folderId");
-		String sourceFileName = uploadPortletRequest.getFileName("file");
-		String title = ParamUtil.getString(uploadPortletRequest, "title");
-		String description = ParamUtil.getString(uploadPortletRequest, "description");
-		String changeLog = ParamUtil.getString(uploadPortletRequest, "changeLog");
-		DLVersionNumberIncrease dlVersionNumberIncrease =
-				DLVersionNumberIncrease.valueOf(
-					uploadPortletRequest.getParameter("versionIncrease"),
-					DLVersionNumberIncrease.AUTOMATIC);
+        for (String mimeType : mimeTypes) {
+            extensions.addAll(MimeTypesUtil.getExtensions(mimeType));
+        }
 
-		boolean updateVersionDetails = ParamUtil.getBoolean(
-			uploadPortletRequest, "updateVersionDetails");
+        return extensions.toArray(new String[extensions.size()]);
+    }
 
-		if (!updateVersionDetails) {
-			dlVersionNumberIncrease = DLVersionNumberIncrease.AUTOMATIC;
-		}
-			
-		if (folderId > 0) {
-			Folder folder = _dlAppService.getFolder(folderId);
+    @Reference(unbind = "-")
+    protected void setDLAppService(DLAppService dlAppService) {
+        _dlAppService = dlAppService;
+    }
+
+    @Reference(unbind = "-")
+    protected void setDLTrashService(DLTrashService dlTrashService) {
+        _dlTrashService = dlTrashService;
+    }
+
+    @Reference(unbind = "-")
+    protected void setUploadServletRequestConfigurationHelper(UploadServletRequestConfigurationHelper uploadServletRequestConfigurationHelper) {
+        _uploadServletRequestConfigurationHelper = uploadServletRequestConfigurationHelper;
+    }
+
+    private UploadServletRequestConfigurationHelper
+        _uploadServletRequestConfigurationHelper;
 
-			if (folder.getGroupId() != themeDisplay.getScopeGroupId()) {
-				throw new NoSuchFolderException("{folderId=" + folderId + "}");
-			}
-		}
+    private DLAppService _dlAppService;
+    private DLTrashService _dlTrashService;
 
-		InputStream inputStream = null;
-
-		try {
-			String contentType = uploadPortletRequest.getContentType("file");
-			long size = uploadPortletRequest.getSize("file");
-
-			if ((cmd.equals(Constants.ADD)) && (size == 0)) {
-
-				contentType = MimeTypesUtil.getContentType(title);
-			}
-
-			inputStream = uploadPortletRequest.getFileAsStream("file");
-
-			ServiceContext serviceContext = ServiceContextFactory.getInstance(DLFileEntry.class.getName(),
-					uploadPortletRequest);
-
-			FileEntry fileEntry = null;
-
-			if (cmd.equals(Constants.ADD)) {
-
-				// Add file entry
-				fileEntry = _dlAppService.addFileEntry(repositoryId, folderId, sourceFileName, contentType, title,
-						description, changeLog, inputStream, size, serviceContext);
+    public static final String TEMP_FOLDER_NAME = EditFileEntryMVCActionCommand.class.getName() + "_DUMMY_FACTORY";
 
-			} else {
+    private static final String[] _MIME_TYPES_DEFAULT = ArrayUtil.toStringArray(DLUtil.getAllMediaGalleryMimeTypes());
 
-				// Update file entry
-				fileEntry = _dlAppService.updateFileEntry(fileEntryId, sourceFileName, contentType, title, description,
-						changeLog, dlVersionNumberIncrease, inputStream, size, serviceContext);
-			}
-
-			return fileEntry;
-		} finally {
-			StreamUtil.cleanUp(true,inputStream);
-		}
-	}
-
-	/**
-	 * Exception Handler
-	 * 
-	 * @param portletConfig
-	 * @param actionRequest
-	 * @param actionResponse
-	 * @param cmd
-	 * @param e
-	 * @throws Exception
-	 */
-	protected void handleUploadException(PortletConfig portletConfig, ActionRequest actionRequest,
-			ActionResponse actionResponse, String cmd, Exception e) throws Exception {
-
-		if (e instanceof AssetCategoryException || e instanceof AssetTagException) {
-
-			SessionErrors.add(actionRequest, e.getClass(), e);
-		} else if (e instanceof AntivirusScannerException || e instanceof DuplicateFileEntryException
-				|| e instanceof DuplicateFolderNameException || e instanceof FileExtensionException
-				|| e instanceof FileMimeTypeException || e instanceof FileNameException
-				|| e instanceof FileSizeException || e instanceof LiferayFileItemException
-				|| e instanceof NoSuchFolderException || e instanceof SourceFileNameException
-				|| e instanceof StorageFieldRequiredException || e instanceof UploadRequestSizeException) {
-
-			if (!cmd.equals(Constants.ADD_DYNAMIC) && !cmd.equals(Constants.ADD_MULTIPLE)
-					&& !cmd.equals(Constants.ADD_TEMP)) {
-
-				if (e instanceof AntivirusScannerException) {
-					SessionErrors.add(actionRequest, e.getClass(), e);
-				} else {
-					SessionErrors.add(actionRequest, e.getClass());
-				}
-
-				return;
-			} else if (cmd.equals(Constants.ADD_TEMP)) {
-				hideDefaultErrorMessage(actionRequest);
-			}
-
-			if (e instanceof AntivirusScannerException || e instanceof DuplicateFileEntryException
-					|| e instanceof FileExtensionException || e instanceof FileNameException
-					|| e instanceof FileSizeException || e instanceof UploadRequestSizeException) {
-
-				HttpServletResponse response = PortalUtil.getHttpServletResponse(actionResponse);
-
-				response.setContentType(ContentTypes.TEXT_HTML);
-				response.setStatus(HttpServletResponse.SC_OK);
-
-				String errorMessage = StringPool.BLANK;
-				int errorType = 0;
-
-				ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
-				
-				DLConfiguration dlConfiguration = ConfigurationProviderUtil.getSystemConfiguration(DLConfiguration.class);
-
-				if (e instanceof AntivirusScannerException) {
-					AntivirusScannerException ase = (AntivirusScannerException) e;
-
-					errorMessage = themeDisplay.translate(ase.getMessageKey());
-					errorType = ServletResponseConstants.SC_FILE_ANTIVIRUS_EXCEPTION;
-				}
-
-				if (e instanceof DuplicateFileEntryException) {
-					errorMessage = themeDisplay.translate("please-enter-a-unique-document-name");
-					errorType = ServletResponseConstants.SC_DUPLICATE_FILE_EXCEPTION;
-				} else if (e instanceof FileExtensionException) {
-					errorMessage = themeDisplay.translate("please-enter-a-file-with-a-valid-extension-x",
-							StringUtil.merge(getAllowedFileExtensions(portletConfig, actionRequest, actionResponse)));
-					errorType = ServletResponseConstants.SC_FILE_EXTENSION_EXCEPTION;
-				} else if (e instanceof FileNameException) {
-					errorMessage = themeDisplay.translate("please-enter-a-file-with-a-valid-file-name");
-					errorType = ServletResponseConstants.SC_FILE_NAME_EXCEPTION;
-				} else if (e instanceof FileSizeException) {
-					long fileMaxSize = dlConfiguration.fileMaxSize();
-
-					if (fileMaxSize == 0) {
-						fileMaxSize = _uploadServletRequestConfigurationHelper.getMaxSize();
-					}
-
-					errorMessage = themeDisplay.translate(
-							"please-enter-a-file-with-a-valid-file-size-no-larger" + "-than-x",
-							TextFormatter.formatStorageSize(fileMaxSize, themeDisplay.getLocale()));
-
-					errorType = ServletResponseConstants.SC_FILE_SIZE_EXCEPTION;
-				}
-
-				JSONObject jsonObject = JSONFactoryUtil.createJSONObject();
-
-				jsonObject.put("message", errorMessage);
-				jsonObject.put("status", errorType);
-
-				JSONPortletResponseUtil.writeJSON(actionRequest, actionResponse, jsonObject);
-			}
-
-			if (e instanceof AntivirusScannerException) {
-				SessionErrors.add(actionRequest, e.getClass(), e);
-			} else {
-				SessionErrors.add(actionRequest, e.getClass());
-			}
-		} else if (e instanceof DuplicateLockException || e instanceof FileEntryLockException.MustOwnLock
-				|| e instanceof InvalidFileVersionException || e instanceof NoSuchFileEntryException
-				|| e instanceof PrincipalException) {
-
-			if (e instanceof DuplicateLockException) {
-				DuplicateLockException dle = (DuplicateLockException) e;
-
-				SessionErrors.add(actionRequest, dle.getClass(), dle.getLock());
-			} else {
-				SessionErrors.add(actionRequest, e.getClass());
-			}
-
-			MutableRenderParameters mutableRenderParameters = actionResponse.getRenderParameters();
-			mutableRenderParameters.setValue("mvcPath", "/error.jsp");
-		} else {
-			Throwable cause = e.getCause();
-
-			if (cause instanceof DuplicateFileEntryException) {
-				SessionErrors.add(actionRequest, DuplicateFileEntryException.class);
-			} else {
-				throw e;
-			}
-		}
-	}
-
-	/**
-	 * Get Allowed file extensions
-	 * 
-	 * @param portletConfig
-	 * @param portletRequest
-	 * @param portletResponse
-	 * @return
-	 * @throws PortalException
-	 */
-	protected String[] getAllowedFileExtensions(PortletConfig portletConfig, PortletRequest portletRequest,
-			PortletResponse portletResponse) throws PortalException {
-
-		ThemeDisplay themeDisplay = (ThemeDisplay) portletRequest.getAttribute(WebKeys.THEME_DISPLAY);
-
-		PortletDisplay portletDisplay = themeDisplay.getPortletDisplay();
-
-		Settings settings = SettingsFactoryUtil
-				.getSettings(new PortletInstanceSettingsLocator(themeDisplay.getLayout(), portletDisplay.getId()));
-
-		TypedSettings typedSettings = new TypedSettings(settings);
-
-		Set<String> extensions = new HashSet<>();
-
-		String[] mimeTypes = typedSettings.getValues("mimeTypes", _MIME_TYPES_DEFAULT);
-
-		for (String mimeType : mimeTypes) {
-			extensions.addAll(MimeTypesUtil.getExtensions(mimeType));
-		}
-
-		return extensions.toArray(new String[extensions.size()]);
-	}
-
-	@Reference(unbind = "-")
-	protected void setDLAppService(DLAppService dlAppService) {
-		_dlAppService = dlAppService;
-	}
-
-	@Reference(unbind = "-")
-	protected void setDLTrashService(DLTrashService dlTrashService) {
-		_dlTrashService = dlTrashService;
-	}
-	
-	@Reference(unbind = "-")
-	protected void setUploadServletRequestConfigurationHelper(UploadServletRequestConfigurationHelper uploadServletRequestConfigurationHelper) {
-		_uploadServletRequestConfigurationHelper = uploadServletRequestConfigurationHelper;
-	}	
-
-	private UploadServletRequestConfigurationHelper
-		_uploadServletRequestConfigurationHelper;
-	
-	private DLAppService _dlAppService;
-	private DLTrashService _dlTrashService;
-	
-	public static final String TEMP_FOLDER_NAME = EditFileEntryMVCActionCommand.class.getName() + "_DUMMY_FACTORY";
-	
-	private static final String[] _MIME_TYPES_DEFAULT = ArrayUtil.toStringArray(DLUtil.getAllMediaGalleryMimeTypes());
-
-	private static final Log _log = LogFactoryUtil.getLog(EditFileEntryMVCActionCommand.class);
+    private static final Log _log = LogFactoryUtil.getLog(EditFileEntryMVCActionCommand.class);
 
 }
diff --git a/src/main/java/com/liferay/support/tools/user/UserContext.java b/src/main/java/com/liferay/support/tools/user/UserContext.java
index 561db64..941bc97 100644
--- a/src/main/java/com/liferay/support/tools/user/UserContext.java
+++ b/src/main/java/com/liferay/support/tools/user/UserContext.java
@@ -3,302 +3,304 @@
 
 import com.liferay.announcements.kernel.model.AnnouncementsDelivery;
 import com.liferay.announcements.kernel.model.AnnouncementsEntryConstants;
+import com.liferay.announcements.kernel.service.AnnouncementsDeliveryLocalServiceUtil;
+import com.liferay.counter.kernel.service.CounterLocalServiceUtil;
 import com.liferay.portal.kernel.exception.PortalException;
 import com.liferay.portal.kernel.model.Group;
 import com.liferay.portal.kernel.service.ServiceContext;
 import com.liferay.portal.kernel.service.ServiceContextFactory;
 import com.liferay.portal.kernel.util.ParamUtil;
-import com.liferay.portlet.announcements.model.impl.AnnouncementsDeliveryImpl;
 import com.liferay.support.tools.common.ParamContext;
 import com.liferay.support.tools.utils.CommonUtil;
 
+import javax.portlet.ActionRequest;
 import java.util.ArrayList;
 import java.util.List;
 
-import javax.portlet.ActionRequest;
-
 public class UserContext extends ParamContext {
 
-	public UserContext(ActionRequest actionRequest)
-		throws PortalException {
+    public UserContext(ActionRequest actionRequest)
+        throws PortalException {
+
+        // Fetch data
+        numberOfusers = ParamUtil.getLong(actionRequest, "numberOfusers", 0);
+        baseScreenName =
+            ParamUtil.getString(actionRequest, "baseScreenName", "");
+        baseDomain =
+            ParamUtil.getString(actionRequest, "baseDomain", "liferay.com");
+        male = ParamUtil.getBoolean(actionRequest, "male", true);
+        fakerEnable = ParamUtil.getBoolean(actionRequest, "fakerEnable", false);
+        password = ParamUtil.getString(actionRequest, "password", "test");
+        locale = ParamUtil.getString(actionRequest, "locale", "en");
+        autoUserPreLogin =
+            ParamUtil.getBoolean(actionRequest, "autoUserPreLogin", false);
 
-		// Fetch data
-		numberOfusers = ParamUtil.getLong(actionRequest, "numberOfusers", 0);
-		baseScreenName =
-			ParamUtil.getString(actionRequest, "baseScreenName", "");
-		baseDomain =
-			ParamUtil.getString(actionRequest, "baseDomain", "liferay.com");
-		male = ParamUtil.getBoolean(actionRequest, "male", true);
-		fakerEnable = ParamUtil.getBoolean(actionRequest, "fakerEnable", false);
-		password = ParamUtil.getString(actionRequest, "password", "test");
-		locale = ParamUtil.getString(actionRequest, "locale", "en");
-		autoUserPreLogin =
-			ParamUtil.getBoolean(actionRequest, "autoUserPreLogin", false);
+        // Organization
+        String[] organizations =
+            ParamUtil.getStringValues(actionRequest, "organizations", null);
+        organizationIds = CommonUtil.convertStringToLongArray(organizations);
 
-		// Organization
-		String[] organizations =
-			ParamUtil.getStringValues(actionRequest, "organizations", null);
-		organizationIds = CommonUtil.convertStringToLongArray(organizations);
+        // Sites
+        String[] groups =
+            ParamUtil.getStringValues(actionRequest, "groups", null);
+        groupIds = CommonUtil.convertStringToLongArray(groups);
 
-		// Sites
-		String[] groups =
-			ParamUtil.getStringValues(actionRequest, "groups", null);
-		groupIds = CommonUtil.convertStringToLongArray(groups);
+        // Roles
+        String[] roles =
+            ParamUtil.getStringValues(actionRequest, "roles", null);
+        roleIds = CommonUtil.convertStringToLongArray(roles);
 
-		// Roles
-		String[] roles =
-			ParamUtil.getStringValues(actionRequest, "roles", null);
-		roleIds = CommonUtil.convertStringToLongArray(roles);
+        // User Group
+        String[] userGroups =
+            ParamUtil.getStringValues(actionRequest, "userGroups", null);
+        userGroupIds = CommonUtil.convertStringToLongArray(userGroups);
 
-		// User Group
-		String[] userGroups =
-			ParamUtil.getStringValues(actionRequest, "userGroups", null);
-		userGroupIds = CommonUtil.convertStringToLongArray(userGroups);
+        // Announcements Deliveries
+        announcementsDeliveries = getAnnouncementsDeliveries(actionRequest);
 
-		// Announcements Deliveries
-		announcementsDeliveries = getAnnouncementsDeliveries(actionRequest);
+        // Site Templates for My Profile and My Dashboard
+        publicLayoutSetPrototypeId =
+            ParamUtil.getLong(actionRequest, "publicLayoutSetPrototypeId");
 
-		// Site Templates for My Profile and My Dashboard
-		publicLayoutSetPrototypeId =
-			ParamUtil.getLong(actionRequest, "publicLayoutSetPrototypeId");
+        setPublicLayoutSetPrototypeLinkEnabled(
+            (0 == publicLayoutSetPrototypeId) ? false : true);
 
-		setPublicLayoutSetPrototypeLinkEnabled(
-			(0 == publicLayoutSetPrototypeId) ? false : true);
+        privateLayoutSetPrototypeId =
+            ParamUtil.getLong(actionRequest, "privateLayoutSetPrototypeId");
 
-		privateLayoutSetPrototypeId =
-			ParamUtil.getLong(actionRequest, "privateLayoutSetPrototypeId");
+        setPrivateLayoutSetPrototypeLinkEnabled(
+            (0 == privateLayoutSetPrototypeId) ? false : true);
 
-		setPrivateLayoutSetPrototypeLinkEnabled(
-			(0 == privateLayoutSetPrototypeId) ? false : true);
+        ServiceContext serviceContext = ServiceContextFactory.getInstance(
+            Group.class.getName(), actionRequest);
+        setServiceContext(serviceContext);
+    }
 
-		ServiceContext serviceContext = ServiceContextFactory.getInstance(
-			Group.class.getName(), actionRequest);
-		setServiceContext(serviceContext);
-	}
+    /**
+     * Get Announcements Deliveries
+     *
+     * @param actionRequest
+     * @return List of AnnouncementsDelivery
+     */
+    protected List<AnnouncementsDelivery> getAnnouncementsDeliveries(
+        ActionRequest actionRequest) {
 
-	/**
-	 * Get Announcements Deliveries
-	 * 
-	 * @param actionRequest
-	 * @return List of AnnouncementsDelivery
-	 */
-	protected List<AnnouncementsDelivery> getAnnouncementsDeliveries(
-		ActionRequest actionRequest) {
+        List<AnnouncementsDelivery> announcementsDeliveries = new ArrayList<>();
 
-		List<AnnouncementsDelivery> announcementsDeliveries = new ArrayList<>();
+        for (String type : AnnouncementsEntryConstants.TYPES) {
 
-		for (String type : AnnouncementsEntryConstants.TYPES) {
-			boolean email = ParamUtil.getBoolean(
-				actionRequest, "announcementsType" + type + "Email");
-			boolean sms = ParamUtil.getBoolean(
-				actionRequest, "announcementsType" + type + "Sms");
+            boolean email = ParamUtil.getBoolean(
+                actionRequest, "announcementsType" + type + "Email");
+            boolean sms = ParamUtil.getBoolean(
+                actionRequest, "announcementsType" + type + "Sms");
 
-			AnnouncementsDelivery announcementsDelivery =
-				new AnnouncementsDeliveryImpl();
+            long deliveryId = CounterLocalServiceUtil.increment();
+            AnnouncementsDelivery announcementsDelivery =
+                AnnouncementsDeliveryLocalServiceUtil.createAnnouncementsDelivery(deliveryId);
 
-			announcementsDelivery.setType(type);
-			announcementsDelivery.setEmail(email);
-			announcementsDelivery.setSms(sms);
+            announcementsDelivery.setType(type);
+            announcementsDelivery.setEmail(email);
+            announcementsDelivery.setSms(sms);
 
-			announcementsDeliveries.add(announcementsDelivery);
-		}
+            announcementsDeliveries.add(announcementsDelivery);
+        }
 
-		return announcementsDeliveries;
-	}
+        return announcementsDeliveries;
+    }
 
-	public long getNumberOfusers() {
+    public long getNumberOfusers() {
 
-		return numberOfusers;
-	}
+        return numberOfusers;
+    }
 
-	public void setNumberOfusers(long numberOfusers) {
+    public void setNumberOfusers(long numberOfusers) {
 
-		this.numberOfusers = numberOfusers;
-	}
+        this.numberOfusers = numberOfusers;
+    }
 
-	public String getBaseScreenName() {
+    public String getBaseScreenName() {
 
-		return baseScreenName;
-	}
+        return baseScreenName;
+    }
 
-	public void setBaseScreenName(String baseScreenName) {
+    public void setBaseScreenName(String baseScreenName) {
 
-		this.baseScreenName = baseScreenName;
-	}
+        this.baseScreenName = baseScreenName;
+    }
 
-	public String getBaseDomain() {
+    public String getBaseDomain() {
 
-		return baseDomain;
-	}
+        return baseDomain;
+    }
 
-	public void setBaseDomain(String baseDomain) {
+    public void setBaseDomain(String baseDomain) {
 
-		this.baseDomain = baseDomain;
-	}
+        this.baseDomain = baseDomain;
+    }
 
-	public long[] getOrganizationIds() {
+    public long[] getOrganizationIds() {
 
-		return organizationIds;
-	}
+        return organizationIds;
+    }
 
-	public void setOrganizationIds(long[] organizationIds) {
+    public void setOrganizationIds(long[] organizationIds) {
 
-		this.organizationIds = organizationIds;
-	}
+        this.organizationIds = organizationIds;
+    }
 
-	public long[] getGroupIds() {
+    public long[] getGroupIds() {
 
-		return groupIds;
-	}
+        return groupIds;
+    }
 
-	public void setGroupIds(long[] groupIds) {
+    public void setGroupIds(long[] groupIds) {
 
-		this.groupIds = groupIds;
-	}
+        this.groupIds = groupIds;
+    }
 
-	public long[] getRoleIds() {
+    public long[] getRoleIds() {
 
-		return roleIds;
-	}
+        return roleIds;
+    }
 
-	public void setRoleIds(long[] roleIds) {
+    public void setRoleIds(long[] roleIds) {
 
-		this.roleIds = roleIds;
-	}
+        this.roleIds = roleIds;
+    }
 
-	public long[] getUserGroupIds() {
+    public long[] getUserGroupIds() {
 
-		return userGroupIds;
-	}
+        return userGroupIds;
+    }
 
-	public void setUserGroupIds(long[] userGroupIds) {
+    public void setUserGroupIds(long[] userGroupIds) {
 
-		this.userGroupIds = userGroupIds;
-	}
+        this.userGroupIds = userGroupIds;
+    }
 
-	public boolean isMale() {
+    public boolean isMale() {
 
-		return male;
-	}
+        return male;
+    }
 
-	public void setMale(boolean male) {
+    public void setMale(boolean male) {
 
-		this.male = male;
-	}
+        this.male = male;
+    }
 
-	public boolean isFakerEnable() {
+    public boolean isFakerEnable() {
 
-		return fakerEnable;
-	}
+        return fakerEnable;
+    }
 
-	public void setFakerEnable(boolean fakerEnable) {
+    public void setFakerEnable(boolean fakerEnable) {
 
-		this.fakerEnable = fakerEnable;
-	}
+        this.fakerEnable = fakerEnable;
+    }
 
-	public String getPassword() {
+    public String getPassword() {
 
-		return password;
-	}
+        return password;
+    }
 
-	public void setPassword(String password) {
+    public void setPassword(String password) {
 
-		this.password = password;
-	}
+        this.password = password;
+    }
 
-	public String getLocale() {
+    public String getLocale() {
 
-		return locale;
-	}
+        return locale;
+    }
 
-	public void setLocale(String locale) {
+    public void setLocale(String locale) {
 
-		this.locale = locale;
-	}
+        this.locale = locale;
+    }
 
-	public boolean isAutoUserPreLogin() {
+    public boolean isAutoUserPreLogin() {
 
-		return autoUserPreLogin;
-	}
+        return autoUserPreLogin;
+    }
 
-	public void setAutoUserPreLogin(boolean autoUserPreLogin) {
+    public void setAutoUserPreLogin(boolean autoUserPreLogin) {
 
-		this.autoUserPreLogin = autoUserPreLogin;
-	}
+        this.autoUserPreLogin = autoUserPreLogin;
+    }
 
-	public List<AnnouncementsDelivery> getAnnouncementsDeliveries() {
+    public List<AnnouncementsDelivery> getAnnouncementsDeliveries() {
 
-		return announcementsDeliveries;
-	}
+        return announcementsDeliveries;
+    }
 
-	public void setAnnouncementsDeliveries(
-		List<AnnouncementsDelivery> announcementsDeliveries) {
+    public void setAnnouncementsDeliveries(
+        List<AnnouncementsDelivery> announcementsDeliveries) {
 
-		this.announcementsDeliveries = announcementsDeliveries;
-	}
+        this.announcementsDeliveries = announcementsDeliveries;
+    }
 
-	public long getPublicLayoutSetPrototypeId() {
+    public long getPublicLayoutSetPrototypeId() {
 
-		return publicLayoutSetPrototypeId;
-	}
+        return publicLayoutSetPrototypeId;
+    }
 
-	public void setPublicLayoutSetPrototypeId(long publicLayoutSetPrototypeId) {
+    public void setPublicLayoutSetPrototypeId(long publicLayoutSetPrototypeId) {
 
-		this.publicLayoutSetPrototypeId = publicLayoutSetPrototypeId;
-	}
+        this.publicLayoutSetPrototypeId = publicLayoutSetPrototypeId;
+    }
 
-	public long getPrivateLayoutSetPrototypeId() {
+    public long getPrivateLayoutSetPrototypeId() {
 
-		return privateLayoutSetPrototypeId;
-	}
+        return privateLayoutSetPrototypeId;
+    }
 
-	public void setPrivateLayoutSetPrototypeId(
-		long privateLayoutSetPrototypeId) {
+    public void setPrivateLayoutSetPrototypeId(
+        long privateLayoutSetPrototypeId) {
 
-		this.privateLayoutSetPrototypeId = privateLayoutSetPrototypeId;
-	}
+        this.privateLayoutSetPrototypeId = privateLayoutSetPrototypeId;
+    }
 
-	public boolean isPublicLayoutSetPrototypeLinkEnabled() {
+    public boolean isPublicLayoutSetPrototypeLinkEnabled() {
 
-		return publicLayoutSetPrototypeLinkEnabled;
-	}
+        return publicLayoutSetPrototypeLinkEnabled;
+    }
 
-	public void setPublicLayoutSetPrototypeLinkEnabled(
-		boolean publicLayoutSetPrototypeLinkEnabled) {
+    public void setPublicLayoutSetPrototypeLinkEnabled(
+        boolean publicLayoutSetPrototypeLinkEnabled) {
 
-		this.publicLayoutSetPrototypeLinkEnabled =
-			publicLayoutSetPrototypeLinkEnabled;
-	}
+        this.publicLayoutSetPrototypeLinkEnabled =
+            publicLayoutSetPrototypeLinkEnabled;
+    }
 
-	public boolean isPrivateLayoutSetPrototypeLinkEnabled() {
+    public boolean isPrivateLayoutSetPrototypeLinkEnabled() {
 
-		return privateLayoutSetPrototypeLinkEnabled;
-	}
+        return privateLayoutSetPrototypeLinkEnabled;
+    }
 
-	public void setPrivateLayoutSetPrototypeLinkEnabled(
-		boolean privateLayoutSetPrototypeLinkEnabled) {
+    public void setPrivateLayoutSetPrototypeLinkEnabled(
+        boolean privateLayoutSetPrototypeLinkEnabled) {
 
-		this.privateLayoutSetPrototypeLinkEnabled =
-			privateLayoutSetPrototypeLinkEnabled;
-	}
+        this.privateLayoutSetPrototypeLinkEnabled =
+            privateLayoutSetPrototypeLinkEnabled;
+    }
 
-	private long numberOfusers = 0;
-	private String baseScreenName = "";
-	private String baseDomain = "";
-	private long[] organizationIds = null;
-	private long[] groupIds = null;
-	private long[] roleIds = null;
-	private long[] userGroupIds = null;
-	private boolean male;
-	private boolean fakerEnable;
-	private String password;
-	private String locale;
-	private boolean autoUserPreLogin;
-	private List<AnnouncementsDelivery> announcementsDeliveries =
-		new ArrayList<>();
-	private long publicLayoutSetPrototypeId;
-	private long privateLayoutSetPrototypeId;
-	private boolean publicLayoutSetPrototypeLinkEnabled;
-	private boolean privateLayoutSetPrototypeLinkEnabled;
+    private long numberOfusers = 0;
+    private String baseScreenName = "";
+    private String baseDomain = "";
+    private long[] organizationIds = null;
+    private long[] groupIds = null;
+    private long[] roleIds = null;
+    private long[] userGroupIds = null;
+    private boolean male;
+    private boolean fakerEnable;
+    private String password;
+    private String locale;
+    private boolean autoUserPreLogin;
+    private List<AnnouncementsDelivery> announcementsDeliveries =
+        new ArrayList<>();
+    private long publicLayoutSetPrototypeId;
+    private long privateLayoutSetPrototypeId;
+    private boolean publicLayoutSetPrototypeLinkEnabled;
+    private boolean privateLayoutSetPrototypeLinkEnabled;
 
 }
diff --git a/src/main/java/com/liferay/support/tools/user/UserDataService.java b/src/main/java/com/liferay/support/tools/user/UserDataService.java
index 30f51df..0fd78ce 100644
--- a/src/main/java/com/liferay/support/tools/user/UserDataService.java
+++ b/src/main/java/com/liferay/support/tools/user/UserDataService.java
@@ -1,6 +1,7 @@
 
 package com.liferay.support.tools.user;
 
+import aQute.bnd.annotation.ProviderType;
 import com.github.javafaker.Faker;
 import com.liferay.announcements.kernel.model.AnnouncementsDelivery;
 import com.liferay.announcements.kernel.service.AnnouncementsDeliveryLocalService;
@@ -15,305 +16,287 @@
 import com.liferay.portal.kernel.model.RoleConstants;
 import com.liferay.portal.kernel.model.User;
 import com.liferay.portal.kernel.security.access.control.AccessControlled;
-import com.liferay.portal.kernel.service.OrganizationLocalService;
-import com.liferay.portal.kernel.service.RoleLocalService;
-import com.liferay.portal.kernel.service.ServiceContext;
-import com.liferay.portal.kernel.service.UserGroupRoleLocalService;
-import com.liferay.portal.kernel.service.UserLocalService;
+import com.liferay.portal.kernel.service.*;
 import com.liferay.portal.kernel.transaction.Isolation;
 import com.liferay.portal.kernel.transaction.Transactional;
 import com.liferay.portal.kernel.util.LocaleUtil;
 import com.liferay.portal.kernel.util.Validator;
 import com.liferay.support.tools.utils.CommonUtil;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
-import java.util.stream.Collectors;
-
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
 
-import aQute.bnd.annotation.ProviderType;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * User Data (User / Related roles applying) service
- * 
+ *
  * @author Yasuyuki Takeo
  */
 @AccessControlled
 @Component(service = UserDataService.class)
 @ProviderType
 @Transactional(
-    isolation = Isolation.PORTAL, 
-    rollbackFor = { 
-        PortalException.class, 
-        SystemException.class 
+    isolation = Isolation.PORTAL,
+    rollbackFor = {
+        PortalException.class,
+        SystemException.class
     }
 )
 public class UserDataService {
 
-	/**
-	 * Create User data
-	 * 
-	 * @param serviceContext
-	 * @param organizationIds
-	 * @param groupIds
-	 * @param roleIds
-	 * @param userGroupIds
-	 * @param male
-	 * @param fakerEnable
-	 * @param password
-	 * @param screenName
-	 * @param emailAddress
-	 * @param baseScreenName
-	 * @param index
-	 * @param localeStr
-	 * @throws PortalException
-	 */
-	public User createUserData(
-		ServiceContext serviceContext, long[] organizationIds, long[] groupIds,
-		long[] roleIds, long[] userGroupIds, boolean male, boolean fakerEnable,
-		String password, String screenName, String emailAddress,
-		String baseScreenName, long index, String localeStr)
-		throws PortalException {
-
-		// For generating dummy user name
-		Faker faker = _commonUtil.createFaker(localeStr);
-
-		// Generate first / last name
-		String firstName =
-			(fakerEnable) ? faker.name().firstName() : baseScreenName;
-		String lastName =
-			(fakerEnable) ? faker.name().lastName() : String.valueOf(index);
-
-		User user = null;
-
-		try {
-			// Create User
-			user = _userLocalService.addUserWithWorkflow(
-				serviceContext.getUserId(), serviceContext.getCompanyId(), // companyId,
-				false, // autoPassword,
-				password, // password1,
-				password, // password2,
-				false, // autoScreenName,
-				screenName.toString(), emailAddress.toString(), 0, // facebookId,
-				StringPool.BLANK, // openId,
-				LocaleUtil.getDefault(), // locale,
-				firstName, // firstName,
-				StringPool.BLANK, // middleName,
-				lastName, // lastName,
-				0, // prefixId,
-				0, // suffixId,
-				male, // male
-				1, // birthdayMonth,
-				1, // birthdayDay,
-				1970, // birthdayYear,
-				StringPool.BLANK, // jobTitle,
-				groupIds, organizationIds, getRegularRoleIds(roleIds), // this
-																		// is
-																		// only
-																		// for
-																		// reguler
-																		// roles
-				userGroupIds, // userGroupIds,
-				false, // sendEmail
-				serviceContext // serviceContext
-			);
-
-			if (_log.isDebugEnabled()) {
-				_log.debug("user <" + user.getScreenName() + ">");
-				_log.debug(user.toString());
-				_log.debug("----------");
-			}
-
-			// Set site roles
-			setSiteRoles(user.getUserId(), groupIds, roleIds);
-
-			// Set org roles
-			setOrgRoles(user.getUserId(), organizationIds, roleIds);
-
-		}
-		catch (UserScreenNameException e) {
-			_log.error("User is duplicated. Skip : " + e.getMessage());
-		}
-
-		return user;
-	}
-
-	/**
-	 * Get Faker available locales Filter Faker available locales based on
-	 * Liferay available locales.
-	 * 
-	 * @param locales
-	 * @return Faker available locales based on Liferay available locales.
-	 */
-	public List<Locale> getFakerAvailableLocales(Set<Locale> locales) {
-
-		List<String> fakerList = new ArrayList<>(
-			Arrays.asList(
-				"bg", "ca", "ca-CAT", "da-DK", "de", "de-AT", "de-CH", "en",
-				"en-AU", "en-au-ocker", "en-BORK", "en-CA", "en-GB", "en-IND",
-				"en-NEP", "en-NG", "en-NZ", "en-PAK", "en-SG", "en-UG", "en-US",
-				"en-ZA", "es", "es-MX", "fa", "fi-FI", "fr", "he", "in-ID",
-				"it", "ja", "ko", "nb-NO", "nl", "pl", "pt", "pt-BR", "ru",
-				"sk", "sv", "sv-SE", "tr", "uk", "vi", "zh-CN", "zh-TW"));
-		return locales.stream().filter(
-			locale -> fakerList.contains(locale.getLanguage())).collect(
-				Collectors.toList());
-	}
-
-	/**
-	 * Fetch regular roles
-	 * 
-	 * @param roleIds
-	 * @return
-	 * @throws PortalException
-	 */
-	public long[] getRegularRoleIds(long[] roleIds)
-		throws PortalException {
-
-		Map<Integer, List<Role>> roles = _commonUtil.filterRoles(roleIds);
-		List<Role> regularRoles = roles.get(RoleConstants.TYPE_REGULAR);
-
-		if (Validator.isNull(regularRoles) || regularRoles.size() == 0) {
-			return null;
-		}
-
-		if (_log.isDebugEnabled()) {
-			String regularids = regularRoles.stream().map(
-				r -> String.valueOf(r.getRoleId())).collect(
-					Collectors.joining(","));
-			_log.debug("Regular ids : " + regularids);
-		}
-
-		return regularRoles.stream().mapToLong(Role::getRoleId).toArray();
-	}
-
-	/**
-	 * Set org roles Filtering only organization roles out from role ids and
-	 * asign organization roles to a user.
-	 * 
-	 * @param userId
-	 * @param organizationIds
-	 * @param roleIds
-	 * @throws PortalException
-	 */
-	public void setOrgRoles(long userId, long[] organizationIds, long[] roleIds)
-		throws PortalException {
-
-		Map<Integer, List<Role>> roles = _commonUtil.filterRoles(roleIds);
-		List<Role> orgRoles = roles.get(RoleConstants.TYPE_ORGANIZATION);
-
-		if (Validator.isNull(orgRoles) || orgRoles.size() == 0) {
-			return;
-		}
-
-		long[] orgIds = orgRoles.stream().mapToLong(Role::getRoleId).toArray();
-
-		if (_log.isDebugEnabled()) {
-			String orgids = orgRoles.stream().map(
-				o -> String.valueOf(o.getPrimaryKey())).collect(
-					Collectors.joining(","));
-			_log.debug("Organization ids : " + orgids);
-		}
-
-		if (0 == orgIds.length) {
-			_log.debug("Organization didn't exist in the ids. exit");
-			return;
-		}
-
-		List<Organization> orgs =
-			_organizationLocalService.getOrganizations(organizationIds);
-		long[] orgGroupdIds =
-			orgs.stream().mapToLong(Organization::getGroupId).toArray();
-
-		for (long orgGroupdId : orgGroupdIds) {
-			_userGroupRoleLocalService.addUserGroupRoles(
-				userId, orgGroupdId, orgIds);
-		}
-	}
-
-	/**
-	 * Set site roles Filtering only site roles out from role ids and asign site
-	 * roles to a user.
-	 * 
-	 * @param userId
-	 * @param groupIds
-	 * @param roleIds
-	 * @throws PortalException
-	 */
-	public void setSiteRoles(long userId, long[] groupIds, long[] roleIds)
-		throws PortalException {
-
-		Map<Integer, List<Role>> roles = _commonUtil.filterRoles(roleIds);
-		List<Role> siteRoles = roles.get(RoleConstants.TYPE_SITE);
-
-		if (Validator.isNull(siteRoles) || siteRoles.size() == 0) {
-			return;
-		}
-
-		long[] siteIds =
-			siteRoles.stream().mapToLong(Role::getRoleId).toArray();
-
-		if (_log.isDebugEnabled()) {
-			String siteids = siteRoles.stream().map(
-				s -> String.valueOf(s.getRoleId())).collect(
-					Collectors.joining(","));
-			_log.debug("Site ids : " + siteids);
-		}
-
-		if (0 == siteIds.length) {
-			_log.debug("Site roles didn't exist in the ids. exit");
-			return;
-		}
-
-		for (long groupId : groupIds) {
-			_userGroupRoleLocalService.addUserGroupRoles(
-				userId, groupId, siteIds);
-		}
-	}
-
-	/**
-	 * Update Announcements Deliveries
-	 * 
-	 * @param userId
-	 * @param announcementsDeliveries
-	 * @throws PortalException
-	 */
-	public void updateAnnouncementsDeliveries(
-		long userId, List<AnnouncementsDelivery> announcementsDeliveries)
-		throws PortalException {
-
-		for (AnnouncementsDelivery announcementsDelivery : announcementsDeliveries) {
-
-			_announcementsDeliveryLocalService.updateDelivery(
-				userId, announcementsDelivery.getType(),
-				announcementsDelivery.isEmail(), announcementsDelivery.isSms());
-		}
-	}
-
-	@Reference
-	private AnnouncementsDeliveryLocalService _announcementsDeliveryLocalService;
-
-	@Reference
-	private UserLocalService _userLocalService;
-
-	@Reference
-	private UserGroupRoleLocalService _userGroupRoleLocalService;
-
-	@Reference
-	private CommonUtil _commonUtil;
-
-	@Reference
-	private RoleLocalService _roleLocalService;
-
-	@Reference
-	private OrganizationLocalService _organizationLocalService;
-
-	private static final Log _log =
-		LogFactoryUtil.getLog(UserDataService.class);
+    /**
+     * Create User data
+     *
+     * @param serviceContext
+     * @param organizationIds
+     * @param groupIds
+     * @param roleIds
+     * @param userGroupIds
+     * @param male
+     * @param fakerEnable
+     * @param password
+     * @param screenName
+     * @param emailAddress
+     * @param baseScreenName
+     * @param index
+     * @param localeStr
+     * @throws PortalException
+     */
+    public User createUserData(
+        ServiceContext serviceContext, long[] organizationIds, long[] groupIds,
+        long[] roleIds, long[] userGroupIds, boolean male, boolean fakerEnable,
+        String password, String screenName, String emailAddress,
+        String baseScreenName, long index, String localeStr)
+        throws PortalException {
+
+        // For generating dummy user name
+        Faker faker = _commonUtil.createFaker(localeStr);
+
+        // Generate first / last name
+        String firstName =
+            (fakerEnable) ? faker.name().firstName() : baseScreenName;
+        String lastName =
+            (fakerEnable) ? faker.name().lastName() : String.valueOf(index);
+
+        User user = null;
+
+        try {
+            // Create User
+            user = _userLocalService.addUserWithWorkflow(
+                serviceContext.getUserId(), serviceContext.getCompanyId(), // companyId,
+                false, // autoPassword,
+                password, // password1,
+                password, // password2,
+                false, // autoScreenName,
+                screenName.toString(),
+                emailAddress.toString(),
+                LocaleUtil.getDefault(), // locale,
+                firstName, // firstName,
+                StringPool.BLANK, // middleName,
+                lastName, // lastName,
+                0, // prefixId,
+                0, // suffixId,
+                male, // male
+                1, // birthdayMonth,
+                1, // birthdayDay,
+                1970, // birthdayYear,
+                StringPool.BLANK, // jobTitle,
+                groupIds, organizationIds, getRegularRoleIds(roleIds), // this is only for the regular roles
+                userGroupIds, // userGroupIds,
+                false, // sendEmail
+                serviceContext // serviceContext
+            );
+
+            if (_log.isDebugEnabled()) {
+                _log.debug("user <" + user.getScreenName() + ">");
+                _log.debug(user.toString());
+                _log.debug("----------");
+            }
+
+            // Set site roles
+            setSiteRoles(user.getUserId(), groupIds, roleIds);
+
+            // Set org roles
+            setOrgRoles(user.getUserId(), organizationIds, roleIds);
+
+        } catch (UserScreenNameException e) {
+            _log.error("User is duplicated. Skip : " + e.getMessage());
+        }
+
+        return user;
+    }
+
+    /**
+     * Get Faker available locales Filter Faker available locales based on
+     * Liferay available locales.
+     *
+     * @param locales
+     * @return Faker available locales based on Liferay available locales.
+     */
+    public List<Locale> getFakerAvailableLocales(Set<Locale> locales) {
+
+        List<String> fakerList = new ArrayList<>(
+            Arrays.asList(
+                "bg", "ca", "ca-CAT", "da-DK", "de", "de-AT", "de-CH", "en",
+                "en-AU", "en-au-ocker", "en-BORK", "en-CA", "en-GB", "en-IND",
+                "en-NEP", "en-NG", "en-NZ", "en-PAK", "en-SG", "en-UG", "en-US",
+                "en-ZA", "es", "es-MX", "fa", "fi-FI", "fr", "he", "in-ID",
+                "it", "ja", "ko", "nb-NO", "nl", "pl", "pt", "pt-BR", "ru",
+                "sk", "sv", "sv-SE", "tr", "uk", "vi", "zh-CN", "zh-TW"));
+        return locales.stream().filter(
+            locale -> fakerList.contains(locale.getLanguage())).collect(
+            Collectors.toList());
+    }
+
+    /**
+     * Fetch regular roles
+     *
+     * @param roleIds
+     * @return
+     * @throws PortalException
+     */
+    public long[] getRegularRoleIds(long[] roleIds)
+        throws PortalException {
+
+        Map<Integer, List<Role>> roles = _commonUtil.filterRoles(roleIds);
+        List<Role> regularRoles = roles.get(RoleConstants.TYPE_REGULAR);
+
+        if (Validator.isNull(regularRoles) || regularRoles.size() == 0) {
+            return null;
+        }
+
+        if (_log.isDebugEnabled()) {
+            String regularids = regularRoles.stream().map(
+                r -> String.valueOf(r.getRoleId())).collect(
+                Collectors.joining(","));
+            _log.debug("Regular ids : " + regularids);
+        }
+
+        return regularRoles.stream().mapToLong(Role::getRoleId).toArray();
+    }
+
+    /**
+     * Set org roles Filtering only organization roles out from role ids and
+     * asign organization roles to a user.
+     *
+     * @param userId
+     * @param organizationIds
+     * @param roleIds
+     * @throws PortalException
+     */
+    public void setOrgRoles(long userId, long[] organizationIds, long[] roleIds)
+        throws PortalException {
+
+        Map<Integer, List<Role>> roles = _commonUtil.filterRoles(roleIds);
+        List<Role> orgRoles = roles.get(RoleConstants.TYPE_ORGANIZATION);
+
+        if (Validator.isNull(orgRoles) || orgRoles.size() == 0) {
+            return;
+        }
+
+        long[] orgIds = orgRoles.stream().mapToLong(Role::getRoleId).toArray();
+
+        if (_log.isDebugEnabled()) {
+            String orgids = orgRoles.stream().map(
+                o -> String.valueOf(o.getPrimaryKey())).collect(
+                Collectors.joining(","));
+            _log.debug("Organization ids : " + orgids);
+        }
+
+        if (0 == orgIds.length) {
+            _log.debug("Organization didn't exist in the ids. exit");
+            return;
+        }
+
+        List<Organization> orgs =
+            _organizationLocalService.getOrganizations(organizationIds);
+        long[] orgGroupdIds =
+            orgs.stream().mapToLong(Organization::getGroupId).toArray();
+
+        for (long orgGroupdId : orgGroupdIds) {
+            _userGroupRoleLocalService.addUserGroupRoles(
+                userId, orgGroupdId, orgIds);
+        }
+    }
+
+    /**
+     * Set site roles Filtering only site roles out from role ids and asign site
+     * roles to a user.
+     *
+     * @param userId
+     * @param groupIds
+     * @param roleIds
+     * @throws PortalException
+     */
+    public void setSiteRoles(long userId, long[] groupIds, long[] roleIds)
+        throws PortalException {
+
+        Map<Integer, List<Role>> roles = _commonUtil.filterRoles(roleIds);
+        List<Role> siteRoles = roles.get(RoleConstants.TYPE_SITE);
+
+        if (Validator.isNull(siteRoles) || siteRoles.size() == 0) {
+            return;
+        }
+
+        long[] siteIds =
+            siteRoles.stream().mapToLong(Role::getRoleId).toArray();
+
+        if (_log.isDebugEnabled()) {
+            String siteids = siteRoles.stream().map(
+                s -> String.valueOf(s.getRoleId())).collect(
+                Collectors.joining(","));
+            _log.debug("Site ids : " + siteids);
+        }
+
+        if (0 == siteIds.length) {
+            _log.debug("Site roles didn't exist in the ids. exit");
+            return;
+        }
+
+        for (long groupId : groupIds) {
+            _userGroupRoleLocalService.addUserGroupRoles(
+                userId, groupId, siteIds);
+        }
+    }
+
+    /**
+     * Update Announcements Deliveries
+     *
+     * @param userId
+     * @param announcementsDeliveries
+     * @throws PortalException
+     */
+    public void updateAnnouncementsDeliveries(
+        long userId, List<AnnouncementsDelivery> announcementsDeliveries)
+        throws PortalException {
+
+        for (AnnouncementsDelivery announcementsDelivery : announcementsDeliveries) {
+
+            _announcementsDeliveryLocalService.updateDelivery(
+                userId, announcementsDelivery.getType(),
+                announcementsDelivery.isEmail(), announcementsDelivery.isSms());
+        }
+    }
+
+    @Reference
+    private AnnouncementsDeliveryLocalService _announcementsDeliveryLocalService;
+
+    @Reference
+    private UserLocalService _userLocalService;
+
+    @Reference
+    private UserGroupRoleLocalService _userGroupRoleLocalService;
+
+    @Reference
+    private CommonUtil _commonUtil;
+
+    @Reference
+    private RoleLocalService _roleLocalService;
+
+    @Reference
+    private OrganizationLocalService _organizationLocalService;
+
+    private static final Log _log =
+        LogFactoryUtil.getLog(UserDataService.class);
 }
diff --git a/src/main/java/com/liferay/support/tools/user/UserLayoutUtil.java b/src/main/java/com/liferay/support/tools/user/UserLayoutUtil.java
index b37f20b..fc3d6d6 100644
--- a/src/main/java/com/liferay/support/tools/user/UserLayoutUtil.java
+++ b/src/main/java/com/liferay/support/tools/user/UserLayoutUtil.java
@@ -1,6 +1,6 @@
 package com.liferay.support.tools.user;
 
-import com.liferay.exportimport.kernel.configuration.ExportImportConfigurationConstants;
+import com.liferay.exportimport.kernel.configuration.constants.ExportImportConfigurationConstants;
 import com.liferay.exportimport.kernel.configuration.ExportImportConfigurationSettingsMapFactoryUtil;
 import com.liferay.exportimport.kernel.lar.PortletDataHandlerKeys;
 import com.liferay.exportimport.kernel.model.ExportImportConfiguration;
diff --git a/src/main/resources/META-INF/resources/user/announcements.jsp b/src/main/resources/META-INF/resources/user/announcements.jsp
index 5ce32c6..e49fa58 100644
--- a/src/main/resources/META-INF/resources/user/announcements.jsp
+++ b/src/main/resources/META-INF/resources/user/announcements.jsp
@@ -1,4 +1,10 @@
-<%--
+<%@ page import="com.liferay.announcements.kernel.model.AnnouncementsDelivery" %>
+<%@ page import="com.liferay.announcements.kernel.model.AnnouncementsEntryConstants" %>
+<%@ page import="java.util.ArrayList" %>
+<%@ page import="com.liferay.announcements.kernel.service.AnnouncementsDeliveryLocalServiceUtil" %>
+<%@ page import="java.util.List" %>
+<%@ page import="com.liferay.portal.kernel.language.LanguageUtil" %>
+<%@ page import="com.liferay.counter.kernel.service.CounterLocalServiceUtil" %>
 /**
  * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
  *
@@ -18,7 +24,9 @@
 List<AnnouncementsDelivery> deliveries = new ArrayList<AnnouncementsDelivery>(AnnouncementsEntryConstants.TYPES.length);
 
 for (String type : AnnouncementsEntryConstants.TYPES) {
-	AnnouncementsDelivery delivery = new AnnouncementsDeliveryImpl();
+	long deliveryId = CounterLocalServiceUtil.increment();
+	AnnouncementsDelivery delivery =
+			AnnouncementsDeliveryLocalServiceUtil.createAnnouncementsDelivery(deliveryId);
 
 	delivery.setType(type);
 	delivery.setWebsite(true);