diff --git a/arthur-impl/src/main/java/org/apache/geronimo/arthur/impl/nativeimage/ArthurNativeImageExecutor.java b/arthur-impl/src/main/java/org/apache/geronimo/arthur/impl/nativeimage/ArthurNativeImageExecutor.java
index af29f71..2826c0a 100644
--- a/arthur-impl/src/main/java/org/apache/geronimo/arthur/impl/nativeimage/ArthurNativeImageExecutor.java
+++ b/arthur-impl/src/main/java/org/apache/geronimo/arthur/impl/nativeimage/ArthurNativeImageExecutor.java
@@ -16,10 +16,17 @@
  */
 package org.apache.geronimo.arthur.impl.nativeimage;
 
-import static java.util.Optional.ofNullable;
+import lombok.Builder;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.geronimo.arthur.impl.nativeimage.generator.ConfigurationGenerator;
+import org.apache.geronimo.arthur.impl.nativeimage.graal.CommandGenerator;
+import org.apache.geronimo.arthur.impl.nativeimage.process.ProcessExecutor;
+import org.apache.geronimo.arthur.spi.ArthurExtension;
 
 import java.io.Writer;
 import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.nio.file.Path;
 import java.util.Collection;
@@ -29,14 +36,7 @@
 import java.util.function.BiConsumer;
 import java.util.function.Function;
 
-import org.apache.geronimo.arthur.impl.nativeimage.generator.ConfigurationGenerator;
-import org.apache.geronimo.arthur.impl.nativeimage.graal.CommandGenerator;
-import org.apache.geronimo.arthur.impl.nativeimage.process.ProcessExecutor;
-import org.apache.geronimo.arthur.spi.ArthurExtension;
-
-import lombok.Builder;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
+import static java.util.Optional.ofNullable;
 
 @Slf4j
 @RequiredArgsConstructor
@@ -48,7 +48,8 @@
         final ConfigurationGenerator configurationGenerator = new ConfigurationGenerator(
                 loadExtensions(),
                 configuration.configuration, configuration.workingDirectory, configuration.jsonSerializer,
-                configuration.annotatedClassFinder, configuration.annotatedMethodFinder, configuration.implementationFinder,
+                configuration.annotatedClassFinder, configuration.annotatedFieldFinder,
+                configuration.annotatedMethodFinder, configuration.implementationFinder,
                 configuration.extensionProperties);
         configurationGenerator.run();
 
@@ -72,6 +73,7 @@
         private final Path workingDirectory;
         private final Function<Class<? extends Annotation>, Collection<Class<?>>> annotatedClassFinder;
         private final Function<Class<? extends Annotation>, Collection<Method>> annotatedMethodFinder;
+        private final Function<Class<? extends Annotation>, Collection<Field>> annotatedFieldFinder;
         private final Function<Class<?>, Collection<Class<?>>> implementationFinder;
         private final ArthurNativeImageConfiguration configuration;
         private final Map<String, String> extensionProperties;
diff --git a/arthur-impl/src/main/java/org/apache/geronimo/arthur/impl/nativeimage/generator/ConfigurationGenerator.java b/arthur-impl/src/main/java/org/apache/geronimo/arthur/impl/nativeimage/generator/ConfigurationGenerator.java
index c8a6b3f..a51903a 100644
--- a/arthur-impl/src/main/java/org/apache/geronimo/arthur/impl/nativeimage/generator/ConfigurationGenerator.java
+++ b/arthur-impl/src/main/java/org/apache/geronimo/arthur/impl/nativeimage/generator/ConfigurationGenerator.java
@@ -27,6 +27,7 @@
 import java.io.IOException;
 import java.io.Writer;
 import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.nio.file.Files;
 import java.nio.file.Path;
@@ -59,11 +60,13 @@
     private final Function<Class<? extends Annotation>, Collection<Class<?>>> classFinder;
     private final Function<Class<?>, Collection<Class<?>>> implementationFinder;
     private final Function<Class<? extends Annotation>, Collection<Method>> methodFinder;
+    private final Function<Class<? extends Annotation>, Collection<Field>> fieldFinder;
     private final Map<String, String> extensionProperties;
 
     public ConfigurationGenerator(final Iterable<ArthurExtension> extensions, final ArthurNativeImageConfiguration configuration,
                                   final Path workingDirectory, final BiConsumer<Object, Writer> jsonSerializer,
                                   final Function<Class<? extends Annotation>, Collection<Class<?>>> classFinder,
+                                  final Function<Class<? extends Annotation>, Collection<Field>> fieldFinder,
                                   final Function<Class<? extends Annotation>, Collection<Method>> methodFinder,
                                   final Function<Class<?>, Collection<Class<?>>> implementationFinder,
                                   final Map<String, String> extensionProperties) {
@@ -72,6 +75,7 @@
         this.workingDirectory = workingDirectory;
         this.jsonSerializer = jsonSerializer;
         this.classFinder = classFinder;
+        this.fieldFinder = fieldFinder;
         this.methodFinder = methodFinder;
         this.implementationFinder = implementationFinder;
         this.extensionProperties = extensionProperties;
@@ -83,7 +87,7 @@
         final HashMap<String, String> properties = ofNullable(this.extensionProperties).map(HashMap::new).orElseGet(HashMap::new);
         properties.put("workingDirectory", workingDirectory.toAbsolutePath().toString());
 
-        final DefautContext context = new DefautContext(configuration, classFinder, methodFinder, implementationFinder, properties);
+        final DefautContext context = new DefautContext(configuration, classFinder, methodFinder, fieldFinder, implementationFinder, properties);
         for (final ArthurExtension extension : extensions) {
             log.debug("Executing {}", extension);
             context.setModified(false);
diff --git a/arthur-impl/src/main/java/org/apache/geronimo/arthur/impl/nativeimage/generator/DefautContext.java b/arthur-impl/src/main/java/org/apache/geronimo/arthur/impl/nativeimage/generator/DefautContext.java
index 01dc457..8e7b44c 100644
--- a/arthur-impl/src/main/java/org/apache/geronimo/arthur/impl/nativeimage/generator/DefautContext.java
+++ b/arthur-impl/src/main/java/org/apache/geronimo/arthur/impl/nativeimage/generator/DefautContext.java
@@ -16,12 +16,12 @@
  */
 package org.apache.geronimo.arthur.impl.nativeimage.generator;
 
-import static java.util.Arrays.asList;
 import static java.util.Optional.of;
 import static java.util.Optional.ofNullable;
 import static java.util.stream.Collectors.toList;
 
 import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -49,6 +49,7 @@
     private final ArthurNativeImageConfiguration configuration;
     private final Function<Class<? extends Annotation>, Collection<Class<?>>> annotatedClassesFinder;
     private final Function<Class<? extends Annotation>, Collection<Method>> methodFinder;
+    private final Function<Class<? extends Annotation>, Collection<Field>> fieldFinder;
     private final Function<Class<?>, Collection<Class<?>>> implementationFinder;
     private final Collection<ClassReflectionModel> reflections = new HashSet<>();
     private final Collection<ResourceModel> resources = new HashSet<>();
@@ -69,6 +70,11 @@
     }
 
     @Override
+    public <T extends Annotation> Collection<Field> findAnnotatedFields(final Class<T> annotation) {
+        return fieldFinder.apply(annotation);
+    }
+
+    @Override
     public <T> Collection<Class<? extends T>> findImplementations(final Class<T> parent) {
         return Collection.class.cast(implementationFinder.apply(parent));
     }
@@ -127,7 +133,7 @@
 
     @Override
     public String getProperty(final String key) {
-        return extensionProperties.get(key);
+        return extensionProperties == null ? null : extensionProperties.get(key);
     }
 
     @Override
diff --git a/arthur-impl/src/main/java/org/apache/geronimo/arthur/impl/nativeimage/generator/extension/AnnotationExtension.java b/arthur-impl/src/main/java/org/apache/geronimo/arthur/impl/nativeimage/generator/extension/AnnotationExtension.java
index 2190de9..2d9c275 100644
--- a/arthur-impl/src/main/java/org/apache/geronimo/arthur/impl/nativeimage/generator/extension/AnnotationExtension.java
+++ b/arthur-impl/src/main/java/org/apache/geronimo/arthur/impl/nativeimage/generator/extension/AnnotationExtension.java
@@ -26,13 +26,18 @@
 import org.apache.geronimo.arthur.spi.model.ResourceBundleModel;
 import org.apache.geronimo.arthur.spi.model.ResourceModel;
 
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Stream;
 
 import static java.util.Arrays.asList;
 import static java.util.Optional.ofNullable;
 import static java.util.stream.Collectors.toList;
+import static java.util.stream.Collectors.toMap;
 
 public class AnnotationExtension implements ArthurExtension {
     @Override
@@ -42,6 +47,35 @@
 
     @Override
     public void execute(final Context context) {
+        ofNullable(context.getProperty("extension.annotation.custom.annotations.class"))
+                .ifPresent(names -> Stream.of(names.split(","))
+                        .map(String::trim)
+                        .filter(it -> !it.isEmpty())
+                        .forEach(config -> { // syntax is: <annotation fqn>:<RegisterClass method=true|false>, if only fqn then all=true is supposed
+                            final int sep = config.indexOf(':');
+                            final String fqn = sep < 0 ? config : config.substring(0, sep);
+                            final RegisterClass registerClass = newRegisterClass(sep < 0 ? "all=true" : config.substring(sep + 1));
+                            context.findAnnotatedClasses(context.loadClass(fqn.trim()).asSubclass(Annotation.class)).stream()
+                                    .flatMap(clazz -> register(clazz, registerClass))
+                                    .forEach(context::register);
+                        }));
+        ofNullable(context.getProperty("extension.annotation.custom.annotations.properties"))
+                .ifPresent(names -> Stream.of(names.split(","))
+                        .map(String::trim)
+                        .filter(it -> !it.isEmpty())
+                        .forEach(config -> { // syntax is: <annotation fqn>:<RegisterClass method=true|false>, if only fqn then all=true is supposed
+                            final int sep = config.indexOf(':');
+                            final String fqn = sep < 0 ? config : config.substring(0, sep);
+                            final RegisterClass registerClass = newRegisterClass(sep < 0 ? "all=true" : config.substring(sep + 1));
+                            final Class<? extends Annotation> annot = context.loadClass(fqn.trim()).asSubclass(Annotation.class);
+                            Stream.concat(
+                                    context.findAnnotatedMethods(annot).stream().map(Method::getDeclaringClass),
+                                    context.findAnnotatedFields(annot).stream().map(Field::getDeclaringClass))
+                                    .distinct()
+                                    .flatMap(clazz -> register(clazz, registerClass))
+                                    .forEach(context::register);
+                        }));
+
         context.findAnnotatedClasses(RegisterClass.class).stream()
                 .flatMap(clazz -> register(clazz, clazz.getAnnotation(RegisterClass.class)))
                 .forEach(context::register);
@@ -168,4 +202,62 @@
     public boolean equals(final Object obj) {
         return obj != null && AnnotationExtension.class == obj.getClass();
     }
+
+    private RegisterClass newRegisterClass(final String inlineConf) {
+        final Map<String, Boolean> confs = Stream.of(inlineConf.split("\\|"))
+                .map(it -> it.split("="))
+                .collect(toMap(it -> it[0], it -> it.length < 2 || Boolean.parseBoolean(it[1])));
+        return new RegisterClass() {
+
+            @Override
+            public Class<? extends Annotation> annotationType() {
+                return RegisterClass.class;
+            }
+
+            @Override
+            public boolean allDeclaredConstructors() {
+                return confs.getOrDefault("allDeclaredConstructors", false);
+            }
+
+            @Override
+            public boolean allPublicConstructors() {
+                return confs.getOrDefault("allPublicConstructors", false);
+            }
+
+            @Override
+            public boolean allDeclaredMethods() {
+                return confs.getOrDefault("allDeclaredMethods", false);
+            }
+
+            @Override
+            public boolean allPublicMethods() {
+                return confs.getOrDefault("allPublicMethods", false);
+            }
+
+            @Override
+            public boolean allDeclaredClasses() {
+                return confs.getOrDefault("allDeclaredClasses", false);
+            }
+
+            @Override
+            public boolean allPublicClasses() {
+                return confs.getOrDefault("allPublicClasses", false);
+            }
+
+            @Override
+            public boolean allDeclaredFields() {
+                return confs.getOrDefault("allDeclaredFields", false);
+            }
+
+            @Override
+            public boolean allPublicFields() {
+                return confs.getOrDefault("allPublicFields", false);
+            }
+
+            @Override
+            public boolean all() {
+                return confs.getOrDefault("all", false);
+            }
+        };
+    }
 }
diff --git a/arthur-impl/src/test/java/org/apache/geronimo/arthur/impl/nativeimage/CommandGeneratorTest.java b/arthur-impl/src/test/java/org/apache/geronimo/arthur/impl/nativeimage/CommandGeneratorTest.java
index fef9fdc..774f39d 100644
--- a/arthur-impl/src/test/java/org/apache/geronimo/arthur/impl/nativeimage/CommandGeneratorTest.java
+++ b/arthur-impl/src/test/java/org/apache/geronimo/arthur/impl/nativeimage/CommandGeneratorTest.java
@@ -16,12 +16,12 @@
  */
 package org.apache.geronimo.arthur.impl.nativeimage;
 
-import static java.util.Arrays.asList;
-import static java.util.Collections.emptyList;
-import static java.util.Collections.emptyMap;
-import static java.util.Collections.singletonList;
-import static org.junit.jupiter.api.Assertions.assertArrayEquals;
-import static org.junit.jupiter.api.Assertions.assertEquals;
+import lombok.Data;
+import org.apache.geronimo.arthur.impl.nativeimage.generator.ConfigurationGenerator;
+import org.apache.geronimo.arthur.impl.nativeimage.graal.CommandGenerator;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
 
 import java.io.File;
 import java.io.IOException;
@@ -33,15 +33,12 @@
 import java.util.function.Function;
 import java.util.stream.Stream;
 
-import org.apache.geronimo.arthur.impl.nativeimage.generator.ConfigurationGenerator;
-import org.apache.geronimo.arthur.impl.nativeimage.generator.DefautContext;
-import org.apache.geronimo.arthur.impl.nativeimage.graal.CommandGenerator;
-import org.apache.geronimo.arthur.spi.ArthurExtension;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.MethodSource;
-
-import lombok.Data;
+import static java.util.Arrays.asList;
+import static java.util.Collections.emptyList;
+import static java.util.Collections.emptyMap;
+import static java.util.Collections.singletonList;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 class CommandGeneratorTest {
     @Test
@@ -61,7 +58,7 @@
         new ConfigurationGenerator(
                 singletonList(context -> context.registerGeneratedClass("org.foo.Bar", new byte[]{1, 2, 3})),
                 configuration, workingDirectory,
-                (o, writer) -> {}, k -> emptyList(), k -> emptyList(),
+                (o, writer) -> {}, k -> emptyList(), k -> emptyList(), k -> emptyList(),
                 (Function<Class<?>, Collection<Class<?>>>) k -> emptyList(), emptyMap()
         ).run();
         assertArrayEquals(new byte[]{1, 2, 3}, Files.readAllBytes(workingDirectory.resolve("dynamic_classes/org/foo/Bar.class")));
diff --git a/arthur-impl/src/test/java/org/apache/geronimo/arthur/impl/nativeimage/generator/DefautContextTest.java b/arthur-impl/src/test/java/org/apache/geronimo/arthur/impl/nativeimage/generator/DefautContextTest.java
index d77e626..c9d1064 100644
--- a/arthur-impl/src/test/java/org/apache/geronimo/arthur/impl/nativeimage/generator/DefautContextTest.java
+++ b/arthur-impl/src/test/java/org/apache/geronimo/arthur/impl/nativeimage/generator/DefautContextTest.java
@@ -50,7 +50,7 @@
     })
     void predicate(final String prop, final String value, final ArthurExtension.PredicateType type, final boolean result) {
         final Optional<Predicate<String>> predicate = new DefautContext(
-                new ArthurNativeImageConfiguration(), null, null, null,
+                new ArthurNativeImageConfiguration(), null, null, null, null,
                 "null".equals(prop) ? emptyMap() : singletonMap("includes", prop))
                 .createPredicate("includes", type);
         assertEquals(result, !predicate.isPresent() || predicate.orElseThrow(IllegalStateException::new).test(value));
@@ -81,13 +81,13 @@
         if (!"null".equals(excludesProp)) {
             map.put("excludes", excludesProp);
         }
-        final DefautContext context = new DefautContext(new ArthurNativeImageConfiguration(), null, null, null, map);
+        final DefautContext context = new DefautContext(new ArthurNativeImageConfiguration(), null, null, null, null, map);
         assertEquals(result, context.createIncludesExcludes("", type).test(value));
     }
 
     @Test
     void findHierarchy() {
-        final ArthurExtension.Context context = new DefautContext(new ArthurNativeImageConfiguration(), null, null, null, emptyMap());
+        final ArthurExtension.Context context = new DefautContext(new ArthurNativeImageConfiguration(), null, null, null, null, emptyMap());
         assertEquals(singletonList(StandaloneClass.class), context.findHierarchy(StandaloneClass.class).collect(toList()));
         assertEquals(asList(ChildClass.class, StandaloneClass.class), context.findHierarchy(ChildClass.class).collect(toList()));
         assertEquals(asList(ImplClass.class, StandaloneInterface.class), context.findHierarchy(ImplClass.class).collect(toList()));
diff --git a/arthur-impl/src/test/java/org/apache/geronimo/arthur/impl/nativeimage/generator/extension/AnnotationExtensionTest.java b/arthur-impl/src/test/java/org/apache/geronimo/arthur/impl/nativeimage/generator/extension/AnnotationExtensionTest.java
index cdcf475..761bbbe 100644
--- a/arthur-impl/src/test/java/org/apache/geronimo/arthur/impl/nativeimage/generator/extension/AnnotationExtensionTest.java
+++ b/arthur-impl/src/test/java/org/apache/geronimo/arthur/impl/nativeimage/generator/extension/AnnotationExtensionTest.java
@@ -36,9 +36,14 @@
 import javax.json.bind.JsonbBuilder;
 import javax.json.bind.JsonbConfig;
 import javax.json.bind.config.PropertyOrderStrategy;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
 import java.util.Collection;
 import java.util.Iterator;
 
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import static java.util.Collections.singletonMap;
 import static java.util.Comparator.comparing;
 import static java.util.stream.Collectors.joining;
 import static java.util.stream.Collectors.toList;
@@ -54,6 +59,7 @@
         final DefautContext context = new DefautContext(new ArthurNativeImageConfiguration(),
                 finder::findAnnotatedClasses,
                 finder::findAnnotatedMethods,
+                finder::findAnnotatedFields,
                 p -> Collection.class.cast(finder.findImplementations(p)),
                 null);
         new AnnotationExtension().execute(context);
@@ -103,6 +109,36 @@
         }
     }
 
+    @Test
+    void customAnnot() throws Exception {
+        final ClassesArchive archive = new ClassesArchive(MarkedRegister.class);
+        final AnnotationFinder finder = new AnnotationFinder(archive);
+        final DefautContext context = new DefautContext(new ArthurNativeImageConfiguration(),
+                finder::findAnnotatedClasses,
+                finder::findAnnotatedMethods,
+                finder::findAnnotatedFields,
+                p -> Collection.class.cast(finder.findImplementations(p)),
+                singletonMap("extension.annotation.custom.annotations.class", MyRegister.class.getName() + ":allDeclaredFields=true"));
+        new AnnotationExtension().execute(context);
+        try (final Jsonb jsonb = JsonbBuilder.create(
+                new JsonbConfig().withPropertyOrderStrategy(PropertyOrderStrategy.LEXICOGRAPHICAL))) {
+            assertTrue(context.isModified());
+            final Iterator<ClassReflectionModel> reflections = context.getReflections().iterator();
+            assertTrue(reflections.hasNext());
+            assertEquals("{\"allDeclaredFields\":true,\"name\":\"org.apache.geronimo.arthur.impl.nativeimage.generator.extension.AnnotationExtensionTest$MarkedRegister\"}", jsonb.toJson(reflections.next()));
+            assertFalse(reflections.hasNext());
+        }
+    }
+
+    @Target(TYPE)
+    @Retention(RUNTIME)
+    public @interface MyRegister {
+    }
+
+    @MyRegister
+    public static class MarkedRegister {
+    }
+
     @RegisterClasses.Entry(clazz = Filter.class)
     @RegisterClasses.Entry(clazz = Files.class)
     public static class OutProjectClassRegistration {
diff --git a/arthur-spi/src/main/java/org/apache/geronimo/arthur/spi/ArthurExtension.java b/arthur-spi/src/main/java/org/apache/geronimo/arthur/spi/ArthurExtension.java
index 270b09d..5a7eb78 100644
--- a/arthur-spi/src/main/java/org/apache/geronimo/arthur/spi/ArthurExtension.java
+++ b/arthur-spi/src/main/java/org/apache/geronimo/arthur/spi/ArthurExtension.java
@@ -17,6 +17,7 @@
 package org.apache.geronimo.arthur.spi;
 
 import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.util.Collection;
 import java.util.Objects;
@@ -67,6 +68,14 @@
         <T extends Annotation> Collection<Method> findAnnotatedMethods(Class<T> annotation);
 
         /**
+         * Simular to {@link #findAnnotatedMethods(Class)} but at field level.
+         * @param annotation the marker annotation to look for.
+         * @param <T> the annotation type.
+         * @return the list of methods with this annotation.
+         */
+        <T extends Annotation> Collection<Field> findAnnotatedFields(Class<T> annotation);
+
+        /**
          * Find subclasses and implementation of a parent.
          *
          * @param parent the parent class to use as marker.
diff --git a/documentation/src/content/api.adoc b/documentation/src/content/api.adoc
index 41bfcf5..18df7b8 100644
--- a/documentation/src/content/api.adoc
+++ b/documentation/src/content/api.adoc
@@ -63,3 +63,12 @@
 ---
 
 Previous: link:documentation.html[Documentation] Next: link:spi.html[Arthur SPI]
+
+== Custom annotation marker
+
+You can set `extension.annotation.custom.annotations.class` to a list of custom annotations set on classes to replace `RegisterClass`.
+Exact configuration value follows this pattern: `<custom annotation fully qualified name>[:[<RegisterClass attribute>=value]|*]?`.
+A common example is: `com.foo.MyAnnot1:all=true,com.foo.MyAnnot2:allPublicMethods=true|allPublicFields=true`.
+
+Similarly `extension.annotation.custom.annotations.properties` enables to configure the same thing but to find classes from marked fields or methods.
+It is very common with unmanaged `@ConfigProperty` classes for example.
diff --git a/knights/jsch-knight/src/test/java/org/apache/geronimo/arthur/knight/jsch/JschExtensionTest.java b/knights/jsch-knight/src/test/java/org/apache/geronimo/arthur/knight/jsch/JschExtensionTest.java
index 3458786..2d63594 100644
--- a/knights/jsch-knight/src/test/java/org/apache/geronimo/arthur/knight/jsch/JschExtensionTest.java
+++ b/knights/jsch-knight/src/test/java/org/apache/geronimo/arthur/knight/jsch/JschExtensionTest.java
@@ -34,7 +34,7 @@
     @Test
     void extension() {
         final ArthurNativeImageConfiguration configuration = new ArthurNativeImageConfiguration();
-        final DefautContext context = new DefautContext(configuration, null, null, null, null);
+        final DefautContext context = new DefautContext(configuration, null, null, null, null, null);
         new JschExtension().execute(context);
 
         assertTrue(configuration.isEnableAllSecurityServices());
