diff --git a/magnolia-blossom-sample-module/src/main/java/info/magnolia/blossom/sample/module/dialogs/components/TextUi6Dialog.java b/magnolia-blossom-sample-module/src/main/java/info/magnolia/blossom/sample/module/dialogs/components/TextUi6Dialog.java
index 5ce8caf..da1dbcf 100644
--- a/magnolia-blossom-sample-module/src/main/java/info/magnolia/blossom/sample/module/dialogs/components/TextUi6Dialog.java
+++ b/magnolia-blossom-sample-module/src/main/java/info/magnolia/blossom/sample/module/dialogs/components/TextUi6Dialog.java
@@ -39,10 +39,11 @@ import info.magnolia.module.blossom.annotation.PostCreate;
 import info.magnolia.module.blossom.annotation.TabFactory;
 import info.magnolia.module.blossom.annotation.TabOrder;
 import info.magnolia.ui.dialog.ConfiguredFormDialogDefinition;
-import info.magnolia.ui.field.FieldDefinition;
+import info.magnolia.ui.field.EditorPropertyDefinition;
 import info.magnolia.ui.field.RichTextFieldDefinition;
 import info.magnolia.ui.field.TextFieldDefinition;
 
+import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -53,26 +54,24 @@ import java.util.List;
 public class TextUi6Dialog {
 
     @TabFactory("Info")
-    public void infoTab(List<FieldDefinition> properties) {
-
+    public List<EditorPropertyDefinition> infoTab() {
         TextFieldDefinition heading = new TextFieldDefinition();
         heading.setName("heading");
         heading.setLabel("Heading");
-        properties.add(heading);
 
         RichTextFieldDefinition body = new RichTextFieldDefinition();
         body.setName("body");
         body.setLabel("Text body");
-        properties.add(body);
 
+        return Arrays.asList(heading, body);
     }
 
     @TabFactory("Photo")
-    public void photoTab(List<FieldDefinition> properties) {
+    public List<EditorPropertyDefinition> photoTab() {
         DamLinkFieldDefinition photo = new DamLinkFieldDefinition();
         photo.setName("photo");
         photo.setLabel("Photo");
-        properties.add(photo);
+        return Arrays.asList(photo);
     }
 
     @PostCreate
diff --git a/magnolia-blossom-sample-module/src/main/java/info/magnolia/blossom/sample/module/templates/components/TextUi6Component.java b/magnolia-blossom-sample-module/src/main/java/info/magnolia/blossom/sample/module/templates/components/TextUi6Component.java
index 19682c8..0aa33d2 100644
--- a/magnolia-blossom-sample-module/src/main/java/info/magnolia/blossom/sample/module/templates/components/TextUi6Component.java
+++ b/magnolia-blossom-sample-module/src/main/java/info/magnolia/blossom/sample/module/templates/components/TextUi6Component.java
@@ -38,15 +38,15 @@ import info.magnolia.module.blossom.annotation.TabFactory;
 import info.magnolia.module.blossom.annotation.TabOrder;
 import info.magnolia.module.blossom.annotation.Template;
 import info.magnolia.module.blossom.annotation.TemplateDescription;
-import info.magnolia.ui.field.FieldDefinition;
+import info.magnolia.ui.field.EditorPropertyDefinition;
 import info.magnolia.ui.field.RichTextFieldDefinition;
 import info.magnolia.ui.field.TextFieldDefinition;
-
-import java.util.List;
-
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 
+import java.util.Arrays;
+import java.util.List;
+
 /**
  * Simple UI 6 component for adding text to a page.
  */
@@ -63,26 +63,24 @@ public class TextUi6Component {
     }
 
     @TabFactory("Info")
-    public void infoTab(List<FieldDefinition> properties) {
-
+    public List<EditorPropertyDefinition> infoTab() {
         TextFieldDefinition heading = new TextFieldDefinition();
         heading.setName("heading");
         heading.setLabel("Heading");
-        properties.add(heading);
 
         RichTextFieldDefinition body = new RichTextFieldDefinition();
         body.setName("body");
         body.setLabel("Text body");
-        properties.add(body);
 
+        return Arrays.asList(heading, body);
     }
 
     @TabFactory("Photo")
-    public void photoTab(List<FieldDefinition> properties) {
+    public List<EditorPropertyDefinition> photoTab() {
         DamLinkFieldDefinition photo = new DamLinkFieldDefinition();
         photo.setName("photo");
         photo.setLabel("Photo");
-        properties.add(photo);
+        return Arrays.asList(photo);
     }
 
 }
diff --git a/magnolia-module-blossom/src/main/java/info/magnolia/module/blossom/dialog/BlossomParameterResolver.java b/magnolia-module-blossom/src/main/java/info/magnolia/module/blossom/dialog/BlossomParameterResolver.java
deleted file mode 100644
index 6564947..0000000
--- a/magnolia-module-blossom/src/main/java/info/magnolia/module/blossom/dialog/BlossomParameterResolver.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/**
- * This file Copyright (c) 2022 Magnolia International
- * Ltd.  (http://www.magnolia-cms.com). All rights reserved.
- *
- *
- * This file is dual-licensed under both the Magnolia
- * Network Agreement and the GNU General Public License.
- * You may elect to use one or the other of these licenses.
- *
- * This file is distributed in the hope that it will be
- * useful, but AS-IS and WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE, TITLE, or NONINFRINGEMENT.
- * Redistribution, except as permitted by whichever of the GPL
- * or MNA you select, is prohibited.
- *
- * 1. For the GPL license (GPL), you can redistribute and/or
- * modify this file under the terms of the GNU General
- * Public License, Version 3, as published by the Free Software
- * Foundation.  You should have received a copy of the GNU
- * General Public License, Version 3 along with this program;
- * if not, write to the Free Software Foundation, Inc., 51
- * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * 2. For the Magnolia Network Agreement (MNA), this file
- * and the accompanying materials are made available under the
- * terms of the MNA which accompanies this distribution, and
- * is available at http://www.magnolia-cms.com/mna.html
- *
- * Any modifications to this file must keep this entire header
- * intact.
- *
- */
-package info.magnolia.module.blossom.dialog;
-
-import info.magnolia.cms.security.MgnlUser;
-import info.magnolia.cms.security.User;
-import info.magnolia.context.Context;
-import info.magnolia.context.MgnlContext;
-import info.magnolia.context.WebContext;
-import info.magnolia.module.blossom.support.ParameterResolver;
-
-import javax.jcr.Node;
-
-/**
- * BlossomParameterResolver.
- */
-public class BlossomParameterResolver extends ParameterResolver {
-    private DialogCreationContext context;
-
-    public BlossomParameterResolver(DialogCreationContext context, ParameterResolver parent) {
-        super(parent);
-        this.context = context;
-    }
-
-    public BlossomParameterResolver(DialogCreationContext context) {
-        this(context, null);
-    }
-
-    @Override
-    public Object resolveParameter(final Class<?> parameterType) {
-        if (parameterType.equals(DialogCreationContext.class)) {
-            return context;
-        }
-        if (parameterType.equals(Node.class)) {
-            return context.getContentNode();
-        }
-        if (parameterType.isAssignableFrom(WebContext.class)) {
-            return MgnlContext.getWebContext();
-        }
-        if (parameterType.isAssignableFrom(Context.class)) {
-            return MgnlContext.getInstance();
-        }
-        if (parameterType.isAssignableFrom(User.class)) {
-            return MgnlContext.getUser();
-        }
-        if (parameterType.isAssignableFrom(MgnlUser.class)) {
-            return MgnlContext.getUser();
-        }
-        return super.resolveParameter(parameterType);
-    }
-}
diff --git a/magnolia-module-blossom/src/main/java/info/magnolia/module/blossom/dialog/DefaultDialogCreator.java b/magnolia-module-blossom/src/main/java/info/magnolia/module/blossom/dialog/DefaultDialogCreator.java
index b5f6ede..a143414 100644
--- a/magnolia-module-blossom/src/main/java/info/magnolia/module/blossom/dialog/DefaultDialogCreator.java
+++ b/magnolia-module-blossom/src/main/java/info/magnolia/module/blossom/dialog/DefaultDialogCreator.java
@@ -50,6 +50,7 @@ import info.magnolia.ui.framework.config.UiConfig;
 import java.lang.reflect.Method;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.List;
 
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -58,6 +59,9 @@ import org.springframework.beans.factory.InitializingBean;
 import org.springframework.util.ClassUtils;
 
 import com.vaadin.v7.data.Item;
+import org.springframework.web.method.support.HandlerMethodArgumentResolver;
+
+import javax.jcr.Node;
 
 /**
  * Default implementation of {@link info.magnolia.module.blossom.dialog.DialogCreator}.
@@ -82,12 +86,14 @@ public class DefaultDialogCreator implements DialogCreator, InitializingBean {
             "info.magnolia.dam.app.ui.config.DamConfig", // DAM 2.0+
             "info.magnolia.dam.asset.config.DamConfig" // DAM 1.x
     };
+    private final List<HandlerMethodArgumentResolver> argumentResolvers;
 
     private Class damConfigClass;
     private Boolean setTabLabels;
     private Boolean sortTabsByLabel;
 
-    public DefaultDialogCreator() {
+    public DefaultDialogCreator(final List<HandlerMethodArgumentResolver> argumentResolvers) {
+        this.argumentResolvers = argumentResolvers;
         ClassLoader classLoader = this.getClass().getClassLoader();
         for (String damConfigClassName : DAM_CONFIG_CLASS_NAMES) {
             if (ClassUtils.isPresent(damConfigClassName, classLoader)) {
@@ -140,8 +146,9 @@ public class DefaultDialogCreator implements DialogCreator, InitializingBean {
             dialogBuilder.i18nBasename(metaData.getI18nBasename());
         }
 
-        ParameterResolver parameters = getDialogFactoryParameters(metaData, context, dialogBuilder);
-        MethodInvocationUtils.invoke(metaData.getFactoryMethod(), metaData.getFactoryObject(), parameters);
+        final Method factoryMethod = metaData.getFactoryMethod();
+        ParameterResolver parameters = getDialogFactoryParameters(factoryMethod, context, dialogBuilder);
+        MethodInvocationUtils.invoke(factoryMethod, metaData.getFactoryObject(), parameters);
 
         if (metaData.getTabOrder() != null) {
             sortTabs(context.getDialog(), metaData.getTabOrder());
@@ -169,20 +176,20 @@ public class DefaultDialogCreator implements DialogCreator, InitializingBean {
                 }
                 dialogBuilder.form().definition().getTabs().add(tabPosition++, tabBuilder.definition());
 
-                ParameterResolver parameters = getTabFactoryParameters(metaData, context, tabBuilder);
+                ParameterResolver parameters = getTabFactoryParameters(tabFactory, context, tabBuilder);
                 MethodInvocationUtils.invoke(tabFactory, metaData.getFactoryObject(), parameters);
             }
 
             for (Method postCreateMethod : classMetaData.getPostCreateCallbacks()) {
 
-                ParameterResolver parameters = getPostCreateCallbackParameters(metaData, context, dialogBuilder);
+                ParameterResolver parameters = getPostCreateCallbackParameters(postCreateMethod, context, dialogBuilder);
                 MethodInvocationUtils.invoke(postCreateMethod, factoryObject, parameters);
             }
         }
 
         for (Method postCreateMethod : metaData.getPostCreateCallbacks()) {
 
-            ParameterResolver parameters = getPostCreateCallbackParameters(metaData, context, dialogBuilder);
+            ParameterResolver parameters = getPostCreateCallbackParameters(postCreateMethod, context, dialogBuilder);
             MethodInvocationUtils.invoke(postCreateMethod, factoryObject, parameters);
         }
 
@@ -215,8 +222,8 @@ public class DefaultDialogCreator implements DialogCreator, InitializingBean {
         });
     }
 
-    protected ParameterResolver getDialogFactoryParameters(DialogFactoryMetaData metaData, DialogCreationContext context, final DialogBuilder dialogBuilder) {
-        return new ParameterResolver(getStandardParameters(metaData, context)) {
+    protected ParameterResolver getDialogFactoryParameters(Method method, DialogCreationContext context, final DialogBuilder dialogBuilder) {
+        return new ParameterResolver(getStandardParameters(method, context)) {
 
             @Override
             public Object resolveParameter(Class<?> parameterType) {
@@ -228,8 +235,8 @@ public class DefaultDialogCreator implements DialogCreator, InitializingBean {
         };
     }
 
-    protected ParameterResolver getTabFactoryParameters(DialogFactoryMetaData metaData, DialogCreationContext context, final TabBuilder tabBuilder) {
-        return new ParameterResolver(getStandardParameters(metaData, context)) {
+    protected ParameterResolver getTabFactoryParameters(Method method, DialogCreationContext context, final TabBuilder tabBuilder) {
+        return new ParameterResolver(getStandardParameters(method, context)) {
 
             @Override
             public Object resolveParameter(Class<?> parameterType) {
@@ -241,8 +248,8 @@ public class DefaultDialogCreator implements DialogCreator, InitializingBean {
         };
     }
 
-    protected ParameterResolver getPostCreateCallbackParameters(DialogFactoryMetaData metaData, DialogCreationContext context, final DialogBuilder dialogBuilder) {
-        return new ParameterResolver(getStandardParameters(metaData, context)) {
+    protected ParameterResolver getPostCreateCallbackParameters(Method method, DialogCreationContext context, final DialogBuilder dialogBuilder) {
+        return new ParameterResolver(getStandardParameters(method, context)) {
 
             @Override
             public Object resolveParameter(Class<?> parameterType) {
@@ -254,11 +261,17 @@ public class DefaultDialogCreator implements DialogCreator, InitializingBean {
         };
     }
 
-    protected ParameterResolver getStandardParameters(DialogFactoryMetaData metaData, final DialogCreationContext context) {
-        return new BlossomParameterResolver(context) {
+    protected ParameterResolver getStandardParameters(Method method, final DialogCreationContext context) {
+        return new ParameterResolver(new HandlerMethodArgumentResolverDelegateParameterResolver(argumentResolvers, method)) {
 
             @Override
             public Object resolveParameter(Class<?> parameterType) {
+                if (parameterType.equals(DialogCreationContext.class)) {
+                    return context;
+                }
+                if (parameterType.equals(Node.class)) {
+                    return context.getContentNode();
+                }
                 if (parameterType.isAssignableFrom(ConfiguredFormDialogDefinition.class)) {
                     return context.getDialog();
                 }
diff --git a/magnolia-module-blossom/src/main/java/info/magnolia/module/blossom/dialog/DialogDescriptionBuilder.java b/magnolia-module-blossom/src/main/java/info/magnolia/module/blossom/dialog/DialogDescriptionBuilder.java
index fcc4fc2..d3915a5 100644
--- a/magnolia-module-blossom/src/main/java/info/magnolia/module/blossom/dialog/DialogDescriptionBuilder.java
+++ b/magnolia-module-blossom/src/main/java/info/magnolia/module/blossom/dialog/DialogDescriptionBuilder.java
@@ -38,6 +38,12 @@ import info.magnolia.module.blossom.annotation.I18nBasename;
 import info.magnolia.module.blossom.annotation.PostCreate;
 import info.magnolia.module.blossom.annotation.TabFactory;
 import info.magnolia.module.blossom.annotation.TabOrder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.aop.support.AopUtils;
+import org.springframework.util.ClassUtils;
+import org.springframework.util.ReflectionUtils;
+import org.springframework.web.method.support.HandlerMethodArgumentResolver;
 
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
@@ -47,12 +53,6 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.aop.support.AopUtils;
-import org.springframework.util.ClassUtils;
-import org.springframework.util.ReflectionUtils;
-
 /**
  * Builds dialog descriptions from annotations.
  *
@@ -68,17 +68,22 @@ public class DialogDescriptionBuilder {
     );
 
     private final Logger logger = LoggerFactory.getLogger(getClass());
+    private final List<HandlerMethodArgumentResolver> argumentResolvers;
 
     private DialogCreator dialogCreator;
     private DialogCreator legacyDialogCreator;
 
+    public DialogDescriptionBuilder(final List<HandlerMethodArgumentResolver> argumentResolvers) {
+        this.argumentResolvers = argumentResolvers;
+    }
+
     public void setDialogCreator(DialogCreator dialogCreator) {
         this.dialogCreator = dialogCreator;
     }
 
     public DialogCreator getDialogCreator() {
         if (dialogCreator == null) {
-            Ui6DialogCreator defaultDialogCreator = new Ui6DialogCreator();
+            Ui6DialogCreator defaultDialogCreator = new Ui6DialogCreator(argumentResolvers);
             try {
                 defaultDialogCreator.afterPropertiesSet();
             } catch (Exception e) {
@@ -91,7 +96,7 @@ public class DialogDescriptionBuilder {
 
     private DialogCreator getLegacyDialogCreator() {
         if (legacyDialogCreator == null) {
-            final DefaultDialogCreator defaultDialogCreator = new DefaultDialogCreator();
+            final DefaultDialogCreator defaultDialogCreator = new DefaultDialogCreator(argumentResolvers);
             try {
                 defaultDialogCreator.afterPropertiesSet();
             } catch (Exception e) {
diff --git a/magnolia-module-blossom/src/main/java/info/magnolia/module/blossom/dialog/DialogExporter.java b/magnolia-module-blossom/src/main/java/info/magnolia/module/blossom/dialog/DialogExporter.java
index c49c6dc..346cfe1 100644
--- a/magnolia-module-blossom/src/main/java/info/magnolia/module/blossom/dialog/DialogExporter.java
+++ b/magnolia-module-blossom/src/main/java/info/magnolia/module/blossom/dialog/DialogExporter.java
@@ -42,7 +42,15 @@ import info.magnolia.module.blossom.support.ParameterResolver;
 import info.magnolia.objectfactory.Components;
 import info.magnolia.ui.dialog.DialogDefinition;
 import info.magnolia.ui.dialog.DialogDefinitionRegistry;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.aop.support.AopUtils;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.util.ClassUtils;
+import org.springframework.util.ReflectionUtils;
+import org.springframework.web.method.support.HandlerMethodArgumentResolver;
 
+import javax.inject.Inject;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.util.ArrayList;
@@ -50,13 +58,6 @@ import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicReference;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.aop.support.AopUtils;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.util.ClassUtils;
-import org.springframework.util.ReflectionUtils;
-
 /**
  * Detects class level dialog factories by scanning beans in the local application context and registers them with the
  * dialog registry.
@@ -67,9 +68,15 @@ import org.springframework.util.ReflectionUtils;
 public class DialogExporter extends AbstractBeanDetector implements InitializingBean {
 
     private final Logger logger = LoggerFactory.getLogger(getClass());
+    private final List<HandlerMethodArgumentResolver> argumentResolvers;
 
     private DialogDescriptionBuilder dialogDescriptionBuilder;
 
+    @Inject
+    public DialogExporter(final List<HandlerMethodArgumentResolver> argumentResolvers) {
+        this.argumentResolvers = argumentResolvers;
+    }
+
     public void setDialogDescriptionBuilder(DialogDescriptionBuilder dialogDescriptionBuilder) {
         this.dialogDescriptionBuilder = dialogDescriptionBuilder;
     }
@@ -156,7 +163,7 @@ public class DialogExporter extends AbstractBeanDetector implements Initializing
     @Override
     public void afterPropertiesSet() throws Exception {
         if (dialogDescriptionBuilder == null) {
-            dialogDescriptionBuilder = new DialogDescriptionBuilder();
+            dialogDescriptionBuilder = new DialogDescriptionBuilder(argumentResolvers);
         }
     }
 }
diff --git a/magnolia-module-blossom/src/main/java/info/magnolia/module/blossom/dialog/HandlerMethodArgumentResolverDelegateParameterResolver.java b/magnolia-module-blossom/src/main/java/info/magnolia/module/blossom/dialog/HandlerMethodArgumentResolverDelegateParameterResolver.java
new file mode 100644
index 0000000..e46f9c0
--- /dev/null
+++ b/magnolia-module-blossom/src/main/java/info/magnolia/module/blossom/dialog/HandlerMethodArgumentResolverDelegateParameterResolver.java
@@ -0,0 +1,95 @@
+/**
+ * This file Copyright (c) 2022 Magnolia International
+ * Ltd.  (http://www.magnolia-cms.com). All rights reserved.
+ *
+ *
+ * This file is dual-licensed under both the Magnolia
+ * Network Agreement and the GNU General Public License.
+ * You may elect to use one or the other of these licenses.
+ *
+ * This file is distributed in the hope that it will be
+ * useful, but AS-IS and WITHOUT ANY WARRANTY; without even the
+ * implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE, TITLE, or NONINFRINGEMENT.
+ * Redistribution, except as permitted by whichever of the GPL
+ * or MNA you select, is prohibited.
+ *
+ * 1. For the GPL license (GPL), you can redistribute and/or
+ * modify this file under the terms of the GNU General
+ * Public License, Version 3, as published by the Free Software
+ * Foundation.  You should have received a copy of the GNU
+ * General Public License, Version 3 along with this program;
+ * if not, write to the Free Software Foundation, Inc., 51
+ * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * 2. For the Magnolia Network Agreement (MNA), this file
+ * and the accompanying materials are made available under the
+ * terms of the MNA which accompanies this distribution, and
+ * is available at http://www.magnolia-cms.com/mna.html
+ *
+ * Any modifications to this file must keep this entire header
+ * intact.
+ *
+ */
+package info.magnolia.module.blossom.dialog;
+
+import info.magnolia.module.blossom.support.ParameterResolver;
+import org.springframework.core.MethodParameter;
+import org.springframework.web.method.support.HandlerMethodArgumentResolver;
+import org.springframework.web.method.support.HandlerMethodArgumentResolverComposite;
+
+import java.lang.reflect.Method;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+
+/**
+ * HandlerMethodArgumentResolverDelegateParameterResolver.
+ */
+public class HandlerMethodArgumentResolverDelegateParameterResolver extends ParameterResolver {
+    private final HandlerMethodArgumentResolverComposite handlerMethodArgumentResolverComposite;
+    private final Method method;
+
+    public HandlerMethodArgumentResolverDelegateParameterResolver(
+            final List<HandlerMethodArgumentResolver> argumentResolvers,
+            final Method method,
+            final ParameterResolver parent) {
+        super(parent);
+        this.handlerMethodArgumentResolverComposite = new HandlerMethodArgumentResolverComposite().addResolvers(argumentResolvers);
+        this.method = method;
+    }
+
+    public HandlerMethodArgumentResolverDelegateParameterResolver(
+            final List<HandlerMethodArgumentResolver> argumentResolvers,
+            final Method method) {
+        this(argumentResolvers, method, null);
+    }
+
+    public Object resolveParameter(final Class<?> parameterType) {
+        return getParameterIndex(parameterType)
+                .map(index -> new MethodParameter(method, index))
+                .filter(handlerMethodArgumentResolverComposite::supportsParameter)
+                .map(parameter -> {
+                    try {
+                        /*
+                         * Nonnull annotated parameter NativeWebRequest can't be provided
+                         * if a resolver of a parameter type requires it, an exception will be thrown
+                         */
+                        return handlerMethodArgumentResolverComposite.resolveArgument(parameter, null, null, null);
+                    } catch (Exception e) {
+                        throw new IllegalArgumentException("Couldn't resolve argument " + parameterType, e);
+                    }
+                })
+                .orElseGet(() -> super.resolveParameter(parameterType));
+    }
+
+    private Optional<Integer> getParameterIndex(final Class<?> parameterType) {
+        final Class<?>[] parameterTypes = method.getParameterTypes();
+        for (int i = 0; i < parameterTypes.length; i++) {
+            if (Objects.equals(parameterTypes[i], parameterType)) {
+                return Optional.of(i);
+            }
+        }
+        return Optional.empty();
+    }
+}
\ No newline at end of file
diff --git a/magnolia-module-blossom/src/main/java/info/magnolia/module/blossom/dialog/Ui6DialogCreator.java b/magnolia-module-blossom/src/main/java/info/magnolia/module/blossom/dialog/Ui6DialogCreator.java
index bd25193..fb53db2 100644
--- a/magnolia-module-blossom/src/main/java/info/magnolia/module/blossom/dialog/Ui6DialogCreator.java
+++ b/magnolia-module-blossom/src/main/java/info/magnolia/module/blossom/dialog/Ui6DialogCreator.java
@@ -33,8 +33,7 @@
  */
 package info.magnolia.module.blossom.dialog;
 
-import static java.util.stream.Collectors.toList;
-
+import com.vaadin.ui.Window;
 import info.magnolia.init.MagnoliaConfigurationProperties;
 import info.magnolia.module.blossom.annotation.TabFactory;
 import info.magnolia.module.blossom.support.MethodInvocationUtils;
@@ -48,7 +47,6 @@ import info.magnolia.ui.dialog.EditorActionBar;
 import info.magnolia.ui.dialog.FormDialogDefinition;
 import info.magnolia.ui.editor.ConfiguredFormDefinition;
 import info.magnolia.ui.editor.EditorView;
-import info.magnolia.ui.field.ConfiguredFieldDefinition;
 import info.magnolia.ui.field.ConfiguredNamedFieldDefinition;
 import info.magnolia.ui.field.EditorPropertyDefinition;
 import info.magnolia.ui.field.LocaleSelector;
@@ -56,17 +54,18 @@ import info.magnolia.ui.field.NamedFieldDefinition;
 import info.magnolia.ui.framework.layout.ConfiguredTabDefinition;
 import info.magnolia.ui.framework.layout.TabDefinition;
 import info.magnolia.ui.framework.layout.TabbedLayoutDefinition;
+import org.apache.commons.lang3.ArrayUtils;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.web.method.support.HandlerMethodArgumentResolver;
 
+import javax.jcr.Node;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
 
-import org.apache.commons.lang3.ArrayUtils;
-import org.springframework.beans.factory.InitializingBean;
-
-import com.vaadin.ui.Window;
+import static java.util.stream.Collectors.toList;
 
 /**
  * UI 6 implementation of {@link info.magnolia.module.blossom.dialog.DialogCreator}.
@@ -84,10 +83,13 @@ public class Ui6DialogCreator implements DialogCreator, InitializingBean {
     public static final String SET_TAB_LABELS_PROPERTY_NAME = "magnolia.blossom.setTabLabels";
     public static final Boolean SET_TAB_LABELS_PROPERTY_DEFAULT = Boolean.TRUE;
 
+    private final List<HandlerMethodArgumentResolver> argumentResolvers;
+
     private Boolean setTabLabels;
     private Boolean sortTabsByLabel;
 
-    public Ui6DialogCreator() {
+    public Ui6DialogCreator(final List<HandlerMethodArgumentResolver> argumentResolvers) {
+        this.argumentResolvers = argumentResolvers;
     }
 
     public Boolean getSortTabsByLabel() {
@@ -147,8 +149,9 @@ public class Ui6DialogCreator implements DialogCreator, InitializingBean {
     }
 
     private void invokeMethodDialogFactory(DialogFactoryMetaData metaData, DialogCreationContext context, ConfiguredFormDialogDefinition dialogDefinition, ConfiguredFormDefinition formDefinition) {
-        final ParameterResolver parameters = getDialogFactoryParameters(metaData, context, formDefinition, dialogDefinition);
-        MethodInvocationUtils.invoke(metaData.getFactoryMethod(), metaData.getFactoryObject(), parameters);
+        final Method factoryMethod = metaData.getFactoryMethod();
+        final ParameterResolver parameters = getDialogFactoryParameters(factoryMethod, context, formDefinition, dialogDefinition);
+        MethodInvocationUtils.invoke(factoryMethod, metaData.getFactoryObject(), parameters);
     }
 
     private void invokeClassDialogFactory(DialogFactoryMetaData metaData, DialogCreationContext context, ConfiguredFormDialogDefinition dialogDefinition, ConfiguredFormDefinition formDefinition) {
@@ -164,31 +167,29 @@ public class Ui6DialogCreator implements DialogCreator, InitializingBean {
         for (DialogFactoryClassMetaData classMetaData : metaData.getClassMetaData()) {
 
             for (Method tabFactory : classMetaData.getTabFactories()) {
-
-                final ArrayList<ConfiguredFieldDefinition> properties = new ArrayList<>();
                 final ConfiguredTabDefinition tabDefinition = isTabbedLayout ? new ConfiguredTabDefinition() : null;
 
-                final ParameterResolver parameters = getTabFactoryParameters(metaData, context, properties, tabDefinition);
+                final ParameterResolver parameters = getTabFactoryParameters(tabFactory, context, tabDefinition);
 
-                MethodInvocationUtils.invoke(tabFactory, metaData.getFactoryObject(), parameters);
+                final List<EditorPropertyDefinition> properties = (List<EditorPropertyDefinition>) MethodInvocationUtils.invoke(tabFactory, metaData.getFactoryObject(), parameters);
 
                 initTab(tabFactory, formDefinition, properties, isTabbedLayout, tabDefinition);
             }
 
             for (Method callback: classMetaData.getPostCreateCallbacks()) {
-                final ParameterResolver parameters = getDialogFactoryParameters(metaData, context, formDefinition, dialogDefinition);
+                final ParameterResolver parameters = getDialogFactoryParameters(callback, context, formDefinition, dialogDefinition);
                 MethodInvocationUtils.invoke(callback, metaData.getFactoryObject(), parameters);
             }
 
         }
 
         for (Method callback: metaData.getPostCreateCallbacks()) {
-            final ParameterResolver parameters = getDialogFactoryParameters(metaData, context, formDefinition, dialogDefinition);
+            final ParameterResolver parameters = getDialogFactoryParameters(callback, context, formDefinition, dialogDefinition);
             MethodInvocationUtils.invoke(callback, metaData.getFactoryObject(), parameters);
         }
     }
 
-    private void initTab(Method tabFactory, ConfiguredFormDefinition formDefinition, List<ConfiguredFieldDefinition> properties, boolean isTabbedLayout, ConfiguredTabDefinition tabDefinition) {
+    private void initTab(Method tabFactory, ConfiguredFormDefinition formDefinition, List<EditorPropertyDefinition> properties, boolean isTabbedLayout, ConfiguredTabDefinition tabDefinition) {
         final List<EditorPropertyDefinition> formDefinitionProperties = formDefinition.getProperties();
         properties.stream().forEach(field -> formDefinitionProperties.add(field));
         if (isTabbedLayout) {
@@ -248,13 +249,15 @@ public class Ui6DialogCreator implements DialogCreator, InitializingBean {
         return dialog::close;
     }
 
-    private ParameterResolver getTabFactoryParameters(DialogFactoryMetaData metaData, DialogCreationContext context, List<ConfiguredFieldDefinition> properties, ConfiguredTabDefinition tabDefinition) {
-        return new ParameterResolver(new BlossomParameterResolver(context)) {
-
+    private ParameterResolver getTabFactoryParameters(Method method, DialogCreationContext context, ConfiguredTabDefinition tabDefinition) {
+        return new ParameterResolver(new HandlerMethodArgumentResolverDelegateParameterResolver(argumentResolvers, method)) {
             @Override
             public Object resolveParameter(Class<?> parameterType) {
-                if (parameterType.isAssignableFrom(List.class)) {
-                    return properties;
+                if (parameterType.equals(DialogCreationContext.class)) {
+                    return context;
+                }
+                if (parameterType.equals(Node.class)) {
+                    return context.getContentNode();
                 }
                 if (parameterType.isAssignableFrom(ConfiguredTabDefinition.class)) {
                     return tabDefinition;
@@ -264,11 +267,16 @@ public class Ui6DialogCreator implements DialogCreator, InitializingBean {
         };
     }
 
-    private ParameterResolver getDialogFactoryParameters( DialogFactoryMetaData metaData, DialogCreationContext context, ConfiguredFormDefinition formDefinition, ConfiguredFormDialogDefinition dialogDefinition) {
-        return new ParameterResolver(new BlossomParameterResolver(context)) {
-
+    private ParameterResolver getDialogFactoryParameters(Method method, DialogCreationContext context, ConfiguredFormDefinition formDefinition, ConfiguredFormDialogDefinition dialogDefinition) {
+        return new ParameterResolver(new HandlerMethodArgumentResolverDelegateParameterResolver(argumentResolvers, method)) {
             @Override
             public Object resolveParameter(Class<?> parameterType) {
+                if (parameterType.equals(DialogCreationContext.class)) {
+                    return context;
+                }
+                if (parameterType.equals(Node.class)) {
+                    return context.getContentNode();
+                }
                 if (parameterType.isAssignableFrom(ConfiguredFormDialogDefinition.class)) {
                     return dialogDefinition;
                 }
diff --git a/magnolia-module-blossom/src/main/java/info/magnolia/module/blossom/template/TemplateExporter.java b/magnolia-module-blossom/src/main/java/info/magnolia/module/blossom/template/TemplateExporter.java
index 06e3838..3d73b2f 100644
--- a/magnolia-module-blossom/src/main/java/info/magnolia/module/blossom/template/TemplateExporter.java
+++ b/magnolia-module-blossom/src/main/java/info/magnolia/module/blossom/template/TemplateExporter.java
@@ -78,10 +78,13 @@ import org.springframework.context.ApplicationListener;
 import org.springframework.util.ClassUtils;
 import org.springframework.util.ReflectionUtils;
 import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.method.support.HandlerMethodArgumentResolver;
 import org.springframework.web.servlet.handler.AbstractUrlHandlerMapping;
 import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
 import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping;
 
+import javax.inject.Inject;
+
 /**
  * Detects templates by inspecting HandlerMappings.
  *
@@ -93,6 +96,7 @@ public class TemplateExporter implements BeanPostProcessor, InitializingBean, Ap
     private static final String AREA_DIALOG_PREFIX = "blossom-area-dialog:";
 
     private final Logger logger = LoggerFactory.getLogger(getClass());
+    private final List<HandlerMethodArgumentResolver> argumentResolvers;
 
     private BlossomDispatcher dispatcher;
     private TemplateDefinitionBuilder templateDefinitionBuilder;
@@ -100,6 +104,11 @@ public class TemplateExporter implements BeanPostProcessor, InitializingBean, Ap
 
     private DetectedHandlersMetaData detectedHandlers = new DetectedHandlersMetaData();
 
+    @Inject
+    public TemplateExporter(final List<HandlerMethodArgumentResolver> argumentResolvers) {
+        this.argumentResolvers = argumentResolvers;
+    }
+
     public void setTemplateDefinitionBuilder(TemplateDefinitionBuilder templateDefinitionBuilder) {
         this.templateDefinitionBuilder = templateDefinitionBuilder;
     }
@@ -289,7 +298,7 @@ public class TemplateExporter implements BeanPostProcessor, InitializingBean, Ap
             templateDefinitionBuilder = new TemplateDefinitionBuilder();
         }
         if (dialogDescriptionBuilder == null) {
-            dialogDescriptionBuilder = new DialogDescriptionBuilder();
+            dialogDescriptionBuilder = new DialogDescriptionBuilder(argumentResolvers);
         }
     }
 
diff --git a/magnolia-module-blossom/src/test/java/info/magnolia/module/blossom/dialog/DefaultDialogCreatorTest.java b/magnolia-module-blossom/src/test/java/info/magnolia/module/blossom/dialog/DefaultDialogCreatorTest.java
index 56facc9..f67cb60 100644
--- a/magnolia-module-blossom/src/test/java/info/magnolia/module/blossom/dialog/DefaultDialogCreatorTest.java
+++ b/magnolia-module-blossom/src/test/java/info/magnolia/module/blossom/dialog/DefaultDialogCreatorTest.java
@@ -57,6 +57,7 @@ import info.magnolia.ui.form.definition.TabDefinition;
 import info.magnolia.ui.framework.config.UiConfig;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import javax.jcr.Node;
@@ -112,7 +113,7 @@ public class DefaultDialogCreatorTest extends DialogTestSupport {
     @Test
     public void testSimpleFactory() throws Exception {
 
-        BlossomDialogDescription description = new DialogDescriptionBuilder().buildDescription(new SimpleFactory(), null);
+        BlossomDialogDescription description = new DialogDescriptionBuilder(Collections.emptyList()).buildDescription(new SimpleFactory(), null);
 
         assertEquals("some-dialog", description.getId());
         assertEquals("TestDialog", description.getFactoryMetaData().getLabel());
@@ -127,7 +128,7 @@ public class DefaultDialogCreatorTest extends DialogTestSupport {
     @Test
     public void testInheritingFactory() throws Exception {
 
-        BlossomDialogDescription description = new DialogDescriptionBuilder().buildDescription(new InheritingFactory(), null);
+        BlossomDialogDescription description = new DialogDescriptionBuilder(Collections.emptyList()).buildDescription(new InheritingFactory(), null);
 
         DialogCreationContext context = new DialogCreationContext();
         DefaultDialogCreator creator = creator();
@@ -147,7 +148,7 @@ public class DefaultDialogCreatorTest extends DialogTestSupport {
     @Test
     public void testDialogFactoryOnMethod() throws Exception {
 
-        List<BlossomDialogDescription> descriptions = new DialogDescriptionBuilder().buildDescriptions(new BogusTemplate());
+        List<BlossomDialogDescription> descriptions = new DialogDescriptionBuilder(Collections.emptyList()).buildDescriptions(new BogusTemplate());
 
         assertEquals(1, descriptions.size());
 
@@ -173,7 +174,7 @@ public class DefaultDialogCreatorTest extends DialogTestSupport {
     @Test
     public void testDialogFactoryThatNeedsItem() throws Exception {
 
-        List<BlossomDialogDescription> descriptions = new DialogDescriptionBuilder().buildDescriptions(new TemplateWithDialogFactoryThatNeedsItem());
+        List<BlossomDialogDescription> descriptions = new DialogDescriptionBuilder(Collections.emptyList()).buildDescriptions(new TemplateWithDialogFactoryThatNeedsItem());
 
         assertEquals(1, descriptions.size());
 
@@ -201,7 +202,7 @@ public class DefaultDialogCreatorTest extends DialogTestSupport {
     @Test
     public void testDialogFactoryWithTabFactoryThatNeedsItem() throws Exception {
 
-        BlossomDialogDescription description = new DialogDescriptionBuilder().buildDescription("id", "label", new DialogFactoryWithTabFactoryThatNeedsItem());
+        BlossomDialogDescription description = new DialogDescriptionBuilder(Collections.emptyList()).buildDescription("id", "label", new DialogFactoryWithTabFactoryThatNeedsItem());
 
         Item mockItem = mock(Item.class);
         DialogCreationContext context = new DialogCreationContext();
@@ -238,7 +239,7 @@ public class DefaultDialogCreatorTest extends DialogTestSupport {
     public void testPostCreateIsInvokedOnSuperclassesFirst() throws Exception {
 
         // GIVEN
-        BlossomDialogDescription description = new DialogDescriptionBuilder().buildDescription("id", "label", new DialogFactoryWithPostCreateMethodExtendingSuperclass());
+        BlossomDialogDescription description = new DialogDescriptionBuilder(Collections.emptyList()).buildDescription("id", "label", new DialogFactoryWithPostCreateMethodExtendingSuperclass());
         DialogCreationContext context = new DialogCreationContext();
         DefaultDialogCreator creator = creator();
 
@@ -273,7 +274,7 @@ public class DefaultDialogCreatorTest extends DialogTestSupport {
     public void testPostCreateOnMethodInSuperclassThatIsOverriddenIsInvokedFirst() throws Exception {
 
         // GIVEN
-        BlossomDialogDescription description = new DialogDescriptionBuilder().buildDescription("id", "label", new DialogFactoryWithPostCreateMethodOverridingMethodInSuperclass());
+        BlossomDialogDescription description = new DialogDescriptionBuilder(Collections.emptyList()).buildDescription("id", "label", new DialogFactoryWithPostCreateMethodOverridingMethodInSuperclass());
         DialogCreationContext context = new DialogCreationContext();
         DefaultDialogCreator creator = creator();
 
@@ -298,7 +299,7 @@ public class DefaultDialogCreatorTest extends DialogTestSupport {
     public void testPostCreateIsNotInvokedIfMethodIsOverriddenWithoutRepeatingAnnotation() throws Exception {
 
         // GIVEN
-        BlossomDialogDescription description = new DialogDescriptionBuilder().buildDescription("id", "label", new DialogFactoryWithPostCreateMethodOverridingMethodInSuperclassWithoutRepeatingAnnotation());
+        BlossomDialogDescription description = new DialogDescriptionBuilder(Collections.emptyList()).buildDescription("id", "label", new DialogFactoryWithPostCreateMethodOverridingMethodInSuperclassWithoutRepeatingAnnotation());
         DialogCreationContext context = new DialogCreationContext();
         DefaultDialogCreator creator = creator();
 
@@ -327,7 +328,7 @@ public class DefaultDialogCreatorTest extends DialogTestSupport {
     public void testPostCreateIsInvokedWithArguments() throws Exception {
 
         // GIVEN
-        BlossomDialogDescription description = new DialogDescriptionBuilder().buildDescription("id", "label", new DialogFactoryWithPostCreateMethodTakingArguments());
+        BlossomDialogDescription description = new DialogDescriptionBuilder(Collections.emptyList()).buildDescription("id", "label", new DialogFactoryWithPostCreateMethodTakingArguments());
         DialogCreationContext context = new DialogCreationContext();
         context.setItem(mock(Item.class));
         context.setContentNode(mock(Node.class));
@@ -386,7 +387,7 @@ public class DefaultDialogCreatorTest extends DialogTestSupport {
     public void testPostCreateForAfterSubclassesPhaseIsInvokedLast() throws Exception {
 
         // GIVEN
-        BlossomDialogDescription description = new DialogDescriptionBuilder().buildDescription("id", "label", new DialogFactoryWithPostCreateMethodAfterSubclassesExtendingSuperclass());
+        BlossomDialogDescription description = new DialogDescriptionBuilder(Collections.emptyList()).buildDescription("id", "label", new DialogFactoryWithPostCreateMethodAfterSubclassesExtendingSuperclass());
         DialogCreationContext context = new DialogCreationContext();
         DefaultDialogCreator creator = creator();
 
@@ -432,7 +433,7 @@ public class DefaultDialogCreatorTest extends DialogTestSupport {
     public void testSortTabsByName() throws Exception {
 
         // GIVEN
-        BlossomDialogDescription description = new DialogDescriptionBuilder().buildDescription(new DialogWithTabsOrderedByName(), null);
+        BlossomDialogDescription description = new DialogDescriptionBuilder(Collections.emptyList()).buildDescription(new DialogWithTabsOrderedByName(), null);
         DialogCreationContext context = new DialogCreationContext();
         mockProperty(DefaultDialogCreator.SORT_TABS_BY_LABEL_PROPERTY_NAME, "false");
         DefaultDialogCreator creator = creator();
@@ -469,7 +470,7 @@ public class DefaultDialogCreatorTest extends DialogTestSupport {
     public void testSortTabsByLabel() throws Exception {
 
         // GIVEN
-        BlossomDialogDescription description = new DialogDescriptionBuilder().buildDescription(new DialogWithTabsOrderedByLabel(), null);
+        BlossomDialogDescription description = new DialogDescriptionBuilder(Collections.emptyList()).buildDescription(new DialogWithTabsOrderedByLabel(), null);
         DialogCreationContext context = new DialogCreationContext();
         mockProperty(DefaultDialogCreator.SORT_TABS_BY_LABEL_PROPERTY_NAME, "true");
         DefaultDialogCreator creator = creator();
@@ -486,7 +487,7 @@ public class DefaultDialogCreatorTest extends DialogTestSupport {
     public void testSetsBothLabelAndNameByDefault() throws Exception {
 
         // GIVEN
-        BlossomDialogDescription description = new DialogDescriptionBuilder().buildDescription(new SimpleFactory(), null);
+        BlossomDialogDescription description = new DialogDescriptionBuilder(Collections.emptyList()).buildDescription(new SimpleFactory(), null);
         DialogCreationContext context = new DialogCreationContext();
         DefaultDialogCreator creator = creator();
         assertTrue(creator.getSetTabLabels());
@@ -505,7 +506,7 @@ public class DefaultDialogCreatorTest extends DialogTestSupport {
     public void testSetsNoLabelIfAskedNotTo() throws Exception {
 
         // GIVEN
-        BlossomDialogDescription description = new DialogDescriptionBuilder().buildDescription(new SimpleFactory(), null);
+        BlossomDialogDescription description = new DialogDescriptionBuilder(Collections.emptyList()).buildDescription(new SimpleFactory(), null);
         DialogCreationContext context = new DialogCreationContext();
         mockProperty(DefaultDialogCreator.SET_TAB_LABELS_PROPERTY_NAME, "false");
         DefaultDialogCreator creator = creator();
@@ -521,7 +522,7 @@ public class DefaultDialogCreatorTest extends DialogTestSupport {
     }
 
     private DefaultDialogCreator creator() throws Exception {
-        DefaultDialogCreator creator = new DefaultDialogCreator();
+        DefaultDialogCreator creator = new DefaultDialogCreator(Collections.emptyList());
         creator.afterPropertiesSet();
         return creator;
     }
diff --git a/magnolia-module-blossom/src/test/java/info/magnolia/module/blossom/dialog/DialogDescriptionBuilderTest.java b/magnolia-module-blossom/src/test/java/info/magnolia/module/blossom/dialog/DialogDescriptionBuilderTest.java
index 477f162..ffc8bf1 100644
--- a/magnolia-module-blossom/src/test/java/info/magnolia/module/blossom/dialog/DialogDescriptionBuilderTest.java
+++ b/magnolia-module-blossom/src/test/java/info/magnolia/module/blossom/dialog/DialogDescriptionBuilderTest.java
@@ -42,6 +42,8 @@ import info.magnolia.module.blossom.annotation.DialogFactory;
 import info.magnolia.module.blossom.annotation.PostCreate;
 import info.magnolia.module.blossom.annotation.TabFactory;
 
+import java.util.Collections;
+
 /**
  * Test case for {@link DialogDescriptionBuilder}.
  *
@@ -60,7 +62,7 @@ public class DialogDescriptionBuilderTest {
     @Test
     public void testStaticTabFactory() throws Exception {
         try {
-            new DialogDescriptionBuilder().buildDescription(new FactoryWithStaticMethod(), null);
+            new DialogDescriptionBuilder(Collections.emptyList()).buildDescription(new FactoryWithStaticMethod(), null);
             fail();
         } catch (IllegalStateException expected) {
         }
@@ -78,7 +80,7 @@ public class DialogDescriptionBuilderTest {
 
         try {
             // WHEN
-            new DialogDescriptionBuilder().buildDescription("id", "label", new DialogFactoryWithPostCreateOnStaticMethod());
+            new DialogDescriptionBuilder(Collections.emptyList()).buildDescription("id", "label", new DialogFactoryWithPostCreateOnStaticMethod());
             fail();
         } catch (IllegalStateException e) {
             // THEN
diff --git a/magnolia-module-blossom/src/test/java/info/magnolia/module/blossom/dialog/DialogExporterTest.java b/magnolia-module-blossom/src/test/java/info/magnolia/module/blossom/dialog/DialogExporterTest.java
index 7b8e5bb..b13b480 100644
--- a/magnolia-module-blossom/src/test/java/info/magnolia/module/blossom/dialog/DialogExporterTest.java
+++ b/magnolia-module-blossom/src/test/java/info/magnolia/module/blossom/dialog/DialogExporterTest.java
@@ -51,6 +51,7 @@ import info.magnolia.test.MgnlTestCase;
 import info.magnolia.ui.dialog.DialogDefinition;
 import info.magnolia.ui.dialog.DialogDefinitionRegistry;
 
+import java.util.Collections;
 import java.util.concurrent.atomic.AtomicReference;
 
 import org.junit.Test;
@@ -166,7 +167,7 @@ public class DialogExporterTest extends MgnlTestCase {
         BlossomDispatcher dispatcher = mock(BlossomDispatcher.class);
 
         final AtomicReference<BlossomDialogDescription> reference = new AtomicReference<BlossomDialogDescription>();
-        DialogExporter dialogExporter = new DialogExporter() {
+        DialogExporter dialogExporter = new DialogExporter(Collections.emptyList()) {
 
             @Override
             protected DefinitionProvider<DialogDefinition> createDialogDefinitionProvider(BlossomDialogDescription dialogDescription) {
diff --git a/magnolia-module-blossom/src/test/java/info/magnolia/module/blossom/dialog/Ui6DialogCreatorTest.java b/magnolia-module-blossom/src/test/java/info/magnolia/module/blossom/dialog/Ui6DialogCreatorTest.java
index 986ad06..292aa35 100644
--- a/magnolia-module-blossom/src/test/java/info/magnolia/module/blossom/dialog/Ui6DialogCreatorTest.java
+++ b/magnolia-module-blossom/src/test/java/info/magnolia/module/blossom/dialog/Ui6DialogCreatorTest.java
@@ -33,14 +33,16 @@
  */
 package info.magnolia.module.blossom.dialog;
 
-import static org.junit.Assert.*;
-import static org.mockito.Mockito.*;
-
+import com.vaadin.server.ErrorHandler;
+import com.vaadin.ui.UI;
+import com.vaadin.ui.Window;
+import com.vaadin.v7.data.Item;
 import info.magnolia.init.MagnoliaConfigurationProperties;
 import info.magnolia.module.blossom.annotation.DialogFactory;
 import info.magnolia.module.blossom.annotation.PostCreate;
 import info.magnolia.module.blossom.annotation.TabFactory;
 import info.magnolia.module.blossom.annotation.TabOrder;
+import info.magnolia.module.blossom.web.BlossomHandlerMethodArgumentResolver;
 import info.magnolia.test.ComponentsTestUtil;
 import info.magnolia.ui.UIComponent;
 import info.magnolia.ui.ValueContext;
@@ -50,27 +52,39 @@ import info.magnolia.ui.dialog.EditorActionBar;
 import info.magnolia.ui.editor.ConfiguredFormDefinition;
 import info.magnolia.ui.editor.EditorView;
 import info.magnolia.ui.editor.FormDefinition;
-import info.magnolia.ui.field.ConfiguredFieldDefinition;
+import info.magnolia.ui.field.EditorPropertyDefinition;
 import info.magnolia.ui.field.TextFieldDefinition;
 import info.magnolia.ui.framework.WithImplementation;
 import info.magnolia.ui.framework.ioc.UiComponentProvider;
 import info.magnolia.ui.framework.layout.ConfiguredTabDefinition;
 import info.magnolia.ui.framework.layout.TabDefinition;
 import info.magnolia.ui.framework.layout.TabbedLayoutDefinition;
+import org.junit.Before;
+import org.junit.Test;
+import org.springframework.web.method.support.HandlerMethodArgumentResolver;
 
+import javax.jcr.Node;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
-import javax.jcr.Node;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import com.vaadin.server.ErrorHandler;
-import com.vaadin.ui.UI;
-import com.vaadin.ui.Window;
-import com.vaadin.v7.data.Item;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyBoolean;
+import static org.mockito.Mockito.anyCollection;
+import static org.mockito.Mockito.anyList;
+import static org.mockito.Mockito.anyMap;
+import static org.mockito.Mockito.anyString;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 /**
  * Test case for {@link Ui6DialogCreator}.
@@ -79,28 +93,32 @@ import com.vaadin.v7.data.Item;
  */
 public class Ui6DialogCreatorTest extends Ui6DialogTestSupport {
 
+    private static final List<HandlerMethodArgumentResolver> ARGUMENT_RESOLVERS = Arrays.asList(new BlossomHandlerMethodArgumentResolver());
     private UIComponent parentView;
 
     // Factories from interfaces are not supported
     public interface AnnotatedInterface {
 
         @TabFactory("FromInterface")
-        void foo();
+        List<EditorPropertyDefinition> foo();
     }
 
     @DialogFactory(value = "some-dialog", label = "TestDialog")
     public static class SimpleFactory implements AnnotatedInterface {
 
         @TabFactory("Properties")
-        public void properties() {
+        public List<EditorPropertyDefinition> properties() {
+            return Collections.emptyList();
         }
 
         @TabFactory("Settings")
-        public void settings() {
+        public List<EditorPropertyDefinition> settings() {
+            return Collections.emptyList();
         }
 
         @Override
-        public void foo() {
+        public List<EditorPropertyDefinition> foo() {
+            return Collections.emptyList();
         }
     }
 
@@ -109,12 +127,14 @@ public class Ui6DialogCreatorTest extends Ui6DialogTestSupport {
     public static class InheritingFactory extends SimpleFactory {
 
         @TabFactory("Margins")
-        public void margins(List<ConfiguredFieldDefinition> properties) {
+        public List<EditorPropertyDefinition> margins() {
+            return Collections.emptyList();
         }
 
         @TabFactory("Sizes")
         @Override
-        public void settings() {
+        public List<EditorPropertyDefinition> settings() {
+            return Collections.emptyList();
         }
     }
 
@@ -153,7 +173,7 @@ public class Ui6DialogCreatorTest extends Ui6DialogTestSupport {
     @Test
     public void testSimpleFactory() throws Exception {
 
-        BlossomDialogDescription description = new DialogDescriptionBuilder().buildDescription(new SimpleFactory(), null);
+        BlossomDialogDescription description = new DialogDescriptionBuilder(ARGUMENT_RESOLVERS).buildDescription(new SimpleFactory(), null);
 
         assertEquals("some-dialog", description.getId());
         assertEquals("TestDialog", description.getFactoryMetaData().getLabel());
@@ -168,7 +188,7 @@ public class Ui6DialogCreatorTest extends Ui6DialogTestSupport {
     @Test
     public void testInheritingFactory() throws Exception {
 
-        BlossomDialogDescription description = new DialogDescriptionBuilder().buildDescription(new InheritingFactory(), null);
+        BlossomDialogDescription description = new DialogDescriptionBuilder(ARGUMENT_RESOLVERS).buildDescription(new InheritingFactory(), null);
 
         DialogCreationContext context = getDialogCreationContext();
         Ui6DialogCreator creator = creator();
@@ -190,7 +210,7 @@ public class Ui6DialogCreatorTest extends Ui6DialogTestSupport {
     @Test
     public void testDialogFactoryOnMethod() throws Exception {
 
-        List<BlossomDialogDescription> descriptions = new DialogDescriptionBuilder().buildDescriptions(new BogusTemplate());
+        List<BlossomDialogDescription> descriptions = new DialogDescriptionBuilder(ARGUMENT_RESOLVERS).buildDescriptions(new BogusTemplate());
 
         assertEquals(1, descriptions.size());
 
@@ -223,7 +243,8 @@ public class Ui6DialogCreatorTest extends Ui6DialogTestSupport {
         }
 
         @TabFactory("a")
-        public void a() {
+        public List<EditorPropertyDefinition> a() {
+            return Collections.emptyList();
         }
     }
 
@@ -239,7 +260,7 @@ public class Ui6DialogCreatorTest extends Ui6DialogTestSupport {
     public void testPostCreateIsInvokedOnSuperclassesFirst() throws Exception {
 
         // GIVEN
-        BlossomDialogDescription description = new DialogDescriptionBuilder().buildDescription("id", "label", new DialogFactoryWithPostCreateMethodExtendingSuperclass());
+        BlossomDialogDescription description = new DialogDescriptionBuilder(ARGUMENT_RESOLVERS).buildDescription("id", "label", new DialogFactoryWithPostCreateMethodExtendingSuperclass());
         DialogCreationContext context = getDialogCreationContext();
         Ui6DialogCreator creator = creator();
 
@@ -266,7 +287,8 @@ public class Ui6DialogCreatorTest extends Ui6DialogTestSupport {
         }
 
         @TabFactory("b")
-        public void b() {
+        public List<EditorPropertyDefinition> b() {
+            return Collections.emptyList();
         }
     }
 
@@ -274,7 +296,7 @@ public class Ui6DialogCreatorTest extends Ui6DialogTestSupport {
     public void testPostCreateOnMethodInSuperclassThatIsOverriddenIsInvokedFirst() throws Exception {
 
         // GIVEN
-        BlossomDialogDescription description = new DialogDescriptionBuilder().buildDescription("id", "label", new DialogFactoryWithPostCreateMethodOverridingMethodInSuperclass());
+        BlossomDialogDescription description = new DialogDescriptionBuilder(ARGUMENT_RESOLVERS).buildDescription("id", "label", new DialogFactoryWithPostCreateMethodOverridingMethodInSuperclass());
         DialogCreationContext context = getDialogCreationContext();
         Ui6DialogCreator creator = creator();
 
@@ -299,7 +321,7 @@ public class Ui6DialogCreatorTest extends Ui6DialogTestSupport {
     public void testPostCreateIsNotInvokedIfMethodIsOverriddenWithoutRepeatingAnnotation() throws Exception {
 
         // GIVEN
-        BlossomDialogDescription description = new DialogDescriptionBuilder().buildDescription("id", "label", new DialogFactoryWithPostCreateMethodOverridingMethodInSuperclassWithoutRepeatingAnnotation());
+        BlossomDialogDescription description = new DialogDescriptionBuilder(ARGUMENT_RESOLVERS).buildDescription("id", "label", new DialogFactoryWithPostCreateMethodOverridingMethodInSuperclassWithoutRepeatingAnnotation());
         DialogCreationContext context = getDialogCreationContext();
         Ui6DialogCreator creator = creator();
 
@@ -326,7 +348,7 @@ public class Ui6DialogCreatorTest extends Ui6DialogTestSupport {
     public void testPostCreateIsInvokedWithArguments() throws Exception {
 
         // GIVEN
-        BlossomDialogDescription description = new DialogDescriptionBuilder().buildDescription("id", "label", new DialogFactoryWithPostCreateMethodTakingArguments());
+        BlossomDialogDescription description = new DialogDescriptionBuilder(ARGUMENT_RESOLVERS).buildDescription("id", "label", new DialogFactoryWithPostCreateMethodTakingArguments());
         DialogCreationContext context = getDialogCreationContext();
         context.setItem(mock(Item.class));
         context.setContentNode(mock(Node.class));
@@ -342,8 +364,9 @@ public class Ui6DialogCreatorTest extends Ui6DialogTestSupport {
     public static class DialogFactoryWithPostCreateMethodAfterSubclasses {
 
         @TabFactory("tab")
-        public void tabFactory() {
+        public List<EditorPropertyDefinition> tabFactory() {
             events.add("DialogFactoryWithPostCreateMethodAfterSubclasses#tabFactory"); // 1
+            return Collections.emptyList();
         }
 
         @PostCreate
@@ -360,8 +383,9 @@ public class Ui6DialogCreatorTest extends Ui6DialogTestSupport {
     public static class DialogFactoryWithPostCreateMethodAfterSubclassesExtendingSuperclass extends DialogFactoryWithPostCreateMethodAfterSubclasses {
 
         @TabFactory("tabInSubClass")
-        public void tabFactory2() {
+        public List<EditorPropertyDefinition> tabFactory2() {
             events.add("DialogFactoryWithPostCreateMethodAfterSubclassesExtendingSuperclass#tabInSubClass"); // 3
+            return Collections.emptyList();
         }
 
         @PostCreate
@@ -385,7 +409,7 @@ public class Ui6DialogCreatorTest extends Ui6DialogTestSupport {
     public void testPostCreateForAfterSubclassesPhaseIsInvokedLast() throws Exception {
 
         // GIVEN
-        BlossomDialogDescription description = new DialogDescriptionBuilder().buildDescription("id", "label", new DialogFactoryWithPostCreateMethodAfterSubclassesExtendingSuperclass());
+        BlossomDialogDescription description = new DialogDescriptionBuilder(ARGUMENT_RESOLVERS).buildDescription("id", "label", new DialogFactoryWithPostCreateMethodAfterSubclassesExtendingSuperclass());
         DialogCreationContext context = getDialogCreationContext();
         Ui6DialogCreator creator = creator();
 
@@ -412,18 +436,21 @@ public class Ui6DialogCreatorTest extends Ui6DialogTestSupport {
     public static class DialogWithTabsOrderedByName {
 
         @TabFactory("tab1")
-        public void tab1(ConfiguredTabDefinition tabDefinition) {
+        public List<EditorPropertyDefinition> tab1(ConfiguredTabDefinition tabDefinition) {
             tabDefinition.setLabel("this is tab 1");
+            return Collections.emptyList();
         }
 
         @TabFactory("tab2")
-        public void tab2(ConfiguredTabDefinition tabDefinition) {
+        public List<EditorPropertyDefinition> tab2(ConfiguredTabDefinition tabDefinition) {
             tabDefinition.setLabel("this is tab 2");
+            return Collections.emptyList();
         }
 
         @TabFactory("tab3")
-        public void tab3(ConfiguredTabDefinition tabDefinition) {
+        public List<EditorPropertyDefinition> tab3(ConfiguredTabDefinition tabDefinition) {
             tabDefinition.setLabel("this is tab 3");
+            return Collections.emptyList();
         }
     }
 
@@ -431,7 +458,7 @@ public class Ui6DialogCreatorTest extends Ui6DialogTestSupport {
     public void testSortTabsByName() throws Exception {
 
         // GIVEN
-        BlossomDialogDescription description = new DialogDescriptionBuilder().buildDescription(new DialogWithTabsOrderedByName(), null);
+        BlossomDialogDescription description = new DialogDescriptionBuilder(ARGUMENT_RESOLVERS).buildDescription(new DialogWithTabsOrderedByName(), null);
         DialogCreationContext context = getDialogCreationContext();
         mockProperty(Ui6DialogCreator.SORT_TABS_BY_LABEL_PROPERTY_NAME, "false");
         Ui6DialogCreator creator = creator();
@@ -449,18 +476,21 @@ public class Ui6DialogCreatorTest extends Ui6DialogTestSupport {
     public static class DialogWithTabsOrderedByLabel {
 
         @TabFactory("tab1")
-        public void tab1(ConfiguredTabDefinition tabDefinition) {
+        public List<EditorPropertyDefinition> tab1(ConfiguredTabDefinition tabDefinition) {
             tabDefinition.setLabel("this is tab 1");
+            return Collections.emptyList();
         }
 
         @TabFactory("tab2")
-        public void tab2(ConfiguredTabDefinition tabDefinition) {
+        public List<EditorPropertyDefinition> tab2(ConfiguredTabDefinition tabDefinition) {
             tabDefinition.setLabel("this is tab 2");
+            return Collections.emptyList();
         }
 
         @TabFactory("tab3")
-        public void tab3(ConfiguredTabDefinition tabDefinition) {
+        public List<EditorPropertyDefinition> tab3(ConfiguredTabDefinition tabDefinition) {
             tabDefinition.setLabel("this is tab 3");
+            return Collections.emptyList();
         }
     }
 
@@ -468,7 +498,7 @@ public class Ui6DialogCreatorTest extends Ui6DialogTestSupport {
     public void testSortTabsByLabel() throws Exception {
 
         // GIVEN
-        BlossomDialogDescription description = new DialogDescriptionBuilder().buildDescription(new DialogWithTabsOrderedByLabel(), null);
+        BlossomDialogDescription description = new DialogDescriptionBuilder(ARGUMENT_RESOLVERS).buildDescription(new DialogWithTabsOrderedByLabel(), null);
         DialogCreationContext context = getDialogCreationContext();
         mockProperty(Ui6DialogCreator.SORT_TABS_BY_LABEL_PROPERTY_NAME, "true");
         Ui6DialogCreator creator = creator();
@@ -485,7 +515,7 @@ public class Ui6DialogCreatorTest extends Ui6DialogTestSupport {
     public void testSetsBothLabelAndNameByDefault() throws Exception {
 
         // GIVEN
-        BlossomDialogDescription description = new DialogDescriptionBuilder().buildDescription(new SimpleFactory(), null);
+        BlossomDialogDescription description = new DialogDescriptionBuilder(ARGUMENT_RESOLVERS).buildDescription(new SimpleFactory(), null);
         DialogCreationContext context = getDialogCreationContext();
         Ui6DialogCreator creator = creator();
         assertTrue(creator.getSetTabLabels());
@@ -507,7 +537,7 @@ public class Ui6DialogCreatorTest extends Ui6DialogTestSupport {
     public void testSetsNoLabelIfAskedNotTo() throws Exception {
 
         // GIVEN
-        BlossomDialogDescription description = new DialogDescriptionBuilder().buildDescription(new SimpleFactory(), null);
+        BlossomDialogDescription description = new DialogDescriptionBuilder(ARGUMENT_RESOLVERS).buildDescription(new SimpleFactory(), null);
         DialogCreationContext context = getDialogCreationContext();
         mockProperty(Ui6DialogCreator.SET_TAB_LABELS_PROPERTY_NAME, "false");
         Ui6DialogCreator creator = creator();
@@ -536,7 +566,7 @@ public class Ui6DialogCreatorTest extends Ui6DialogTestSupport {
     }
 
     private Ui6DialogCreator creator() throws Exception {
-        Ui6DialogCreator creator = new Ui6DialogCreator();
+        Ui6DialogCreator creator = new Ui6DialogCreator(ARGUMENT_RESOLVERS);
         creator.afterPropertiesSet();
         return creator;
     }
diff --git a/magnolia-module-blossom/src/test/java/info/magnolia/module/blossom/template/TemplateExporterTest.java b/magnolia-module-blossom/src/test/java/info/magnolia/module/blossom/template/TemplateExporterTest.java
index 87329a7..8d14aa0 100644
--- a/magnolia-module-blossom/src/test/java/info/magnolia/module/blossom/template/TemplateExporterTest.java
+++ b/magnolia-module-blossom/src/test/java/info/magnolia/module/blossom/template/TemplateExporterTest.java
@@ -65,6 +65,7 @@ import info.magnolia.ui.form.config.TabBuilder;
 import info.magnolia.ui.framework.config.UiConfig;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Optional;
@@ -348,7 +349,7 @@ public class TemplateExporterTest extends MgnlTestCase {
 
         BlossomDispatcher dispatcher = mock(BlossomDispatcher.class);
 
-        TemplateExporter templateExporter = new TemplateExporter();
+        TemplateExporter templateExporter = new TemplateExporter(Collections.emptyList());
         templateExporter.setBlossomDispatcher(dispatcher);
         templateExporter.afterPropertiesSet();
 
