diff --git a/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/Generator.java b/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/Generator.java
index eee719a..6acfb2f 100644
--- a/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/Generator.java
+++ b/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/Generator.java
@@ -34,10 +34,10 @@
 import java.util.logging.Logger;
 
 import org.glassfish.pfl.dynamic.codegen.impl.ClassGeneratorImpl;
-import org.glassfish.pfl.dynamic.codegen.impl.CodeGenerator;
 import org.glassfish.pfl.dynamic.codegen.spi.ImportList;
 import org.glassfish.pfl.dynamic.codegen.spi.Wrapper;
 
+import static org.glassfish.pfl.dynamic.codegen.impl.CodeGenerator.generateBytecode;
 import static org.glassfish.pfl.dynamic.codegen.spi.Wrapper.DUMP_AFTER_SETUP_VISITOR;
 import static org.glassfish.pfl.dynamic.codegen.spi.Wrapper.TRACE_BYTE_CODE_GENERATION;
 import static org.glassfish.pfl.dynamic.codegen.spi.Wrapper.USE_ASM_VERIFIER;
@@ -61,6 +61,9 @@
         this.loader = Objects.requireNonNull(loader);
     }
 
+    /**
+     * @return the name of the package of the generated class. Can be null.
+     */
     protected abstract String getPackageName();
 
     /**
@@ -79,7 +82,7 @@
      * always call {@link Wrapper#_clear()} in finally block after generation
      * to avoid leakages.
      */
-    protected abstract void evaluate();
+    protected abstract void defineClassBody();
 
 
     /**
@@ -90,6 +93,16 @@
     }
 
 
+    /**
+     * Generates the bytecode of the configured class with the usage of the PFL tool.
+     * Then uses {@link MethodHandles} or {@link ClassGenerator} to generate the class.
+     * <p>
+     * WARNING: This selection depends on the classloader capabilities and JVM rules,
+     * which change between JDK versions.
+     *
+     * @return {@link Class}
+     * @throws IllegalAccessException
+     */
     public Class<?> generate() throws IllegalAccessException {
         if (getPackageName() == null) {
             _package();
@@ -97,7 +110,7 @@
             _package(getPackageName());
         }
         final ImportList imports = Wrapper._import();
-        evaluate();
+        defineClassBody();
         final Properties props = new Properties();
         if (LOG.isLoggable(Level.FINEST)) {
             props.put(DUMP_AFTER_SETUP_VISITOR, "true");
@@ -114,7 +127,7 @@
         }
 
         final ClassGeneratorImpl codeGenerator = (ClassGeneratorImpl) _classGenerator();
-        final byte[] bytecode = CodeGenerator.generateBytecode(codeGenerator, getClassLoader(), imports, props, System.out);
+        final byte[] bytecode = generateBytecode(codeGenerator, getClassLoader(), imports, props, System.out);
 
         if (useMethodHandles()) {
             LOG.log(Level.FINEST, "Using MethodHandles to define {0}, anchorClass: {1}",
@@ -123,8 +136,6 @@
             return lookup.defineClass(bytecode);
         }
 
-        LOG.log(Level.FINEST, "Using ClassGenerator to define {0}, loader: {1}",
-            new Object[] {getGeneratedClassName(), getClassLoader()});
         if (System.getSecurityManager() == null) {
             return ClassGenerator.defineClass(getClassLoader(), getGeneratedClassName(), bytecode,
                 getAnchorClass().getProtectionDomain());
@@ -134,6 +145,7 @@
         return AccessController.doPrivileged(action);
     }
 
+
     private boolean useMethodHandles() {
         // The bootstrap CL used by embedded glassfish doesn't remember generated classes
         // Further ClassLoader.findClass calls will fail.
diff --git a/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/GenericHomeGenerator.java b/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/GenericHomeGenerator.java
index 7321ede..2da65d5 100644
--- a/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/GenericHomeGenerator.java
+++ b/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/GenericHomeGenerator.java
@@ -76,7 +76,7 @@
 
 
     @Override
-    public void evaluate() {
+    public void defineClassBody() {
         _interface(PUBLIC, GENERIC_HOME_CLASSNAME, _t(GenericEJBHome.class.getName()));
         _method(PUBLIC | ABSTRACT, _t(Remote.class.getName()), "create", _t(RemoteException.class.getName()));
         _arg(_String(), "generatedBusinessIntf");
diff --git a/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/Remote30WrapperGenerator.java b/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/Remote30WrapperGenerator.java
index 2c3dae7..f84f935 100644
--- a/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/Remote30WrapperGenerator.java
+++ b/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/Remote30WrapperGenerator.java
@@ -129,7 +129,7 @@
     }
 
     @Override
-    public void evaluate() {
+    public void defineClassBody() {
         _class(PUBLIC, remoteClientSimpleName,
                _t(RemoteBusinessWrapperBase.class.getName()),
                _t(businessInterface.getName()));
diff --git a/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/RemoteGenerator.java b/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/RemoteGenerator.java
index 3a7f5d2..942c560 100644
--- a/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/RemoteGenerator.java
+++ b/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/RemoteGenerator.java
@@ -113,7 +113,7 @@
     }
 
     @Override
-    public void evaluate() {
+    public void defineClassBody() {
         _interface(PUBLIC, remoteInterfaceSimpleName,
             _t(java.rmi.Remote.class.getName()),
             _t(RemoteBusinessObject.class.getName())
diff --git a/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/ServiceInterfaceGenerator.java b/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/ServiceInterfaceGenerator.java
index 046a269..ed38f43 100644
--- a/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/ServiceInterfaceGenerator.java
+++ b/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/ServiceInterfaceGenerator.java
@@ -94,7 +94,7 @@
 
 
     @Override
-    public void evaluate() {
+    public void defineClassBody() {
         _interface(PUBLIC, serviceIntfSimpleName);
 
         for (Method intfMethod : intfMethods) {
