Index: builtin/src/main/java/org/hippoecm/frontend/plugins/standardworkflow/AddDocumentDialog.html
===================================================================
--- builtin/src/main/java/org/hippoecm/frontend/plugins/standardworkflow/AddDocumentDialog.html	(revision 48049)
+++ builtin/src/main/java/org/hippoecm/frontend/plugins/standardworkflow/AddDocumentDialog.html	(working copy)
@@ -50,6 +50,7 @@
           <br/>
         </td>
       </tr>
+      <wicket:child/>
     </table>
   </wicket:extend>
 </html>
Index: builtin/src/main/java/org/hippoecm/frontend/plugins/standardworkflow/FolderWorkflowPlugin.java
===================================================================
--- builtin/src/main/java/org/hippoecm/frontend/plugins/standardworkflow/FolderWorkflowPlugin.java	(revision 48049)
+++ builtin/src/main/java/org/hippoecm/frontend/plugins/standardworkflow/FolderWorkflowPlugin.java	(working copy)
@@ -1,12 +1,12 @@
 /*
  *  Copyright 2009-2014 Hippo B.V. (http://www.onehippo.com)
- * 
+ *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
  *  You may obtain a copy of the License at
- * 
+ *
  *       http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  *  Unless required by applicable law or agreed to in writing, software
  *  distributed under the License is distributed on an "AS IS" BASIS,
  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -220,7 +220,7 @@
 
                         public DeleteDialog(IModel messageModel, IWorkflowInvoker invoker, boolean deleteAllowed) {
                             super(null, messageModel, invoker);
-    
+
                             if (deleteAllowed) {
                                 setFocusOnOk();
                             } else {
@@ -228,12 +228,12 @@
                                 setFocusOnCancel();
                             }
                         }
-    
+
                         @Override
                         public IModel<String> getTitle() {
                             return new StringResourceModel("delete-title", FolderWorkflowPlugin.this, null);
                         }
-    
+
                         @Override
                         public IValueMap getProperties() {
                             return DialogConstants.SMALL;
@@ -310,6 +310,7 @@
                                 arguments.put("localName", localName);
 
                                 String path = workflow.add(category, addDocumentModel.getPrototype(), arguments);
+                                onWorkflowAdded(path);
                                 UserSession.get().getJcrSession().refresh(true);
                                 JcrNodeModel nodeModel = new JcrNodeModel(path);
                                 if (!nodeName.equals(localName)) {
@@ -340,6 +341,8 @@
         }
     }
 
+    protected void onWorkflowAdded(String path) {}
+
     private boolean isActionAvailable(final String action, final Map<String, Serializable> hints) {
         return hints.containsKey(action) && hints.get(action) instanceof Boolean && (Boolean) hints.get(action);
     }
@@ -367,15 +370,13 @@
         String locale = getCodecLocale();
         IModel<StringCodec> codecModel = CodecUtils.getNodeNameCodecModel(getPluginContext(), locale);
 
-        AddDocumentDialog dialog = new AddDocumentDialog(
+        AddDocumentDialog dialog = createAddDocumentDialog(
                 addDocumentModel,
-                new StringResourceModel(category, this, null),
                 category,
                 prototypes,
                 translated,
                 invoker,
-                codecModel,
-                getLocaleProvider()
+                codecModel
         );
 
         if (locale != null) {
@@ -385,6 +386,21 @@
         return dialog;
     }
 
+    protected AddDocumentDialog createAddDocumentDialog(AddDocumentArguments addDocumentModel, String category,
+                                                        Set<String> prototypes, boolean translated,
+                                                        IWorkflowInvoker invoker, IModel<StringCodec> codecModel) {
+        return new AddDocumentDialog(
+                addDocumentModel,
+                new StringResourceModel(category, this, null),
+                category,
+                prototypes,
+                translated,
+                invoker,
+                codecModel,
+                getLocaleProvider()
+        );
+    }
+
     protected IDataProvider<StdWorkflow> createListDataProvider(List<StdWorkflow> list) {
         return new ListDataProvider<>(list);
     }
Index: gallery/frontend/src/main/java/org/hippoecm/frontend/plugins/gallery/GalleryWorkflowPlugin$UploadDialog.html
===================================================================
--- gallery/frontend/src/main/java/org/hippoecm/frontend/plugins/gallery/GalleryWorkflowPlugin$UploadDialog.html	(revision 48049)
+++ gallery/frontend/src/main/java/org/hippoecm/frontend/plugins/gallery/GalleryWorkflowPlugin$UploadDialog.html	(working copy)
@@ -21,5 +21,6 @@
         </label>
         <select wicket:id="type" id="typeselect"/>
     </wicket:enclosure>
+    <wicket:child/>
 </wicket:extend>
 </html>
Index: gallery/frontend/src/main/java/org/hippoecm/frontend/plugins/gallery/GalleryWorkflowPlugin.java
===================================================================
--- gallery/frontend/src/main/java/org/hippoecm/frontend/plugins/gallery/GalleryWorkflowPlugin.java	(revision 48049)
+++ gallery/frontend/src/main/java/org/hippoecm/frontend/plugins/gallery/GalleryWorkflowPlugin.java	(working copy)
@@ -129,10 +129,10 @@
             try {
                 WorkflowDescriptorModel workflowDescriptorModel = (WorkflowDescriptorModel) GalleryWorkflowPlugin.this
                         .getDefaultModel();
-                
+
                 GalleryWorkflow workflow = (GalleryWorkflow) manager
                         .getWorkflow(workflowDescriptorModel.getObject());
-                
+
                 String nodeName = getNodeNameCodec(workflowDescriptorModel.getNode()).encode(fileName);
                 String localName = getLocalizeCodec().encode(fileName);
                 Document document = workflow.createGalleryItem(nodeName, type);
@@ -153,6 +153,7 @@
             try {
                 getGalleryProcessor().makeImage(node, is, mimeType, fileName);
                 node.getSession().save();
+                onGalleryItemCreation(node);
                 newItems.add(node.getPath());
             } catch (Exception ex) {
                 remove(manager, node);
@@ -166,6 +167,8 @@
         }
     }
 
+    protected void onGalleryItemCreation(Node node) {}
+
     private void remove(final WorkflowManager manager, final HippoNode node) {
         try {
             DefaultWorkflow defaultWorkflow = (DefaultWorkflow) manager.getWorkflow("core", node);
@@ -248,11 +251,15 @@
             typeComponent = new Label("type", "default").setVisible(false);
         }
 
-        UploadDialog dialog = new UploadDialog(getPluginContext(), getPluginConfig());
+        UploadDialog dialog = createUploadDialog();
         dialog.add(typeComponent);
         return dialog;
     }
 
+    protected UploadDialog createUploadDialog() {
+        return new UploadDialog(getPluginContext(), getPluginConfig());
+    }
+
     protected StringCodec getLocalizeCodec() {
         return CodecUtils.getDisplayNameCodec(getPluginContext());
     }
