diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ModuleBuilderTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ModuleBuilderTests.java
index 4b3281c..7f0429d 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ModuleBuilderTests.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ModuleBuilderTests.java
@@ -31,7 +31,6 @@
 import org.eclipse.core.runtime.Path;
 import org.eclipse.jdt.core.IClasspathEntry;
 import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IModuleDescription;
 import org.eclipse.jdt.core.IPackageFragmentRoot;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
@@ -46,7 +45,7 @@
 	}
 
 	static {
-//		 TESTS_NAMES = new String[] { "test_ModuleSourcePathContainer" };
+//		 TESTS_NAMES = new String[] { "testConvertToModule" };
 	}
 	private static boolean isJRE9 = false;
 	public static Test suite() {
@@ -63,7 +62,7 @@
 
 	public void setUpSuite() throws Exception {
 		super.setUpSuite();
-		System.setProperty("modules.to.load", "java.baserequires java.desktop;java.rmi;java.sql;");
+		System.setProperty("modules.to.load", "java.base,java.desktop;java.rmi;java.sql;");
 		this.currentProject = createJava9Project("P1");
 		this.createFile("P1/src/module-info.java", "");
 		this.createFolder("P1/src/com/greetings");
@@ -690,19 +689,27 @@
 				}
 			}
 			assertNotNull("should not be null", theRoot);
-			IModuleDescription mod = JavaCore.createModuleFromPackageRoot(null, project);
-			assertEquals("incorrect value", "ConvertToModule", mod.getElementName());
-			IModuleDescription.IPackageExport[] exports = mod.getExportedPackages();
-			assertEquals("incorrect value", 2, exports.length);
-			assertEquals("incorrect value", "org.eclipse.jdt.test", exports[0].getPackageName());
-			assertEquals("incorrect value", "org.eclipse.test", exports[1].getPackageName());
-			
-			IModuleDescription.IModuleReference[] mods = mod.getRequiredModules();
-			assertEquals("incorrect value", 4, mods.length);
-			assertEquals("incorrect value", "java.base", mods[0].getModuleName());
-			assertEquals("incorrect value", "java.desktop", mods[1].getModuleName());
-			assertEquals("incorrect value", "java.rmi", mods[2].getModuleName());
-			assertEquals("incorrect value", "java.sql", mods[3].getModuleName());
+			String mod = JavaCore.createModuleFromPackageRoot(null, theRoot);
+			String lineDelimiter = System.getProperty("line.separator", "\n");
+			assertEquals("module-info is incorrect", 
+					"module ConvertToModule {" + lineDelimiter + "" +
+					"	exports org.eclipse.jdt.test;" + lineDelimiter +
+					"	exports org.eclipse.test;" + lineDelimiter + lineDelimiter +
+					"	requires java.base;" + lineDelimiter +
+					"	requires java.desktop;" + lineDelimiter +
+					"	requires java.rmi;" + lineDelimiter +
+					"	requires java.sql;" + lineDelimiter + lineDelimiter +
+					"}" ,mod);
+			mod = JavaCore.createModuleFromPackageRoot("my.module", theRoot);
+			assertEquals("module-info is incorrect", 
+					"module my.module {" + lineDelimiter +
+					"	exports org.eclipse.jdt.test;" + lineDelimiter +
+					"	exports org.eclipse.test;" + lineDelimiter + lineDelimiter +
+					"	requires java.base;" + lineDelimiter +
+					"	requires java.desktop;" + lineDelimiter +
+					"	requires java.rmi;" + lineDelimiter +
+					"	requires java.sql;" + lineDelimiter + lineDelimiter +
+					"}" ,mod);
 
 		} finally {
 			this.deleteProject("ConvertToModule");
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java
index 788ef50..d06ebc6 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java
@@ -5825,24 +5825,25 @@
 		return Long.compare(CompilerOptions.versionToJdkLevel(first), CompilerOptions.versionToJdkLevel(second));
 	}
 	/**
-	 * Creates a {@link IModuleDescription} for the given Java project and with the given 
-	 * name. The module name is optional and a null argument can be passed to indicate that the
-	 * project's name to be used as the module name.
+	 * Creates a corresponding module-info as a String for the given source package fragment root and with
+	 * the given name. The module name is optional and a null argument can be passed to indicate that the
+	 * package fragment root's element name to be used as the module name.
 	 *
-	 * This is a utility method and computes the module description by looking at the source files inside
-	 * the project and which modules within the project's build path are needed in order to 
-	 * successfully compile the source files.
+	 * This is a utility method and computes a module configuration by looking at the source files inside
+	 * the package fragment root and what modules within the project's build path are needed in order to 
+	 * successfully compile the source files. For non-source package fragment roots
+	 * (i.e., {@link IPackageFragmentRoot#isArchive()} returns true), this method returns null.
 	 *
-	 * Note this is a long-running operation and it is recommended that clients run this in a background thread.
+	 * Note this is a long-running operation and it is preferable that clients run this in a background thread.
 	 *
 	 * @param moduleName name to be used for the new module. A null indicates that the package fragment root element's name to be used
-	 * @param project the Java project for which the module is sought
-	 * @return the module-info content as a {@link IModuleDescription}
+	 * @param root the package fragment root for which the module is sought
+	 * @return the module-info content as a String
 	 * @throws CoreException
 	 * @since 3.13 BETA_JAVA9
 	 */
-	public static IModuleDescription createModuleFromPackageRoot(String moduleName, IJavaProject project) throws CoreException {
-		return ModuleUtil.createModuleFromPackageRoot(moduleName, project);
+	public static String createModuleFromPackageRoot(String moduleName, IPackageFragmentRoot root) throws CoreException {
+		return ModuleUtil.createModuleFromPackageRoot(moduleName, root);
 	}
 
 	/* (non-Javadoc)
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/ModuleUtil.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/ModuleUtil.java
index ded3e91..2547671 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/ModuleUtil.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/ModuleUtil.java
@@ -55,6 +55,22 @@
 
 public class ModuleUtil {
 
+	public static String createModuleFromPackageRoot(String moduleName, IPackageFragmentRoot root) throws CoreException {
+		IJavaProject project = root.getJavaProject();
+		String lineDelimiter = null;
+		if (project != null) {
+			IScopeContext[] scopeContext;
+			// project preference
+			scopeContext = new IScopeContext[] { new ProjectScope(project.getProject()) };
+			lineDelimiter = Platform.getPreferencesService().getString(Platform.PI_RUNTIME, Platform.PREF_LINE_SEPARATOR, null, scopeContext);
+		}
+		if (lineDelimiter == null) {
+			lineDelimiter = System.getProperty("line.separator", "\n"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		LocalModuleImpl module = (LocalModuleImpl) createModuleFromPackageFragmentRoot(moduleName, project);
+		return module.toString(lineDelimiter);
+	}
+
 	public static IModuleDescription createModuleFromPackageRoot(String moduleName, IJavaProject root) throws CoreException {
 		return createModuleFromPackageFragmentRoot(moduleName, root.getJavaProject());
 	}
@@ -123,16 +139,7 @@
 		return newCompiler;
 	}
 	private static IModuleDescription createModuleFromPackageFragmentRoot(String moduleName, IJavaProject project) throws CoreException {
-		String lineDelimiter = null;
-		if (project != null) {
-			IScopeContext[] scopeContext;
-			// project preference
-			scopeContext = new IScopeContext[] { new ProjectScope(project.getProject()) };
-			lineDelimiter = Platform.getPreferencesService().getString(Platform.PI_RUNTIME, Platform.PREF_LINE_SEPARATOR, null, scopeContext);
-		}
-		if (lineDelimiter == null) {
-			lineDelimiter = System.getProperty("line.separator", "\n"); //$NON-NLS-1$ //$NON-NLS-2$
-		}
+
 		ModuleAccumulatorEnvironment environment = new ModuleAccumulatorEnvironment(project);
 		Compiler compiler = newCompiler(environment, project);
 		LocalModuleImpl module = new LocalModuleImpl(moduleName == null ? project.getElementName() : moduleName);
