You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by sv...@apache.org on 2021/07/23 15:39:49 UTC

[wicket] 01/01: removed queuing

This is an automated email from the ASF dual-hosted git repository.

svenmeier pushed a commit to branch remove-queuing
in repository https://gitbox.apache.org/repos/asf/wicket.git

commit 070cb953b9afb13b3c6a21236cc9169d79a9b2d6
Author: Sven Meier <sv...@apache.org>
AuthorDate: Wed Jun 2 23:06:39 2021 +0200

    removed queuing
---
 .../java/org/apache/wicket/ChildToDequeueType.java |   49 -
 .../java/org/apache/wicket/DequeueContext.java     |  301 ------
 .../java/org/apache/wicket/DequeueTagAction.java   |   27 -
 .../main/java/org/apache/wicket/IQueueRegion.java  |   61 --
 .../java/org/apache/wicket/MarkupContainer.java    |  348 ------
 .../src/main/java/org/apache/wicket/Page.java      |    3 +-
 .../apache/wicket/markup/html/border/Border.java   |  147 +--
 .../markup/html/form/FormComponentPanel.java       |    3 +-
 .../apache/wicket/markup/html/panel/Fragment.java  |   17 +-
 .../org/apache/wicket/markup/html/panel/Panel.java |   26 +-
 .../wicket/markup/repeater/AbstractRepeater.java   |   32 +-
 .../apache/wicket/BehavioursDetachTestPage.java    |    2 +-
 .../apache/wicket/OnComponentTagListenerTest.java  |    5 +-
 .../markup/html/border/BorderWithFormPage.java     |   40 -
 .../markup/html/border/ComponentBorderTest.java    |   24 -
 .../markup/html/internal/AjaxEnclosurePage_4.java  |    8 +-
 .../html/internal/ListViewInContainerPage.java     |    4 +-
 .../wicket/markupFragments/MarkupFragmentTest.java |    3 -
 .../queueing/ComponentQueueingPerformanceTest.java |  400 -------
 .../wicket/queueing/ComponentQueueingTest.java     | 1135 --------------------
 .../queueing/transparentresolvers/SubPage.java     |    2 +-
 .../TransparentContainerQueuePage.java             |    2 +-
 .../ajax/builtin/modal/ModalDialogPage.java        |   39 +-
 23 files changed, 42 insertions(+), 2636 deletions(-)

diff --git a/wicket-core/src/main/java/org/apache/wicket/ChildToDequeueType.java b/wicket-core/src/main/java/org/apache/wicket/ChildToDequeueType.java
deleted file mode 100644
index 29cfdfe..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/ChildToDequeueType.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket;
-
-import org.apache.wicket.markup.html.border.Border;
-
-public enum ChildToDequeueType
-{
-	NULL, GENERIC_COMPONENT, MARKUP_CONTAINER, BORDER, QUEUE_REGION;
-	
-	public static ChildToDequeueType fromChild(Component child) 
-	{
-		if (child == null)
-		{
-			return NULL;
-		}
-		
-		if (child instanceof Border)
-		{
-			return BORDER;
-		}
-		
-		if (child instanceof IQueueRegion)
-		{
-			return QUEUE_REGION;
-		}
-		
-		if (child instanceof MarkupContainer)
-		{
-			return MARKUP_CONTAINER;
-		}
-		
-		return GENERIC_COMPONENT;
-	}
-}
diff --git a/wicket-core/src/main/java/org/apache/wicket/DequeueContext.java b/wicket-core/src/main/java/org/apache/wicket/DequeueContext.java
deleted file mode 100644
index 9c431e9..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/DequeueContext.java
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket;
-
-import java.util.ArrayDeque;
-
-import org.apache.wicket.markup.ComponentTag;
-import org.apache.wicket.markup.IMarkupFragment;
-import org.apache.wicket.markup.MarkupElement;
-
-/**
- * Context for component dequeueing. Keeps track of markup position and container stack.
- * 
- * @author igor
- *
- */
-public final class DequeueContext
-{
-	private final IMarkupFragment markup;
-	private int index;
-	private ComponentTag next;
-	private ArrayDeque<ComponentTag> tags = new ArrayDeque<>();
-	private final boolean skipFirst;
-	private ComponentTag first;
-
-	private ArrayDeque<MarkupContainer> containers = new ArrayDeque<>();
-
-	/** A bookmark for the DequeueContext stack */
-	public static final class Bookmark
-	{
-		private final int index;
-		private final ComponentTag next;
-		private final ArrayDeque<ComponentTag> tags;
-		private final ArrayDeque<MarkupContainer> containers;
-
-		private Bookmark(DequeueContext parser)
-		{
-			this.index = parser.index;
-			this.next = parser.next;
-			this.tags = new ArrayDeque<>(parser.tags);
-			this.containers = new ArrayDeque<>(parser.containers);
-		}
-
-		private void restore(DequeueContext parser)
-		{
-			parser.index = index;
-			parser.next = next;
-			parser.tags = new ArrayDeque<>(tags);
-			parser.containers = new ArrayDeque<>(containers);
-		}
-	}
-
-	public DequeueContext(IMarkupFragment markup, MarkupContainer root, boolean skipFirst)
-	{
-		this.markup = markup;
-		this.skipFirst = skipFirst;
-		this.containers.push(root);
-		this.next = nextTag();
-	}
-
-	/**
-	 * Saves the state of the context into a bookmark which can later be used to restore it.
-	 */
-	public Bookmark save()
-	{
-		return new Bookmark(this);
-	}
-
-	/**
-	 * Restores the state of the context from the bookmark
-	 * 
-	 * @param bookmark
-	 */
-	public void restore(Bookmark bookmark)
-	{
-		bookmark.restore(this);
-	}
-
-	/**
-	 * Peeks markup tag that would be retrieved by call to {@link #takeTag()}
-	 * 
-	 * @return
-	 */
-	public ComponentTag peekTag()
-	{
-		return next;
-	}
-
-	/**
-	 * Retrieves the next markup tag
-	 * 
-	 * @return
-	 */
-	public ComponentTag takeTag()
-	{
-		ComponentTag taken = next;
-
-		if (taken == null)
-		{
-			return null;
-		}
-
-		if (taken.isOpen() && !taken.hasNoCloseTag())
-		{
-			tags.push(taken);
-		}
-		else if (tags.size() > 0 && taken.closes(tags.peek()))
-		{
-			tags.pop();
-		}
-		next = nextTag();
-		return taken;
-	}
-
-	/**
-	 * Skips to the closing tag of the tag retrieved from last call to {@link #takeTag()}
-	 */
-	public void skipToCloseTag()
-	{
-		while (!next.closes(tags.peek()))
-		{
-			next = nextTag();
-		}
-	}
-
-	private ComponentTag nextTag()
-	{
-		if (skipFirst && first == null)
-		{
-			for (; index < markup.size(); index++)
-			{
-				MarkupElement element = markup.get(index);
-				if (element instanceof ComponentTag)
-				{
-					first = (ComponentTag)element;
-					index++;
-					break;
-				}
-			}
-		}
-
-		for (; index < markup.size(); index++)
-		{
-			MarkupElement element = markup.get(index);
-			if (element instanceof ComponentTag)
-			{
-				ComponentTag tag = (ComponentTag)element;
-
-				if (tag.isOpen() || tag.isOpenClose())
-				{
-					DequeueTagAction action = canDequeueTag(tag);
-					switch (action)
-					{
-						case IGNORE :
-							continue;
-						case DEQUEUE :
-							index++;
-							return tag;
-						case SKIP : // skip to close tag
-							boolean found = false;
-							for (; index < markup.size(); index++)
-							{
-								if ((markup.get(index) instanceof ComponentTag)
-									&& markup.get(index).closes(tag))
-								{
-									found = true;
-									break;
-								}
-							}
-							if (!found)
-							{
-								throw new IllegalStateException(String.format(
-									"Could not find close tag for tag '%s' in markup: %s ", tag,
-									markup));
-							}
-
-					}
-				}
-				else
-				{
-					// closed tag
-					ComponentTag open = tag.isClose() ? tag.getOpenTag() : tag;
-
-					if (skipFirst && first != null && open == first)
-					{
-						continue;
-					}
-
-					switch (canDequeueTag(open))
-					{
-						case DEQUEUE :
-							index++;
-							return tag;
-						case IGNORE :
-							continue;
-						case SKIP :
-							throw new IllegalStateException(String.format(
-								"Should not see closed tag of skipped open tag '%s' in markup:%s",
-								tag, markup));
-					}
-				}
-			}
-		}
-		return null;
-	}
-
-	private DequeueTagAction canDequeueTag(ComponentTag open)
-	{
-		if (containers.size() < 1)
-		{
-			// TODO queueing message: called too early
-			throw new IllegalStateException();
-		}
-
-		DequeueTagAction action;
-		for (MarkupContainer container : containers)
-		{
-			action = container.canDequeueTag(open);
-			if (action != null)
-			{
-				return action;
-			}
-		}
-		return DequeueTagAction.IGNORE;
-	}
-
-	/**
-	 * Checks if the tag returned by {@link #peekTag()} is either open or open-close.
-	 * 
-	 * @return
-	 */
-	public boolean isAtOpenOrOpenCloseTag()
-	{
-		ComponentTag tag = peekTag();
-		return tag != null && (tag.isOpen() || tag.isOpenClose());
-	}
-
-	/**
-	 * Retrieves the container on the top of the containers stack
-	 * 
-	 * @return
-	 */
-	public MarkupContainer peekContainer()
-	{
-		return containers.peek();
-	}
-
-	/**
-	 * Pushes a container onto the container stack
-	 * 
-	 * @param container
-	 */
-	public void pushContainer(MarkupContainer container)
-	{
-		containers.push(container);
-	}
-
-	/**
-	 * Pops a container from the container stack
-	 * 
-	 * @return
-	 */
-	public MarkupContainer popContainer()
-	{
-		return containers.pop();
-	}
-
-	/**
-	 * Searches the container stack for a component that can be dequeude
-	 * 
-	 * @param tag
-	 * @return
-	 */
-	public Component findComponentToDequeue(ComponentTag tag)
-	{
-		for (MarkupContainer container : containers)
-		{
-			Component child = container.findComponentToDequeue(tag);
-			if (child != null)
-			{
-				return child;
-			}
-		}
-		return null;
-	}
-
-}
diff --git a/wicket-core/src/main/java/org/apache/wicket/DequeueTagAction.java b/wicket-core/src/main/java/org/apache/wicket/DequeueTagAction.java
deleted file mode 100644
index 461cac4..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/DequeueTagAction.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket;
-
-public enum DequeueTagAction
-{
-	/** dequeue the tag */
-	DEQUEUE,
-	/** skip this tag and all its children */
-	SKIP,
-	/** ignore this tag, skip it but do not skip its children */
-	IGNORE;
-}
diff --git a/wicket-core/src/main/java/org/apache/wicket/IQueueRegion.java b/wicket-core/src/main/java/org/apache/wicket/IQueueRegion.java
deleted file mode 100644
index b6ef154..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/IQueueRegion.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket;
-
-import org.apache.wicket.markup.IMarkupFragment;
-
-
-/**
- * Demarcates components that act as a root can dequeue children. These are usually components with
- * associated markup since the markup is needed to dequeue.
- * 
- * It is also important to note that components queued outside of a region cannot be dequeued into
- * it since regions act as roots for the dequeue process because they contain the markup. As such,
- * for example, a component queued in a page cannot be dequeued into a page child that is a panel
- * because a panel is an {@link IQueueRegion}.
- * 
- * @author igor
- * 
- */
-public interface IQueueRegion
-{
-	/**
-	 * Creates a new {@link DequeueContext} that will be used to dequeue children of this region.
-	 * 
-	 * Usually containers will create a context with their associated markup by getting it via
-	 * {@link MarkupContainer#getAssociatedMarkup()}, but components that do not render markup in a
-	 * standard way (such as repeaters and borders) may choose to override this method to implement
-	 * custom behavior for the dequeueing process.
-	 */
-	DequeueContext newDequeueContext();
-
-	/**
-	 * Starts component dequeueing on this {@link IQueueRegion}. This is the entry point into the
-	 * dequeuing process, it creates the {@link DequeueContext} and delegates the operation to the
-	 * {@link org.apache.wicket.MarkupContainer#dequeue(DequeueContext)} method which performs the
-	 * actual dequeueing. The context's markup is retrieved using the {@link MarkupContainer#getAssociatedMarkup()}.
-	 */
-	void dequeue();
-	
-	/**
-	 * Returns the markup to use for queuing. Normally, this is the markup of the component 
-	 * implementing this interface.
-	 * 
-	 * @return the markup to use for queuing
-	 */
-	IMarkupFragment getRegionMarkup();
-}
diff --git a/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
index e095319..007593a 100644
--- a/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
+++ b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
@@ -35,7 +35,6 @@ import org.apache.commons.collections4.map.LinkedMap;
 import org.apache.wicket.behavior.OutputMarkupContainerClassNameBehavior;
 import org.apache.wicket.core.util.string.ComponentStrings;
 import org.apache.wicket.markup.ComponentTag;
-import org.apache.wicket.markup.ComponentTag.IAutoComponentFactory;
 import org.apache.wicket.markup.IMarkupFragment;
 import org.apache.wicket.markup.Markup;
 import org.apache.wicket.markup.MarkupElement;
@@ -46,7 +45,6 @@ import org.apache.wicket.markup.MarkupStream;
 import org.apache.wicket.markup.MarkupType;
 import org.apache.wicket.markup.WicketTag;
 import org.apache.wicket.markup.html.border.Border;
-import org.apache.wicket.markup.html.form.AutoLabelResolver;
 import org.apache.wicket.markup.resolver.ComponentResolvers;
 import org.apache.wicket.model.IComponentInheritedModel;
 import org.apache.wicket.model.IModel;
@@ -1780,186 +1778,6 @@ public abstract class MarkupContainer extends Component implements Iterable<Comp
 
 		modCounter++;
 		removals_clear();
-
-		if (queue != null && !queue.isEmpty() && hasBeenRendered())
-		{
-			throw new WicketRuntimeException(
-					String.format("Detach called on component with id '%s' while it had a non-empty queue: %s",
-							getId(), queue));
-		}
-	}
-
-	private transient ComponentQueue queue;
-
-	/**
-	 * Queues one or more components to be dequeued later. The advantage of this method over the
-	 * {@link #add(Component...)} method is that the component does not have to be added to its
-	 * direct parent, only to a parent upstream; it will be dequeued into the correct parent using
-	 * the hierarchy defined in the markup. This allows the component hierarchy to be maintained only
-	 * in markup instead of in markup and in java code; affording designers and developers more
-	 * freedom when moving components in markup.
-	 * 
-	 * @param components
-	 *             the components to queue
-	 * @return {@code this} for method chaining             
-	 */
-	public MarkupContainer queue(Component... components)
-	{
-		if (queue == null)
-		{
-			queue = new ComponentQueue();
-		}
-		queue.add(components);
-		
-		Page page = findPage();
-
-		if (page != null)
-		{
-			dequeue();			
-		}
-
-		return this;
-	}
-
-	/**
-	 * @see IQueueRegion#dequeue()
-	 */
-	public void dequeue()
-	{
-		if (this instanceof IQueueRegion)
-		{
-			DequeueContext dequeue = newDequeueContext();
-			dequeuePreamble(dequeue);
-		}
-		else
-		{
-			MarkupContainer queueRegion = (MarkupContainer)findParent(IQueueRegion.class);
-
-			if (queueRegion == null)
-			{
-				return;
-			}
-			
-			MarkupContainer anchestor = this;
-			boolean hasQueuedChildren = !isQueueEmpty();
-			
-			while (!hasQueuedChildren && anchestor != queueRegion)
-			{
-				anchestor = anchestor.getParent();
-				hasQueuedChildren = !anchestor.isQueueEmpty();
-			}
-			
-			if (hasQueuedChildren && !queueRegion.getRequestFlag(RFLAG_CONTAINER_DEQUEING))
-			{
-				queueRegion.dequeue();
-			}
-		}
-	}
-
-	@Override
-	protected void onInitialize()
-	{
-		super.onInitialize();
-		dequeue();
-	}
-	/**
-	 * @return {@code true} when one or more components are queued
-	 */
-	private boolean isQueueEmpty()
-	{
-		return queue == null || queue.isEmpty();
-	}
-
-	/**
-	 * @return {@code true} when this markup container is a queue region
-	 */
-	private boolean isQueueRegion() 
-	{
-		return IQueueRegion.class.isInstance(this);
-	}
-
-	/**
-	 * Run preliminary operations before running {@link #dequeue(DequeueContext)}. More in detail it
-	 * throws an exception if the container is already dequeuing, and it also takes care of setting
-	 * flag {@code RFLAG_CONTAINER_DEQUEING} to true before running {@link #dequeue(DequeueContext)}
-	 * and setting it back to false after dequeuing is completed.
-	 * 
-	 * @param dequeue
-	 *            the dequeue context to use
-	 */
-	protected void dequeuePreamble(DequeueContext dequeue)
-	{
-		if (getRequestFlag(RFLAG_CONTAINER_DEQUEING))
-		{
-			throw new IllegalStateException("This container is already dequeing: " + this);
-		}
-
-		setRequestFlag(RFLAG_CONTAINER_DEQUEING, true);
-		try
-		{
-			if (dequeue == null)
-			{
-				return;
-			}
-
-			if (dequeue.peekTag() != null)
-			{
-				dequeue(dequeue);
-			}
-		}
-		finally
-		{
-			setRequestFlag(RFLAG_CONTAINER_DEQUEING, false);
-		}
-	}
-
-	/**
-	 * Dequeues components. The default implementation iterates direct children of this container
-	 * found in its markup and tries to find matching
-	 * components in queues filled by a call to {@link #queue(Component...)}. It then delegates the
-	 * dequeueing to these children.
-	 * 
-	 * 
-	 * Certain components that implement custom markup behaviors (such as repeaters and borders)
-	 * override this method to bring dequeueing in line with their custom markup handling.
-	 * 
-	 * @param dequeue
-	 *             the dequeue context to use     
-	 */
-	public void dequeue(DequeueContext dequeue)
-	{
-		while (dequeue.isAtOpenOrOpenCloseTag())
-		{
-			ComponentTag tag = dequeue.takeTag();
-	
-			// see if child is already added to parent
-			Component child = findChildComponent(tag);
-
-			if (child == null)
-			{
-				// the container does not yet have a child with this id, see if we can
-				// dequeue
-				child = dequeue.findComponentToDequeue(tag);
-				
-				//if tag has an autocomponent factory let's use it
-				if (child == null && tag.getAutoComponentFactory() != null)
-				{
-					IAutoComponentFactory autoComponentFactory = tag.getAutoComponentFactory();
-					child = autoComponentFactory.newComponent(this, tag);
-				}
-				
-				if (child != null)
-				{
-					addDequeuedComponent(child, tag);
-				}
-			}
-			
-			if (tag.isOpen() && !tag.hasNoCloseTag())
-            {
-			    dequeueChild(child, tag, dequeue);
-            }
-		}
-
 	}
 
 	/**
@@ -1975,172 +1793,6 @@ public abstract class MarkupContainer extends Component implements Iterable<Comp
 	}
 	
 	/**
-	 * Propagates dequeuing to child component.
-	 * 
-	 * @param child
-	 *             the child component
-	 * @param tag
-	 *             the child tag
-	 * @param dequeue
-	 *             the dequeue context to use
-	 */
-	private void dequeueChild(Component child, ComponentTag tag, DequeueContext dequeue)
-	{
-		ChildToDequeueType childType = ChildToDequeueType.fromChild(child);
-		
-		if (childType == ChildToDequeueType.QUEUE_REGION ||
-			childType == ChildToDequeueType.BORDER)
-		{
-			((IQueueRegion)child).dequeue();			
-		}
-		
-		if (childType == ChildToDequeueType.BORDER) 
-		{
-            Border childContainer = (Border)child;
-            // propagate dequeuing to border's body
-            MarkupContainer body = childContainer.getBodyContainer();
-
-            dequeueChildrenContainer(dequeue, body);
-		}
-		
-		if (childType == ChildToDequeueType.MARKUP_CONTAINER)
-		{
-            // propagate dequeuing to containers
-            MarkupContainer childContainer = (MarkupContainer)child;
-
-            dequeueChildrenContainer(dequeue, childContainer);			
-		}
-		
-		if (childType == ChildToDequeueType.NULL || 
-			childType == ChildToDequeueType.QUEUE_REGION)
-		{
-			dequeue.skipToCloseTag();
-		}
-
-		// pull the close tag off
-		ComponentTag close = dequeue.takeTag();
-		do
-		{
-			if (close != null && close.closes(tag))
-			{
-				return;
-			}
-		} while ((close = dequeue.takeTag()) != null);
-
-		throw new IllegalStateException(String.format("Could not find the closing tag for '%s'", tag));
-	}
-
-    private void dequeueChildrenContainer(DequeueContext dequeue, MarkupContainer child)
-    {
-        dequeue.pushContainer(child);
-        child.dequeue(dequeue);
-        dequeue.popContainer();
-    }
-
-    /** @see IQueueRegion#newDequeueContext() */
-	public DequeueContext newDequeueContext()
-	{
-		IMarkupFragment markup = getRegionMarkup();
-		if (markup == null)
-		{
-			return null;
-		}
-
-		return new DequeueContext(markup, this, false);
-	}
-
-	/** @see IQueueRegion#getRegionMarkup() */
-	public IMarkupFragment getRegionMarkup()
-	{
-		return getAssociatedMarkup();
-	}
-
-	/**
-	 * Checks if this container can dequeue a child represented by the specified tag. This method
-	 * should be overridden when containers can dequeue components represented by non-standard tags.
-	 * For example, borders override this method and dequeue their body container when processing
-	 * the body tag.
-	 * 
-	 * By default all {@link ComponentTag}s are supported as well as {@link WicketTag}s that return
-	 * a non-null value from {@link WicketTag#getAutoComponentFactory()} method.
-	 * 
-	 * @param tag
-	 */
-	protected DequeueTagAction canDequeueTag(ComponentTag tag)
-	{
-		if (tag instanceof WicketTag)
-		{
-			WicketTag wicketTag = (WicketTag)tag;
-			if (wicketTag.isContainerTag())
-			{
-				return DequeueTagAction.DEQUEUE;
-			}
-			else if (wicketTag.getAutoComponentFactory() != null)
-			{
-				return DequeueTagAction.DEQUEUE;
-			}
-			else if (wicketTag.isFragmentTag())
-			{
-				return DequeueTagAction.SKIP;
-			}
-			else if (wicketTag.isChildTag())
-			{
-				return DequeueTagAction.IGNORE;
-			}
-			else if (wicketTag.isHeadTag())
-			{
-				return DequeueTagAction.SKIP;
-			}
-			else if (wicketTag.isLinkTag())
-			{
-				return DequeueTagAction.DEQUEUE;
-			}
-			else
-			{
-				return null; // don't know
-			}
-		}
-		
-		//if is a label tag, ignore it
-		if (tag.isAutoComponentTag() 
-			&& tag.getId().startsWith(AutoLabelResolver.LABEL_ATTR))
-		{
-			return DequeueTagAction.IGNORE;
-		}
-		
-		return DequeueTagAction.DEQUEUE;
-	}
-
-	/**
-	 * Queries this container to find a child that can be dequeued that matches the specified tag.
-	 * The default implementation will check if there is a component in the queue that has the same
-	 * id as a tag, but sometimes custom tags can be dequeued and in those situations this method
-	 * should be overridden.
-	 * 
-	 * @param tag
-	 * @return
-	 */
-	public Component findComponentToDequeue(ComponentTag tag)
-	{
-		return queue == null ? null : queue.remove(tag.getId());
-	}
-
-	/**
-	 * Adds a dequeued component to this container. This method should rarely be overridden because
-	 * the common case of simply forwarding the component to
-	 * {@link MarkupContainer#add(Component...)} method should cover most cases. Components that
-	 * implement a custom hierarchy, such as borders, may wish to override it to support edge-case
-	 * non-standard behavior.
-	 * 
-	 * @param component
-	 * @param tag
-	 */
-	protected void addDequeuedComponent(Component component, ComponentTag tag)
-	{
-		add(component);
-	}
-
-	/**
 	 * Returns a sequential {@code Stream} with the direct children of this markup container as its
 	 * source. This stream doesn't traverse the component tree.
 	 *
diff --git a/wicket-core/src/main/java/org/apache/wicket/Page.java b/wicket-core/src/main/java/org/apache/wicket/Page.java
index d204335..180bc54 100644
--- a/wicket-core/src/main/java/org/apache/wicket/Page.java
+++ b/wicket-core/src/main/java/org/apache/wicket/Page.java
@@ -84,8 +84,7 @@ import org.slf4j.LoggerFactory;
  */
 public abstract class Page extends MarkupContainer
 	implements
-		IRequestablePage,
-		IQueueRegion
+		IRequestablePage
 {
 	/** True if the page hierarchy has been modified in the current request. */
 	private static final int FLAG_IS_DIRTY = FLAG_RESERVED3;
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/border/Border.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/border/Border.java
index 1feea65..b36f3e5 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/border/Border.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/border/Border.java
@@ -17,9 +17,6 @@
 package org.apache.wicket.markup.html.border;
 
 import org.apache.wicket.Component;
-import org.apache.wicket.DequeueContext;
-import org.apache.wicket.DequeueTagAction;
-import org.apache.wicket.IQueueRegion;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.IMarkupFragment;
@@ -28,8 +25,6 @@ import org.apache.wicket.markup.MarkupException;
 import org.apache.wicket.markup.MarkupFragment;
 import org.apache.wicket.markup.MarkupStream;
 import org.apache.wicket.markup.TagUtils;
-import org.apache.wicket.markup.WicketTag;
-import org.apache.wicket.markup.html.MarkupUtil;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.panel.BorderMarkupSourcingStrategy;
 import org.apache.wicket.markup.html.panel.IMarkupSourcingStrategy;
@@ -137,7 +132,7 @@ import org.apache.wicket.util.lang.Args;
  * @author Jonathan Locke
  * @author Juergen Donnerstag
  */
-public abstract class Border extends WebMarkupContainer implements IComponentResolver, IQueueRegion
+public abstract class Border extends WebMarkupContainer implements IComponentResolver
 {
 	private static final long serialVersionUID = 1L;
 
@@ -166,7 +161,7 @@ public abstract class Border extends WebMarkupContainer implements IComponentRes
 		super(id, model);
 
 		body = new BorderBodyContainer(id + "_" + BODY);
-		queueToBorder(body);
+		addToBorder(body);
 	}
 	
 	/**
@@ -313,33 +308,6 @@ public abstract class Border extends WebMarkupContainer implements IComponentRes
 		return this;
 	}
 
-	@Override
-	public Border queue(Component... components)
-	{
-		getBodyContainer().queue(components);
-		return this;
-	}
-	
-	@Override
-	protected void onConfigure() 
-	{
-		super.onConfigure();
-		dequeue();
-	}
-	
-	/**
-	 * Queues children components to the Border itself
-	 *
-	 * @param children
-	 *            the children components to queue
-	 * @return this
-	 */
-	public Border queueToBorder(final Component... children)
-	{
-		super.queue(children);
-		return this;
-	}
-
 	/**
 	 * Removes child from the Border itself
 	 * 
@@ -455,7 +423,7 @@ public abstract class Border extends WebMarkupContainer implements IComponentRes
 	/**
 	 * The container to be associated with the &lt;wicket:body&gt; tag
 	 */
-	public class BorderBodyContainer extends WebMarkupContainer implements IQueueRegion
+	public class BorderBodyContainer extends WebMarkupContainer
 	{
 		private static final long serialVersionUID = 1L;
 
@@ -592,112 +560,5 @@ public abstract class Border extends WebMarkupContainer implements IComponentRes
 
 			return markup.find(child.getId());
 		}
-
-		@Override
-		public DequeueContext newDequeueContext()
-		{
-			Border border = findParent(Border.class);
-			IMarkupFragment fragment = border.getMarkup();
-
-			if (fragment == null)
-			{
-				return null;
-			}
-
-			return new DequeueContext(fragment, this, true);
-		}
-
-		@Override
-		public Component findComponentToDequeue(ComponentTag tag)
-		{
-			/*
-			 * the body container is allowed to search for queued components all
-			 * the way to the page even though it is an IQueueRegion so it can
-			 * find components queued below the border
-			 */
-
-			Component component = super.findComponentToDequeue(tag);
-			if (component != null)
-			{
-				return component;
-			}
-
-			MarkupContainer cursor = getParent();
-			while (cursor != null)
-			{
-				component = cursor.findComponentToDequeue(tag);
-				if (component != null)
-				{
-					return component;
-				}
-				if (cursor instanceof BorderBodyContainer)
-				{
-					// optimization - find call above would've already recursed
-					// to page
-					break;
-				}
-				cursor = cursor.getParent();
-			}
-			return null;
-		}
-	}
-
-	@Override
-	protected DequeueTagAction canDequeueTag(ComponentTag tag)
-	{
-		if (canDequeueBody(tag))
-		{
-			return DequeueTagAction.DEQUEUE;
-		}
-
-		return super.canDequeueTag(tag);
-	}
-
-	@Override
-	public Component findComponentToDequeue(ComponentTag tag)
-	{
-		if (canDequeueBody(tag))
-		{
-			//synch the tag id with the one of the body component
-			tag.setId(body.getId());
-		}
-		
-		return super.findComponentToDequeue(tag);
-	}
-
-	private boolean canDequeueBody(ComponentTag tag)
-	{
-		boolean isBodyTag = (tag instanceof WicketTag) && ((WicketTag)tag).isBodyTag();
-		
-		return isBodyTag;
-	}
-
-	@Override
-	protected void addDequeuedComponent(Component component, ComponentTag tag)
-	{
-		// components queued in border get dequeued into the border not into the body container
-		super.add(component);
-	}
-	
-	/**
-	 * Returns the markup inside &lt;wicket:border&gt; tag.
-	 * If such tag is not found, all the markup is returned.
-	 * 
-	 * @see IQueueRegion#getRegionMarkup() 
-	 */
-	@Override
-	public IMarkupFragment getRegionMarkup()
-	{
-		IMarkupFragment markup = super.getRegionMarkup();
-		
-		if (markup == null)
-		{
-			return markup;
-		}
-		
-		IMarkupFragment borderMarkup = MarkupUtil.findStartTag(markup, BORDER);
-		
-		return borderMarkup != null ? borderMarkup : markup;
 	}
-	
-}
+}
\ No newline at end of file
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponentPanel.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponentPanel.java
index 5fe284f..b8b661b 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponentPanel.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponentPanel.java
@@ -16,7 +16,6 @@
  */
 package org.apache.wicket.markup.html.form;
 
-import org.apache.wicket.IQueueRegion;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.panel.IMarkupSourcingStrategy;
 import org.apache.wicket.markup.html.panel.PanelMarkupSourcingStrategy;
@@ -109,7 +108,7 @@ import org.apache.wicket.util.visit.IVisitor;
  * @param <T>
  *            The model object type
  */
-public abstract class FormComponentPanel<T> extends FormComponent<T> implements IQueueRegion
+public abstract class FormComponentPanel<T> extends FormComponent<T>
 {
 	private static final long serialVersionUID = 1L;
 
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/Fragment.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/Fragment.java
index 25e9b10..3b3ae58 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/Fragment.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/Fragment.java
@@ -17,8 +17,6 @@
 package org.apache.wicket.markup.html.panel;
 
 import org.apache.wicket.Component;
-import org.apache.wicket.DequeueContext;
-import org.apache.wicket.IQueueRegion;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.markup.IMarkupFragment;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -48,7 +46,7 @@ import org.apache.wicket.util.lang.Args;
  * 
  * @author Juergen Donnerstag
  */
-public class Fragment extends WebMarkupContainer implements IQueueRegion
+public class Fragment extends WebMarkupContainer
 {
 	private static final long serialVersionUID = 1L;
 
@@ -131,17 +129,4 @@ public class Fragment extends WebMarkupContainer implements IQueueRegion
 	{
 		return associatedMarkupId;
 	}
-
-
-	@Override
-	public DequeueContext newDequeueContext()
-	{
-		IMarkupFragment markup = getMarkupSourcingStrategy().getMarkup(this, null);
-		if (markup == null)
-		{
-			return null;
-		}
-
-		return new DequeueContext(markup, this, true);
-	}
 }
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/Panel.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/Panel.java
index 1520c07..7926b99 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/Panel.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/Panel.java
@@ -16,7 +16,6 @@
  */
 package org.apache.wicket.markup.html.panel;
 
-import org.apache.wicket.IQueueRegion;
 import org.apache.wicket.markup.IMarkupFragment;
 import org.apache.wicket.markup.html.MarkupUtil;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -52,7 +51,7 @@ import org.apache.wicket.model.IModel;
  * @author Jonathan Locke
  * @author Juergen Donnerstag
  */
-public abstract class Panel extends WebMarkupContainer implements IQueueRegion
+public abstract class Panel extends WebMarkupContainer
 {
 	private static final long serialVersionUID = 1L;
 
@@ -83,25 +82,4 @@ public abstract class Panel extends WebMarkupContainer implements IQueueRegion
 	{
 		return new PanelMarkupSourcingStrategy(false);
 	}
-	
-	/**
-	 * Returns the markup inside &lt;wicket:panel&gt; tag.
-	 * If such tag is not found, all the markup is returned.
-	 * 
-	 * @see IQueueRegion#getRegionMarkup() 
-	 */
-	@Override
-	public IMarkupFragment getRegionMarkup()
-	{
-		IMarkupFragment markup = super.getRegionMarkup();
-		
-		if (markup == null)
-		{
-			return markup;
-		}
-		
-		IMarkupFragment panelMarkup = MarkupUtil.findStartTag(markup, PANEL);
-		
-		return panelMarkup != null ? panelMarkup : markup;
-	}
-}
+}
\ No newline at end of file
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/repeater/AbstractRepeater.java b/wicket-core/src/main/java/org/apache/wicket/markup/repeater/AbstractRepeater.java
index 25e320a..3ea03ea 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/repeater/AbstractRepeater.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/repeater/AbstractRepeater.java
@@ -21,9 +21,6 @@ import java.util.Iterator;
 import java.util.Set;
 
 import org.apache.wicket.Component;
-import org.apache.wicket.DequeueContext;
-import org.apache.wicket.DequeueContext.Bookmark;
-import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.markup.IMarkupFragment;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.model.IModel;
@@ -158,31 +155,4 @@ public abstract class AbstractRepeater extends WebMarkupContainer
 	 */
 	protected abstract void onPopulate();
 
-	@Override
-	public void dequeue(DequeueContext dequeue)
-	{
-		if (size() > 0)
-		{
-			// essentially what we do is for every child replace the repeater with the child in
-			// dequeue container stack and run the dequeue on the child. we also take care to reset
-			// the state of the dequeue context after we process every child.
-
-			Bookmark bookmark = dequeue.save();
-
-			for (Component child : this)
-			{
-				if (child instanceof MarkupContainer)
-				{
-					dequeue.popContainer(); // pop the repeater
-					MarkupContainer container = (MarkupContainer) child;
-					dequeue.pushContainer(container);
-					container.dequeue(dequeue);
-					dequeue.restore(bookmark);
-				}
-			}
-		}
-
-		dequeue.skipToCloseTag();
-
-	}
-}
+}
\ No newline at end of file
diff --git a/wicket-core/src/test/java/org/apache/wicket/BehavioursDetachTestPage.java b/wicket-core/src/test/java/org/apache/wicket/BehavioursDetachTestPage.java
index 82b8f73..75b2923 100644
--- a/wicket-core/src/test/java/org/apache/wicket/BehavioursDetachTestPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/BehavioursDetachTestPage.java
@@ -39,7 +39,7 @@ public class BehavioursDetachTestPage extends WebPage {
             @Override
             public void onClick() {/*NoOp*/}
         };
-        queue(link);
+        add(link);
 
         // A behavior that causes the problem
         link.add(new VisibilityBehavior());
diff --git a/wicket-core/src/test/java/org/apache/wicket/OnComponentTagListenerTest.java b/wicket-core/src/test/java/org/apache/wicket/OnComponentTagListenerTest.java
index 0a588a0..1c57571 100644
--- a/wicket-core/src/test/java/org/apache/wicket/OnComponentTagListenerTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/OnComponentTagListenerTest.java
@@ -102,13 +102,14 @@ class OnComponentTagListenerTest extends WicketTestCase {
 	static class TestPage extends WebPage implements IMarkupResourceStreamProvider {
 		private static final long serialVersionUID = 1L;
 
-		private Component c1, c2, c3;
+		private WebMarkupContainer c1, c2, c3;
 
 		TestPage() {
 			c1 = new WebMarkupContainer("c1");
 			c2 = new WebMarkupContainer("c2");
 			c3 = new WebMarkupContainer("c3");
-			queue(c1, c2, c3);
+			add(c1, c3);
+			c1.add(c2);
 		}
 
 		@Override
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/border/BorderWithFormPage.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/border/BorderWithFormPage.java
deleted file mode 100644
index e48567c..0000000
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/border/BorderWithFormPage.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.markup.html.border;
-
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.WebPage;
-import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.model.IModel;
-
-public class BorderWithFormPage extends WebPage {
-	private static final long serialVersionUID = 1L;
-	private TextField<String> field;
-
-	public BorderWithFormPage(IModel<String> model) {
-		super();
-		
-		WebMarkupContainer container = new WebMarkupContainer("borderContainer");
-		
-		BorderWithForm border = new BorderWithForm("formBorder");
-		
-		border.add(field = new TextField<>("text", model));
-		
-		container.add(border);
-		add(container);
-    }
-}
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/border/ComponentBorderTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/border/ComponentBorderTest.java
index 51c1f63..b805762 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/border/ComponentBorderTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/border/ComponentBorderTest.java
@@ -89,30 +89,6 @@ class ComponentBorderTest extends WicketTestCase
 	}
 
 	@Test
-	void borderWithForm() throws Exception
-	{
-		/*
-		 * Suppose we have a border like this:
-		 * 
-		 * <div wicket:id="border"> <form> <body/> </form> </div>
-		 * 
-		 * Any form components inside its body must be correctly submitted with the outer form.
-		 */
-		Model<String> model = Model.of("");
-		BorderWithFormPage page = new BorderWithFormPage(model);
-
-		tester.startPage(page);
-
-		FormTester formTester = tester
-			.newFormTester("borderContainer:formBorder:borderContainer:form");
-
-		formTester.setValue("formBorder_body:text", TEST_TEXT);
-		formTester.submit();
-
-		assertEquals(TEST_TEXT, model.getObject());
-	}
-
-	@Test
 	void borderWithEnclosurePage() throws Exception
 	{
 		tester.startPage(BorderWithEnclosurePage.class);
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/AjaxEnclosurePage_4.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/AjaxEnclosurePage_4.java
index bdeb27d..51fec72 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/AjaxEnclosurePage_4.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/AjaxEnclosurePage_4.java
@@ -17,10 +17,8 @@
 package org.apache.wicket.markup.html.internal;
 
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.markup.html.form.AjaxButton;
 import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
 import org.apache.wicket.markup.html.WebPage;
-import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.TextField;
 import org.apache.wicket.model.PropertyModel;
@@ -49,14 +47,14 @@ public class AjaxEnclosurePage_4 extends WebPage
 	{
 
 		Form<?> form=new Form<Void>("form");
-		queue(form);
+		add(form);
 		
 		//nameLabel=new Label("nameLabel", "Name");
 		//queue(nameLabel);
 		
 		nameField=new TextField<String>("nameField", new PropertyModel<String>(this, "name"));
 		nameField.setOutputMarkupId(true);
-		queue(nameField);
+		form.add(nameField);
 
 		submit=new AjaxSubmitLink("submit") {
 			@Override
@@ -66,7 +64,7 @@ public class AjaxEnclosurePage_4 extends WebPage
 				target.add(nameField);
 			}
 		};
-		queue(submit);
+		form.add(submit);
 		
 	}
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/ListViewInContainerPage.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/ListViewInContainerPage.java
index cb9787f..ee38514 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/ListViewInContainerPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/ListViewInContainerPage.java
@@ -50,10 +50,10 @@ public class ListViewInContainerPage extends BasePage
 			protected void populateItem(final ListItem<Integer> item)
 			{
 				final Label testenc = new Label("testenc", Model.of("enclosure " + item.getModelObject()));
-				item.queue(testenc);
+				item.add(testenc);
 
 				final Label testlib = new Label("testlib", Model.of("no enclosure " + item.getModelObject()));
-				item.queue(testlib);
+				item.add(testlib);
 			}
 		});
     }
diff --git a/wicket-core/src/test/java/org/apache/wicket/markupFragments/MarkupFragmentTest.java b/wicket-core/src/test/java/org/apache/wicket/markupFragments/MarkupFragmentTest.java
index 1a2a86f..78c54d4 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markupFragments/MarkupFragmentTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markupFragments/MarkupFragmentTest.java
@@ -180,7 +180,6 @@ class MarkupFragmentTest extends WicketTestCase
 
 		assertNull(border.getBodyContainer().getAssociatedMarkup());
 
-		border.dequeue();
 		markup = border.getBodyContainer().getMarkup();
 		compareMarkupWithString(markup, "<wicket:body/>");
 
@@ -220,8 +219,6 @@ class MarkupFragmentTest extends WicketTestCase
 
 		assertNull(border.getBodyContainer().getAssociatedMarkup());
 
-		// See explanation in BaseBorder.BorderBodyContainer.getMarkup()
-		border.dequeue();
 		markup = border.getBodyContainer().getParent().getMarkup(border.getBodyContainer());
 		compareMarkupWithString(markup, "<wicket:body>333</wicket:body>");
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/queueing/ComponentQueueingPerformanceTest.java b/wicket-core/src/test/java/org/apache/wicket/queueing/ComponentQueueingPerformanceTest.java
deleted file mode 100644
index 722478e..0000000
--- a/wicket-core/src/test/java/org/apache/wicket/queueing/ComponentQueueingPerformanceTest.java
+++ /dev/null
@@ -1,400 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.queueing;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.UUID;
-
-import org.apache.wicket.MarkupContainer;
-import org.apache.wicket.Page;
-import org.apache.wicket.markup.IMarkupResourceStreamProvider;
-import org.apache.wicket.markup.html.WebPage;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.markup.repeater.Item;
-import org.apache.wicket.markup.repeater.RefreshingView;
-import org.apache.wicket.markup.repeater.util.ModelIteratorAdapter;
-import org.apache.wicket.mock.MockApplication;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.LoadableDetachableModel;
-import org.apache.wicket.model.PropertyModel;
-import org.apache.wicket.util.WicketTestTag;
-import org.apache.wicket.util.resource.IResourceStream;
-import org.apache.wicket.util.resource.StringResourceStream;
-import org.apache.wicket.util.tester.WicketTestCase;
-import org.apache.wicket.util.tester.WicketTester;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-
-@Tag(WicketTestTag.SLOW)
-public class ComponentQueueingPerformanceTest extends WicketTestCase
-{
-	private void run(Class<? extends Page> pageClass)
-	{
-		WicketTester tester = new WicketTester(new MockApplication());
-		try
-		{
-			tester.startPage(pageClass);
-		}
-		finally
-		{
-			tester.destroy();
-		}
-	}
-
-	@Test
-	void performance()
-	{
-		final int warmup = 30;
-		final int performance = 60;
-
-		tester.startPage(AddContactsPage.class);
-
-		for (int i = 0; i < warmup; i++)
-		{
-			run(AddContactsPage.class);
-		}
-		long start = System.currentTimeMillis();
-		for (int i = 0; i < performance; i++)
-		{
-			run(AddContactsPage.class);
-		}
-		long end = System.currentTimeMillis();
-		long addDuration = end - start;
-
-		for (int i = 0; i < warmup; i++)
-		{
-			run(QueueContactsPage.class);
-		}
-		start = System.currentTimeMillis();
-		for (int i = 0; i < performance; i++)
-		{
-			run(QueueContactsPage.class);
-		}
-		end = System.currentTimeMillis();
-		long queueDuration = end - start;
-
-
-		System.out.println("add duration: " + addDuration + " queue duration: " + queueDuration);
-
-	}
-
-
-	@Test
-	void consistency()
-	{
-		tester.startPage(new QueueContactsPage());
-		String queue = tester.getLastResponseAsString();
-		tester.startPage(new AddContactsPage());
-		String add = tester.getLastResponseAsString();
-		assertEquals(queue, add);
-	}
-
-	private static class PhoneNumber
-	{
-		String id = UUID.randomUUID().toString();
-		String areacode = "234";
-		String prefix = "342";
-		String suffix = "3423";
-	}
-
-	private static class Address
-	{
-		String id = UUID.randomUUID().toString();
-		String street = "2343 Jsdfjsf St.";
-		String city = "Ksdfjsfs";
-		String state = "AS";
-		String zipcode = "32434";
-	}
-
-	private static class Contact
-	{
-		String id = UUID.randomUUID().toString();
-		String first = "Jlkjsf";
-		String last = "Kjwieojkjf";
-		Address address = new Address();
-		PhoneNumber work = new PhoneNumber();
-		PhoneNumber cell = new PhoneNumber();
-
-	}
-
-	private static Store store = new Store();
-
-	private static class Store
-	{
-		Map<String, PhoneNumber> phones = new HashMap<String, PhoneNumber>();
-		Map<String, Address> addresses = new HashMap<String, Address>();
-		Map<String, Contact> contacts = new HashMap<String, Contact>();
-
-		public <T> T get(Class<T> clazz, String id)
-		{
-			if (PhoneNumber.class.equals(clazz))
-			{
-				return (T)phones.get(id);
-			}
-			else if (Address.class.equals(clazz))
-			{
-				return (T)addresses.get(id);
-			}
-			else if (Contact.class.equals(clazz))
-			{
-				return (T)contacts.get(id);
-			}
-			throw new RuntimeException();
-		}
-
-		Store()
-		{
-			for (int i = 0; i < 250; i++)
-			{
-				Contact contact = new Contact();
-				contacts.put(contact.id, contact);
-			}
-		}
-
-	}
-
-	private static class ContactModel extends LoadableDetachableModel<Contact>
-	{
-		private String id;
-
-		ContactModel(Contact contact)
-		{
-			super(contact);
-			this.id = contact.id;
-		}
-
-		@Override
-		protected Contact load()
-		{
-			return store.contacts.get(id);
-		}
-
-	}
-
-	private static abstract class AbstractPhonePanel extends TestPanel
-	{
-		AbstractPhonePanel(String id, IModel<PhoneNumber> phone)
-		{
-			super(id);
-			setPanelMarkup("<wicket:panel><span wicket:id='areacode'></span> <span wicket:id='prefix'></span>-<span wicket:id='suffix'></span></wicket:panel>");
-		}
-	}
-
-	private static class AddPhonePanel extends AbstractPhonePanel
-	{
-		AddPhonePanel(String id, IModel<PhoneNumber> phone)
-		{
-			super(id, phone);
-			add(new Label("areacode", new PropertyModel(phone, "areacode")));
-			add(new Label("prefix", new PropertyModel(phone, "prefix")));
-			add(new Label("suffix", new PropertyModel(phone, "suffix")));
-		}
-	}
-	private static class QueuePhonePanel extends AbstractPhonePanel
-	{
-		public QueuePhonePanel(String id, IModel<PhoneNumber> phone)
-		{
-			super(id, phone);
-			queue(new Label("areacode", new PropertyModel(phone, "areacode")));
-			queue(new Label("prefix", new PropertyModel(phone, "prefix")));
-			queue(new Label("suffix", new PropertyModel(phone, "suffix")));
-		}
-	}
-
-	private static abstract class AbstractAddressPanel extends TestPanel
-	{
-		AbstractAddressPanel(String id, IModel<Address> addr)
-		{
-			super(id);
-			setPanelMarkup("<wicket:panel><span wicket:id='street'></span><br/><span wicket:id='city'></span>, <span wicket:id='state'></span> <span wicket:id='zipcode'></span></wicket:panel>");
-		}
-	}
-
-	private static class AddAddressPanel extends AbstractAddressPanel
-	{
-		AddAddressPanel(String id, IModel<Address> addr)
-		{
-			super(id, addr);
-			add(new Label("street", new PropertyModel(addr, "street")));
-			add(new Label("city", new PropertyModel(addr, "city")));
-			add(new Label("state", new PropertyModel(addr, "state")));
-			add(new Label("zipcode", new PropertyModel(addr, "zipcode")));
-		}
-	}
-	private class QueueAddressPanel extends AbstractAddressPanel
-	{
-		public QueueAddressPanel(String id, IModel<Address> addr)
-		{
-			super(id, addr);
-			queue(new Label("street", new PropertyModel(addr, "street")));
-			queue(new Label("city", new PropertyModel(addr, "city")));
-			queue(new Label("sate", new PropertyModel(addr, "state")));
-			queue(new Label("zipcode", new PropertyModel(addr, "zipcode")));
-		}
-	}
-
-	static class AbstractContactsPage extends TestPage
-	{
-		AbstractContactsPage()
-		{
-			// @formatter:off
-			setPageMarkup(
-				"  <div wicket:id='contacts'>"
-				+ "  <span wicket:id='first'></span>"
-				+ "  <span wicket:id='last'></span>"
-				+ "  <div wicket:id='addr'></div>"
-				+ "  <div wicket:id='work'></div>"
-				+ "  <div wicket:id='cell'></div>"
-				+ "</div>");
-			// @formatter:on
-
-		}
-	}
-
-	public static class AddContactsPage extends AbstractContactsPage
-	{
-		public AddContactsPage()
-		{
-			add(new RefreshingView<Contact>("contacts")
-			{
-				@Override
-				protected Iterator<IModel<Contact>> getItemModels()
-				{
-					return new ModelIteratorAdapter<Contact>(store.contacts.values())
-					{
-						@Override
-						protected IModel<Contact> model(Contact object)
-						{
-							return new ContactModel(object);
-						}
-					};
-				}
-
-				@Override
-				protected void populateItem(Item<Contact> item)
-				{
-					IModel<Contact> model = item.getModel();
-					item.add(new Label("first", new PropertyModel(model, "first")));
-					item.add(new Label("last", new PropertyModel(model, "first")));
-					item.add(new AddAddressPanel("addr", new PropertyModel<Address>(model, "address")));
-					item.add(new AddPhonePanel("work", new PropertyModel<PhoneNumber>(model, "work")));
-					item.add(new AddPhonePanel("cell", new PropertyModel<PhoneNumber>(model, "cell")));
-				}
-			});
-
-		}
-	}
-
-	public static class QueueContactsPage extends AbstractContactsPage
-	{
-		public QueueContactsPage()
-		{
-			queue(new RefreshingView<Contact>("contacts")
-			{
-				@Override
-				protected Iterator<IModel<Contact>> getItemModels()
-				{
-					return new ModelIteratorAdapter<Contact>(store.contacts.values())
-					{
-						@Override
-						protected IModel<Contact> model(Contact object)
-						{
-							return new ContactModel(object);
-						}
-					};
-				}
-
-				@Override
-				protected void populateItem(Item<Contact> item)
-				{
-					IModel<Contact> model = item.getModel();
-					item.queue(new Label("first", new PropertyModel(model, "first")));
-					item.queue(new Label("last", new PropertyModel(model, "first")));
-					item.queue(new AddAddressPanel("addr", new PropertyModel<Address>(model, "address")));
-					item.queue(new AddPhonePanel("work", new PropertyModel<PhoneNumber>(model, "work")));
-					item.queue(new AddPhonePanel("cell", new PropertyModel<PhoneNumber>(model, "cell")));
-				}
-			});
-
-		}
-	}
-
-	private static class TestPage extends WebPage implements IMarkupResourceStreamProvider
-	{
-		private String markup;
-
-		TestPage()
-		{
-		}
-
-		public TestPage(String markup)
-		{
-			this.markup = markup;
-		}
-
-		String getPageMarkup()
-		{
-			return markup;
-		}
-
-		void setPageMarkup(String markup)
-		{
-			this.markup = markup;
-		}
-
-		@Override
-		public IResourceStream getMarkupResourceStream(MarkupContainer container,
-			Class<?> containerClass)
-		{
-			return new StringResourceStream(getPageMarkup());
-		}
-
-	}
-
-	private static class TestPanel extends Panel implements IMarkupResourceStreamProvider
-	{
-
-		private String markup;
-
-		TestPanel(String id)
-		{
-			super(id);
-		}
-
-		void setPanelMarkup(String markup)
-		{
-			this.markup = markup;
-		}
-
-		String getPanelMarkup()
-		{
-			return markup;
-		}
-
-		@Override
-		public IResourceStream getMarkupResourceStream(MarkupContainer container,
-			Class<?> containerClass)
-		{
-			return new StringResourceStream(getPanelMarkup());
-		}
-	}
-}
diff --git a/wicket-core/src/test/java/org/apache/wicket/queueing/ComponentQueueingTest.java b/wicket-core/src/test/java/org/apache/wicket/queueing/ComponentQueueingTest.java
deleted file mode 100644
index e3f90b4..0000000
--- a/wicket-core/src/test/java/org/apache/wicket/queueing/ComponentQueueingTest.java
+++ /dev/null
@@ -1,1135 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.queueing;
-
-import static org.apache.wicket.queueing.WicketMatchers.hasPath;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.junit.jupiter.api.Assertions.fail;
-
-import java.util.ArrayList;
-
-import org.apache.wicket.Component;
-import org.apache.wicket.MarkupContainer;
-import org.apache.wicket.WicketRuntimeException;
-import org.apache.wicket.markup.IMarkupResourceStreamProvider;
-import org.apache.wicket.markup.html.TransparentWebMarkupContainer;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.WebPage;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.border.Border;
-import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.markup.html.internal.Enclosure;
-import org.apache.wicket.markup.html.link.Link;
-import org.apache.wicket.markup.html.list.ListItem;
-import org.apache.wicket.markup.html.list.ListView;
-import org.apache.wicket.markup.html.panel.Fragment;
-import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.queueing.bodyisachild.BodyIsAChildPage;
-import org.apache.wicket.queueing.bodyisachild.LoginPanel;
-import org.apache.wicket.queueing.nestedborders.InnerBorder;
-import org.apache.wicket.queueing.nestedborders.OuterBorder;
-import org.apache.wicket.queueing.nestedpanels.InnerPanel;
-import org.apache.wicket.queueing.nestedpanels.OuterPanel;
-import org.apache.wicket.util.resource.IResourceStream;
-import org.apache.wicket.util.resource.StringResourceStream;
-import org.apache.wicket.util.tester.FormTester;
-import org.apache.wicket.util.tester.WicketTestCase;
-import org.junit.jupiter.api.Test;
-
-class ComponentQueueingTest extends WicketTestCase
-{
-	/** {@code [a,b,c] -> [a[b[c]]] } */
-	@Test
-	void dequeue1()
-	{
-		TestPage p = new TestPage();
-		p.setPageMarkup("<p wicket:id='a'><p wicket:id='b'><p wicket:id='c'></p></p></p>");
-		MarkupContainer a = new A(), b = new B(), c = new C();
-
-		p.queue(b, c, a);
-		assertThat(p, hasPath(a, b, c));
-		tester.startPage(p);
-	}
-
-	/**
-	 * https://issues.apache.org/jira/browse/WICKET-6361
-	 */
-	@Test
-	void dequeueComponentsOnInitialization()
-	{
-		TestPage p = new TestPage();
-		p.setPageMarkup("<p wicket:id='a'><p wicket:id='b'><p wicket:id='c'></p></p></p>");
-		MarkupContainer a = new A(), b = new B(), c = new C();
-		
-		//components are queued before their nested container is added to the page.
-		//this caused a "Detach called on component...while it had a non-empty queue" before WICKET-6361 was fixed
-		b.queue(c);
-		a.add(b);
-		
-		p.add(a);
-
-		tester.startPage(p);
-	}
-	
-	/** {@code [a[b,c]] -> [a[b[c]]] } */
-	@Test
-	void dequeue2()
-	{
-		TestPage p = new TestPage();
-		p.setPageMarkup("<p wicket:id='a'><p wicket:id='b'><p wicket:id='c'></p></p></p>");
-		MarkupContainer a = new A(), b = new B(), c = new C();
-
-		p.queue(a);
-		a.queue(b, c);
-
-		tester.startPage(p);
-
-		assertThat(p, hasPath(a, b, c));
-	}
-
-	/** {@code [a[b[c]] -> [a[b[c]]] } */
-	@Test
-	void dequeue3()
-	{
-		TestPage p = new TestPage();
-		p.setPageMarkup("<p wicket:id='a'><p wicket:id='b'><p wicket:id='c'></p></p></p>");
-		MarkupContainer a = new A(), b = new B(), c = new C();
-
-		p.queue(a);
-		a.queue(b);
-		b.queue(c);
-
-		tester.startPage(p);
-
-		assertThat(p, hasPath(a, b, c));
-	}
-
-	/** {@code [a[b],c] -> [a[b[c]]] } */
-	@Test
-	void dequeue4()
-	{
-		TestPage p = new TestPage();
-		p.setPageMarkup("<p wicket:id='a'><p wicket:id='b'><p wicket:id='c'></p></p></p>");
-		MarkupContainer a = new A(), b = new B(), c = new C();
-
-		p.queue(a, c);
-		a.queue(b);
-
-		tester.startPage(p);
-
-		assertThat(p, hasPath(a, b, c));
-	}
-
-	/** {@code [a(b)],c] -> [a[b[c]]] } */
-	@Test
-	void dequeue5()
-	{
-		TestPage p = new TestPage();
-		p.setPageMarkup("<p wicket:id='a'><p wicket:id='b'><p wicket:id='c'></p></p></p>");
-		MarkupContainer a = new A(), b = new B(), c = new C();
-		p.queue(a, c);
-		a.add(b);
-
-		tester.startPage(p);
-
-		assertThat(p, hasPath(a, b, c));
-	}
-
-	/** {@code [a,b,c] -> [a[b,c]] } */
-	@Test
-	void dequeue6()
-	{
-		TestPage p = new TestPage();
-		p.setPageMarkup("<p wicket:id='a'><p wicket:id='b'></p><p wicket:id='c'></p></p>");
-		MarkupContainer a = new A(), b = new B(), c = new C();
-
-		p.queue(a, b, c);
-
-		tester.startPage(p);
-
-		assertThat(p, hasPath(new Path(a, b)));
-		assertThat(p, hasPath(new Path(a, c)));
-	}
-
-	/**
-	 * {a[b{e}[d,f{g}]],c} -> [a[b[c,d[e],f[g]]]]
-	 */
-	@Test
-	void dequeue7()
-	{
-		TestPage p = new TestPage();
-
-		// @formatter:off
-		p.setPageMarkup(
-			"  <p wicket:id='a'>"
-			+ "  <p wicket:id='b'>"
-			+ "    <p wicket:id='c'></p>"
-			+ "    <p wicket:id='d'>"
-			+ "      <p wicket:id='e'></p>"
-			+ "    </p>"
-			+ "    <p wicket:id='f'>"
-			+ "      <p wicket:id='g'></p>"
-			+ "    </p>"
-			+ "  </p>"
-			+ "</p>");
-		// @formatter:on
-
-		MarkupContainer a = new A(), b = new B(), c = new C(), d = new D(), e = new E(), f = new F(), g = new G();
-
-		a.add(b);
-		b.queue(e);
-		p.queue(a, c);
-		b.add(d);
-		f.queue(g);
-		b.add(f);
-
-		tester.startPage(p);
-
-		assertThat(p, hasPath(new Path(a, b, c)));
-		assertThat(p, hasPath(new Path(a, b, d, e)));
-		assertThat(p, hasPath(new Path(a, b, f, g)));
-	}
-
-
-	/** {@code [a,c[b]] ->| [a[b[c]]] } */
-	@Test
-	void dequeueError1()
-	{
-		TestPage p = new TestPage();
-		p.setPageMarkup("<p wicket:id='a'><p wicket:id='b'><p wicket:id='c'></p></p></p>");
-		MarkupContainer a = new A(), b = new B(), c = new C();
-
-		p.queue(b, c);
-		c.queue(a);
-
-		try
-		{
-			tester.startPage(p);
-			fail();
-		}
-		catch (WicketRuntimeException e)
-		{
-			// expected
-		}
-	}
-
-	/** {@code [a,q[r,s]] - > [a[q[r[s]]]] } */
-	@Test
-	void panel1()
-	{
-		MarkupContainer a = new A(), r = new R(), s = new S();
-
-		TestPanel q = new TestPanel("q");
-		q.setPanelMarkup("<wicket:panel><p wicket:id='r'><p wicket:id='s'></p></p></wicket:panel>");
-		q.queue(r, s);
-
-		TestPage p = new TestPage();
-		p.setPageMarkup("<p wicket:id='a'><p wicket:id='q'></p></p>");
-
-		p.queue(a, q);
-
-		tester.startPage(p);
-
-		assertThat(p, hasPath(new Path(a, q, r, s)));
-	}
-
-	/** panel has leading markup */
-	@Test
-	void panel2()
-	{
-		MarkupContainer r = new R();
-
-		TestPanel q = new TestPanel("q");
-		q.setPanelMarkup("<html><body><wicket:panel><p wicket:id='r'></p></wicket:panel></body></html>");
-		q.queue(r);
-
-		TestPage p = new TestPage();
-		p.setPageMarkup("<p wicket:id='q'></p>");
-		p.queue(q);
-
-		tester.startPage(p);
-
-		assertThat(p, hasPath(new Path(q, r)));
-	}
-
-	/** panel with a static header section */
-	@Test
-	void panel3()
-	{
-		MarkupContainer r = new R();
-
-		TestPanel q = new TestPanel("q");
-		q.setPanelMarkup("<html><head><wicket:head><meta/></wicket:head></head>"
-			+ "<body><wicket:panel><p wicket:id='r'></p></wicket:panel></body></html>");
-		q.queue(r);
-
-		TestPage p = new TestPage();
-		p.setPageMarkup("<html><head></head><body><p wicket:id='q'></p></body></html>");
-		p.queue(q);
-
-		tester.startPage(p);
-
-		assertThat(p, hasPath(new Path(q, r)));
-		tester.assertContains("<meta/>"); // contributed by <wicket:head>
-	}
-
-	/**
-	 * test with inner panels
-	 */
-	@Test
-	void nestedPanels()
-	{
-		MarkupContainer r = new R(), s = new S();
-
-		Panel innerPanel = new InnerPanel("inner");
-		innerPanel.queue(s);
-
-		Panel outerPanel = new OuterPanel("outer");
-
-		outerPanel.queue(r, innerPanel);
-
-		TestPage p = new TestPage();
-		p.setPageMarkup("<html><head></head><body><p wicket:id='outer'></p></body></html>");
-		p.queue(outerPanel);
-
-		tester.startPage(p);
-
-		assertThat(p, hasPath(new Path(outerPanel, r)));
-		assertThat(p, hasPath(new Path(outerPanel, innerPanel, s)));
-		tester.assertContains("<meta/>"); // contributed by <wicket:head> in outer
-		tester.assertContains("<meta2/>"); // contributed by <wicket:head> in inner
-	}
-
-	@Test
-	void repeater1()
-	{
-		TestPage p = new TestPage();
-		p.setPageMarkup("<p wicket:id='lv'><p wicket:id='b'><p wicket:id='c'></p></p></p>");
-
-		LV l = new LV(3)
-		{
-			@Override
-			protected void populateItem(ListItem<Integer> item)
-			{
-				item.queue(new B(), new C());
-			}
-		};
-
-		p.queue(l);
-
-		tester.startPage(p);
-
-		assertEquals(3, l.size());
-		for (Component item : l)
-		{
-			assertThat(p, hasPath(new Path(l, item, new B(), new C())));
-		}
-	}
-
-	/** repeater */
-	@Test
-	void repeater2()
-	{
-		TestPage p = new TestPage();
-		p.setPageMarkup("<p wicket:id='a'><p wicket:id='lv'><p wicket:id='b'><p wicket:id='c'></p></p></p></p>");
-
-		MarkupContainer a = new A();
-		LV l = new LV(3)
-		{
-			@Override
-			protected void populateItem(ListItem<Integer> item)
-			{
-				item.queue(new B(), new C());
-			}
-		};
-
-		p.queue(a, l);
-
-		tester.startPage(p);
-
-		assertEquals(3, l.size());
-		for (Component item : l)
-		{
-			assertThat(p, hasPath(new Path(a, l, item, new B(), new C())));
-		}
-	}
-
-	/** repeater with a panel inside */
-	@Test
-	void repeater3()
-	{
-		TestPage p = new TestPage();
-		p.setPageMarkup("<p wicket:id='a'><p wicket:id='lv'><p wicket:id='b'><p wicket:id='q'></p></p></p></p>");
-
-		MarkupContainer a = new A();
-		LV l = new LV(3)
-		{
-			@Override
-			protected void populateItem(ListItem<Integer> item)
-			{
-				TestPanel q = new TestPanel("q");
-				q.setPanelMarkup("<wicket:panel><p wicket:id='r'><p wicket:id='s'></p></p></wicket:panel>");
-				q.queue(new R(), new S());
-
-				item.queue(q, new B());
-			}
-		};
-
-		p.queue(a, l);
-
-		tester.startPage(p);
-
-		assertEquals(3, l.size());
-		for (Component item : l)
-		{
-			assertThat(p, hasPath(new Path(a, l, item, new B()).add("q").add(new R(), new S())));
-		}
-	}
-
-	/** dequeue, then rerender the page instance after a callback is executed */
-	@Test
-	void callback()
-	{
-		TestPage p = new TestPage();
-		p.setPageMarkup("<p wicket:id='a'><a wicket:id='l'><p wicket:id='b'></p></a></p>");
-		MarkupContainer a = new A(), b = new B();
-		L l = new L();
-		p.queue(a, b, l);
-
-		tester.startPage(p);
-
-		assertThat(p, hasPath(new Path(a, l, b)));
-		assertEquals(false, l.isClicked());
-
-		tester.clickLink(l);
-
-		assertEquals(true, l.isClicked());
-	}
-
-
-	/** queuing two components with the same id */
-	@Test
-	void queueIdCollission()
-	{
-		try
-		{
-			new A().queue(new B(), new B());
-			fail("Should not be able to queue two components with the same id under the same parent");
-		}
-		catch (WicketRuntimeException e)
-		{
-			// expected
-		}
-	}
-
-
-	@Test
-	void autos1()
-	{
-		TestPage p = new TestPage();
-		p.setPageMarkup("<wicket:enclosure child='a'><div wicket:id='a'></div><div wicket:id='b'></div></wicket:enclosure>");
-		A a = new A();
-		B b = new B();
-		p.queue(a, b);
-		tester.startPage(p);
-
-		assertTrue(a.getParent() instanceof Enclosure);
-		assertTrue(b.getParent() instanceof Enclosure);
-
-		// A is visible, enclosure renders
-
-		assertEquals(
-			"<wicket:enclosure child=\"a\"><div wicket:id=\"a\"></div><div wicket:id=\"b\"></div></wicket:enclosure>",
-			tester.getLastResponseAsString());
-
-		// A is not visible, enclosure does not render
-
-		a.setVisible(false);
-		tester.startPage(p);
-		assertEquals("", tester.getLastResponseAsString());
-	}
-
-	@Test
-	void autos2()
-	{
-		TestPage p = new TestPage();
-		p.setPageMarkup("<wicket:enclosure child='a'><div wicket:id='a'></div><div wicket:id='b'></div></wicket:enclosure>");
-		A a = new A();
-		B b = new B();
-		p.add(a, b);
-		tester.startPage(p);
-
-		assertTrue(a.getParent() instanceof TestPage);
-		assertTrue(b.getParent() instanceof TestPage);
-
-		// A is visible, enclosure renders
-
-		assertEquals(
-			"<wicket:enclosure child=\"a\"><div wicket:id=\"a\"></div><div wicket:id=\"b\"></div></wicket:enclosure>",
-			tester.getLastResponseAsString());
-
-		// A is not visible, enclosure does not render
-
-		a.setVisible(false);
-		tester.startPage(p);
-		assertEquals("", tester.getLastResponseAsString());
-	}
-
-	@Test
-	void autos3()
-	{
-		TestPage p = new TestPage();
-		p.setPageMarkup("<wicket:enclosure child='a'><div wicket:id='a'></div><div wicket:id='b'></div></wicket:enclosure>");
-		A a = new A();
-		B b = new B();
-		p.queue(b);
-		p.add(a);
-		tester.startPage(p);
-
-		assertTrue(a.getParent() instanceof TestPage);
-		assertTrue(b.getParent() instanceof Enclosure);
-
-		// A is visible, enclosure renders
-
-		assertEquals(
-			"<wicket:enclosure child=\"a\"><div wicket:id=\"a\"></div><div wicket:id=\"b\"></div></wicket:enclosure>",
-			tester.getLastResponseAsString());
-
-		// A is not visible, enclosure does not render
-
-		a.setVisible(false);
-		tester.startPage(p);
-		assertEquals("", tester.getLastResponseAsString());
-	}
-
-	@Test
-	void autos4()
-	{
-		TestPage p = new TestPage();
-		p.setPageMarkup("<wicket:enclosure child='a'><div wicket:id='a'></div><div wicket:id='b'></div></wicket:enclosure>");
-		A a = new A();
-		B b = new B();
-		p.add(b);
-		p.queue(a);
-		tester.startPage(p);
-
-		assertTrue(a.getParent() instanceof Enclosure);
-		assertTrue(b.getParent() instanceof TestPage);
-
-		// A is visible, enclosure renders
-
-		assertEquals(
-			"<wicket:enclosure child=\"a\"><div wicket:id=\"a\"></div><div wicket:id=\"b\"></div></wicket:enclosure>",
-			tester.getLastResponseAsString());
-
-		// A is not visible, enclosure does not render
-
-		a.setVisible(false);
-		tester.startPage(p);
-		assertEquals("", tester.getLastResponseAsString());
-	}
-
-	@Test
-	void autos5()
-	{
-		TestPage p = new TestPage();
-		p.setPageMarkup("<wicket:enclosure child='a'><div wicket:id='a'></div><div wicket:id='b'></div></wicket:enclosure>");
-		A a = new A();
-		B b = new B();
-		p.queue(a);
-		p.add(b);
-		tester.startPage(p);
-
-		assertTrue(a.getParent() instanceof Enclosure);
-		assertTrue(b.getParent() instanceof TestPage);
-
-
-		// A is visible, enclosure renders
-
-		assertEquals(
-			"<wicket:enclosure child=\"a\"><div wicket:id=\"a\"></div><div wicket:id=\"b\"></div></wicket:enclosure>",
-			tester.getLastResponseAsString());
-
-		// A is not visible, enclosure does not render
-
-		a.setVisible(false);
-		tester.startPage(p);
-		assertEquals("", tester.getLastResponseAsString());
-	}
-
-	/**
-	 * Test InlineEnclosure
-	 */
-	@Test
-	void autos6()
-	{
-		TestPage p = new TestPage();
-		p.setPageMarkup("<div wicket:enclosure='a'><div wicket:id='a'></div><div wicket:id='b'></div></div>");
-		A a = new A();
-		B b = new B();
-		p.queue(a, b);
-		tester.startPage(p);
-
-		assertTrue(a.getParent() instanceof Enclosure);
-		assertTrue(b.getParent() instanceof Enclosure);
-
-		// A is visible, enclosure renders
-
-		assertEquals(
-				"<div wicket:enclosure=\"a\" id=\"wicket__InlineEnclosure_20793898271\"><div wicket:id=\"a\"></div><div wicket:id=\"b\"></div></div>",
-				tester.getLastResponseAsString());
-
-		// A is not visible, inline enclosure render only itself (the placeholder tag)
-
-		a.setVisible(false);
-		tester.startPage(p);
-		assertEquals("<div id=\"wicket__InlineEnclosure_20793898271\" hidden=\"\" data-wicket-placeholder=\"\"></div>", tester.getLastResponseAsString());
-	}
-	
-	/**
-	 * Test empty child attribute
-	 */
-	@Test
-	void autos7()
-	{
-		TestPage p = new TestPage();
-		p.setPageMarkup("<wicket:enclosure child=''><div wicket:id='a'></div></wicket:enclosure>");
-		A a = new A();
-		
-		p.queue(a);
-		tester.startPage(p);
-
-		assertTrue(a.getParent() instanceof Enclosure);
-		
-
-		// A is visible, enclosure renders
-
-		assertEquals(
-			"<wicket:enclosure child=\"a\"><div wicket:id=\"a\"></div></wicket:enclosure>",
-			tester.getLastResponseAsString());
-
-		// A is not visible, enclosure does not render
-
-		a.setVisible(false);
-		tester.startPage(p);
-		assertEquals("", tester.getLastResponseAsString());
-	}
-	
-	/**
-	 * Test autocomponent inside not-queue region
-	 */
-	@Test
-	void autosInsideNotQueueRegion()
-	{
-		TestPage p = new TestPage();
-		p.setPageMarkup("<div wicket:id='outerContainer'><wicket:enclosure><div wicket:id='a'></div></wicket:enclosure></div>");
-		Label a = new Label("a", "a");
-		WebMarkupContainer outer;
-		p.add(outer = new WebMarkupContainer("outerContainer"));
-		outer.queue(a);
-		
-		tester.startPage(p);
-
-		assertTrue(a.getParent() instanceof Enclosure);
-	}
-	
-	@Test
-	void border1()
-	{
-		MarkupContainer a = new A(), b = new B(), r = new R(), s = new S();
-
-		TestBorder border = new TestBorder("border");
-		border.setBorderMarkup("<wicket:border><b1 wicket:id='r'><b2 wicket:id='s'>" +
-				"<wicket:body/></b2></b1></wicket:border>");
-		border.queueToBorder(r, s);
-
-		TestPage p = new TestPage();
-		p.setPageMarkup("<out1 wicket:id='a'><p wicket:id='border'><in1 wicket:id='b'></in1></p></out1>");
-
-		p.queue(a, border, b);
-
-		tester.startPage(p);
-
-		assertThat(p, hasPath(new Path(a, border, r, s, border.getBodyContainer(), b)));
-	}
-	
-	@Test
-	void queueBorderBody() throws Exception
-	{
-
-		TestBorder border = new TestBorder("border");
-		border.setBorderMarkup("<wicket:border><wicket:body/></wicket:border>");
-
-		TestPage p = new TestPage();
-		p.setPageMarkup("<div wicket:id=\"border\"><span wicket:id=\"label\"></span></div>");
-		
-		p.add(border);
-		border.queue(new Label("label", "test"));
-		
-		tester.startPage(p);
-	}
-
-	@Test
-	void border_nested()
-	{
-		MarkupContainer a = new A(), b = new B(), c= new C(), d = new D(), r = new R(), s = new S();
-
-		Border outerBorder = new OuterBorder("outerBorder");
-
-		Border innerBorder = new InnerBorder("innerBorder");
-
-		outerBorder.queueToBorder(r, innerBorder);
-
-		innerBorder.queueToBorder(c, d);
-
-		outerBorder.queueToBorder(s);
-
-
-		TestPage p = new TestPage();
-		p.setPageMarkup("<p wicket:id='a'><p wicket:id='outerBorder'><p wicket:id='b'></p></p></p>");
-		
-		p.queue(b, outerBorder, a);
-
-		tester.startPage(p);
-		
-		assertThat(p, hasPath(new Path(a, outerBorder,  r, innerBorder, c, d, innerBorder.getBodyContainer(), s)));
-		assertThat(p, hasPath(new Path(a, outerBorder, r, outerBorder.getBodyContainer(), b)));
-	}
-
-	@Test
-	void fragment1() {
-		MarkupContainer a = new A(), b = new B(), r = new R(), s = new S();
-		
-		TestPage page = new TestPage();
-		page.setPageMarkup("<a wicket:id='a'></a><f wicket:id='fragment'></f><b wicket:id='b'></b>"
-			+ "<wicket:fragment wicket:id='f'><r wicket:id='r'></r><s wicket:id='s'></s></wicket:fragment>");
-		
-		Fragment fragment = new Fragment("fragment", "f", page);
-
-		fragment.queue(r, s);
-		page.queue(a, b, fragment);
-		
-		assertThat(page, hasPath(new Path(a)));
-		assertThat(page, hasPath(new Path(b)));
-		assertThat(page, hasPath(new Path(fragment, r)));
-		assertThat(page, hasPath(new Path(fragment, s)));
-	}
-
-	@Test
-	void fragment_doesNotDequeueAcrossRegion()
-	{
-		MarkupContainer a = new A();
-
-		TestPage page = new TestPage();
-		page.setPageMarkup("<f wicket:id='fragment'></f><wicket:fragment wicket:id='f'><a wicket:id='a'></a></wicket:fragment>");
-
-		Fragment fragment = new Fragment("fragment", "f", page);
-
-		page.queue(a, fragment);
-
-		assertThat(page, hasPath(new Path(fragment)));
-		assertNull(a.getParent());
-	}
-
-	
-	@Test
-	void containerTag1()
-	{
-		MarkupContainer a = new A(), b = new B();
-
-		TestPage page = new TestPage();
-		page.setPageMarkup("<wicket:container wicket:id='a'><b wicket:id='b'></b></wicket:container>");
-
-		page.queue(a, b);
-
-		assertThat(page, hasPath(new Path(a, b)));
-	}
-	
-	@Test
-	void queueInsideHeader()
-	{
-		TestPage page = new TestPage();
-		page.setPageMarkup("<html>"
-			+"<head><title wicket:id='title'></title></head>"
-			+ "<body><div>"
-			+ "Hello!"
-			+ "</div></body>"
-			+ "</html>");
-		
-		page.queue(new Label("title"));
-		
-		tester.startPage(page);	
-		
-		tester.assertContains("title");
-	}
-	
-	@Test
-	void queueInsideAutoLink()
-	{
-		TestPage page = new TestPage();
-		page.setPageMarkup("<wicket:link>"
-			+ "<a href='test.html'>"
-			+ "<wicket:container wicket:id='test'>test</wicket:container>"
-			+ "</a></wicket:link>");
-		
-		page.queue(new WebMarkupContainer("test"));
-		
-		tester.startPage(page);	
-	}
-	
-	@Test
-	void queueInsideLabelComponent()
-	{
-		TestPage page = new TestPage();
-		page.setPageMarkup("<label wicket:for='input'>"
-				+ "label:"
-				+ "<input wicket:id='input'/>"
-				+ "</label>");
-		
-		page.queue(new TextField<>("input", Model.of("test")));
-		
-		tester.startPage(page);	
-	}
-	
-	@Test
-	void queueInsideTransparentContainer() throws Exception
-	{
-		TestPage page = new TestPage();
-		page.setPageMarkup("<div wicket:id='transparentContainer'>"
-			+ "	<div wicket:id='container'>"
-			+ "		<div wicket:id='child'>"
-			+ " 	</div>"
-			+ " </div>"
-			+ "</div>");
-		
-		page.add(new TransparentWebMarkupContainer("transparentContainer"));
-		page.add(new WebMarkupContainer("container"));
-		page.queue(new WebMarkupContainer("child"));
-		
-		tester.startPage(page);	
-	}
-
-	@Test
-	void queueNestedEnclosure()
-	{
-		TestPage page = new TestPage();
-		page.setPageMarkup( "<div wicket:enclosure='outer'>" +
-			"<div wicket:id='outer'>" +
-			"	<div wicket:enclosure='middle'>" +
-			"		<div wicket:enclosure='inner'>" +
-			"			<div wicket:id='inner'>inner</div>" +
-			"		</div>" +
-			"		<div wicket:id='middle'>middle</div>" +
-			"	</div>" +
-			"	outer" +
-			"</div>" +
-			"</div>");
-		
-		WebMarkupContainer container = new WebMarkupContainer("outer");
-		container.add(new WebMarkupContainer("middle"));
-		container.add(new WebMarkupContainer("inner"));
-		
-		page.add(container);
-		
-		tester.startPage(page);	
-	}
-	
-	/**
-	 * https://issues.apache.org/jira/browse/WICKET-6088
-	 */
-	@Test
-	void queueComponentInsideWcAndEnclosure()
-	{
-		TestPage page = new TestPage();
-		page.setPageMarkup(" <div wicket:id=\"container\">\n" +
-			"    <div wicket:enclosure=\"child\">\n" +
-			"      <p wicket:id=\"child\">1</p>\n" +
-			"      <a wicket:id=\"child2\">2</a>\n" +
-			"    </div>\n" +
-			"  </div>");
-		
-		WebMarkupContainer container = new WebMarkupContainer("container");
-
-		container.queue(new Label("child")
-		{
-			@Override
-			protected void onInitialize()
-			{
-				super.onInitialize();
-
-				setDefaultModel(Model.of("test"));
-			}
-		});
-		
-	    container.queue(new WebMarkupContainer("child2").setVisible(false));
-
-	    page.queue(container);
-		
-		tester.startPage(page);	
-	}
-	@Test
-	void queueComponentInsideBorderAndEnclosure()
-	{
-		TestPage page = new TestPage();
-		page.setPageMarkup(" <div wicket:id=\"panel\"></div>");
-		
-		TestPanel panel = new TestPanel("panel");
-		panel.setPanelMarkup("<wicket:panel>\n"
-			+ "<div wicket:id=\"border\">\n" +
-			"    <div wicket:enclosure=\"child\">\n" +
-			"      <p wicket:id=\"child\">1</p>\n" +			
-			"    </div>\n" +
-			"  </div>\n" +
-			"</wicket:panel>");
-		
-		TestBorder border = new TestBorder("border");
-		border.setBorderMarkup("<wicket:border><wicket:body/></wicket:border>");
-		
-		panel.add(border);
-		page.add(panel);
-		border.add(new Label("child"));
-				
-		tester.startPage(page);	
-	}
-
-	/**
-	 * https://issues.apache.org/jira/browse/WICKET-6036
-	 */
-	@Test
-	void nestedTags()
-	{
-		IncorrectCloseTagPanel p = new IncorrectCloseTagPanel("test");
-		tester.startComponentInPage(p);
-	}
-
-	/**
-	 * https://issues.apache.org/jira/browse/WICKET-6077
-	 */
-	@Test
-	void bodyIsAChild() {
-		tester.startPage(BodyIsAChildPage.class);
-
-		tester.assertRenderedPage(BodyIsAChildPage.class);
-
-		String username = "USER";
-		String password = "PASSWD";
-
-		FormTester formTester = tester.newFormTester("wmc:login:loginForm");
-		formTester.setValue("usernameFormGroup:usernameFormGroup_body:username", username);
-		formTester.setValue("passwordFormGroup:passwordFormGroup_body:password", password);
-		formTester.submit();
-
-		LoginPanel loginPanel = (LoginPanel) tester.getComponentFromLastRenderedPage("wmc:login");
-		assertEquals(username, loginPanel.pojo.username);
-		assertEquals(password, loginPanel.pojo.password);
-	}
-
-	private static class A extends WebMarkupContainer
-	{
-		A()
-		{
-			super("a");
-		}
-	}
-
-	private static class B extends WebMarkupContainer
-	{
-		B()
-		{
-			super("b");
-		}
-	}
-
-	private static class C extends WebMarkupContainer
-	{
-		C()
-		{
-			super("c");
-		}
-	}
-
-	private static class D extends WebMarkupContainer
-	{
-		D()
-		{
-			super("d");
-		}
-	}
-
-	private static class E extends WebMarkupContainer
-	{
-		E()
-		{
-			super("e");
-		}
-	}
-
-	private static class F extends WebMarkupContainer
-	{
-		F()
-		{
-			super("f");
-		}
-	}
-	private static class G extends WebMarkupContainer
-	{
-		G()
-		{
-			super("g");
-		}
-	}
-
-	private static class R extends WebMarkupContainer
-	{
-		R()
-		{
-			super("r");
-		}
-	}
-
-	private static class S extends WebMarkupContainer
-	{
-		S()
-		{
-			super("s");
-		}
-	}
-
-	private static abstract class LV extends ListView<Integer>
-	{
-		LV(int size)
-		{
-			super("lv");
-			ArrayList<Integer> values = new ArrayList<>();
-			for (int i = 0; i < size; i++)
-				values.add(i);
-			setModel(new Model<>(values));
-		}
-	}
-
-	private static class L extends Link<Void>
-	{
-		private boolean clicked = false;
-
-		L()
-		{
-			super("l");
-		}
-
-		@Override
-		public void onClick()
-		{
-			clicked = true;
-		}
-
-		boolean isClicked()
-		{
-			return clicked;
-		}
-	}
-
-
-	private static class TestPage extends WebPage implements IMarkupResourceStreamProvider
-	{
-		private String markup;
-
-		TestPage()
-		{
-		}
-
-		public TestPage(String markup)
-		{
-			this.markup = markup;
-		}
-
-		String getPageMarkup()
-		{
-			return markup;
-		}
-
-		void setPageMarkup(String markup)
-		{
-			this.markup = markup;
-		}
-
-		@Override
-		public IResourceStream getMarkupResourceStream(MarkupContainer container,
-			Class<?> containerClass)
-		{
-			return new StringResourceStream(getPageMarkup());
-		}
-
-	}
-
-	private static class TestPanel extends Panel implements IMarkupResourceStreamProvider
-	{
-		private String markup;
-
-		TestPanel(String id)
-		{
-			super(id);
-		}
-
-		void setPanelMarkup(String markup)
-		{
-			this.markup = markup;
-		}
-
-		String getPanelMarkup()
-		{
-			return markup;
-		}
-
-		@Override
-		public IResourceStream getMarkupResourceStream(MarkupContainer container,
-			Class<?> containerClass)
-		{
-			return new StringResourceStream(getPanelMarkup());
-		}
-	}
-
-	private static class TestBorder extends Border implements IMarkupResourceStreamProvider
-	{
-		private String markup;
-
-		TestBorder(String id)
-		{
-			super(id);
-		}
-
-		void setBorderMarkup(String markup)
-		{
-			this.markup = markup;
-		}
-
-		String getBorderMarkup()
-		{
-			return markup;
-		}
-
-		@Override
-		public IResourceStream getMarkupResourceStream(MarkupContainer container,
-		                                               Class<?> containerClass)
-		{
-			return new StringResourceStream(getBorderMarkup());
-		}
-	}
-}
diff --git a/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/SubPage.java b/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/SubPage.java
index 6580fb5c..ac48e19 100644
--- a/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/SubPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/SubPage.java
@@ -28,6 +28,6 @@ public class SubPage extends BasePage
 	{
 		super(parameters);
 
-		queue(new Label("version", getApplication().getFrameworkSettings().getVersion()));
+		add(new Label("version", getApplication().getFrameworkSettings().getVersion()));
 	}
 }
diff --git a/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/TransparentContainerQueuePage.java b/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/TransparentContainerQueuePage.java
index ba2c2d8..2f8d617 100644
--- a/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/TransparentContainerQueuePage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/TransparentContainerQueuePage.java
@@ -26,7 +26,7 @@ public class TransparentContainerQueuePage extends WebPage
 	public TransparentContainerQueuePage(PageParameters parameters)
 	{
 		super(parameters);
-		queue(new Label("queuedComponent", "Queued label."));
+		add(new Label("queuedComponent", "Queued label."));
 	}
 	
 }
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/modal/ModalDialogPage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/modal/ModalDialogPage.java
index 665b100..7df2ae0 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/modal/ModalDialogPage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/modal/ModalDialogPage.java
@@ -57,22 +57,24 @@ public class ModalDialogPage extends BasePage
 	public ModalDialogPage()
 	{
 
-		queue(new RadioGroup("stacked", new PropertyModel<>(this, "stacked"))
-			.setRenderBodyOnly(false).add(new AjaxFormChoiceComponentUpdatingBehavior()
-			{
+		RadioGroup radioGroup = new RadioGroup("stacked", new PropertyModel<>(this, "stacked"));
+		radioGroup
+			.setRenderBodyOnly(false)
+			.add(new AjaxFormChoiceComponentUpdatingBehavior() {
 				@Override
 				protected void onUpdate(AjaxRequestTarget target)
 				{
 				}
-			}));
+			});
+		add(radioGroup);
 
-		queue(new Radio<Boolean>("yes", Model.of(true)));
-		queue(new Radio<Boolean>("no", Model.of(false)));
+		radioGroup.add(new Radio<Boolean>("yes", Model.of(true)));
+		radioGroup.add(new Radio<Boolean>("no", Model.of(false)));
 
-		queue(new ModalFragment("start"));
+		add(new ModalFragment("start"));
 
 		stackedDialogs = new AjaxListPanel("stackedDialogs");
-		queue(stackedDialogs);
+		add(stackedDialogs);
 	}
 
 	@Override
@@ -94,15 +96,15 @@ public class ModalDialogPage extends BasePage
 			super(id, "fragment", ModalDialogPage.this);
 
 			Form<Void> form = new Form<Void>("form");
-			queue(form);
+			add(form);
 			
 			nestedDialog = new ModalDialog("nestedDialog");
 			nestedDialog.add(new DefaultTheme());
 			nestedDialog.trapFocus();
 			nestedDialog.closeOnEscape();
-			queue(nestedDialog);
+			form.add(nestedDialog);
 
-			queue(new AjaxLink<Void>("ajaxOpenDialog")
+			form.add(new AjaxLink<Void>("ajaxOpenDialog")
 			{
 				@Override
 				public void onClick(AjaxRequestTarget target)
@@ -111,7 +113,7 @@ public class ModalDialogPage extends BasePage
 				}
 			});
 
-			queue(new Link<Void>("openDialog")
+			form.add(new Link<Void>("openDialog")
 			{
 				@Override
 				public void onClick()
@@ -120,7 +122,7 @@ public class ModalDialogPage extends BasePage
 				}
 			});
 
-			queue(new TextField("text").add(new AjaxEventBehavior("keydown")
+			form.add(new TextField("text").add(new AjaxEventBehavior("keydown")
 			{
 				@Override
 				protected void updateAjaxAttributes(AjaxRequestAttributes attributes)
@@ -144,7 +146,7 @@ public class ModalDialogPage extends BasePage
 				}
 			}));
 
-			queue(new WebMarkupContainer("closing")
+			WebMarkupContainer closing = new WebMarkupContainer("closing")
 			{
 				@Override
 				protected void onConfigure()
@@ -153,9 +155,10 @@ public class ModalDialogPage extends BasePage
 
 					setVisible(findParent(ModalDialog.class) != null);
 				}
-			});
+			};
+			form.add(closing);
 
-			queue(new Link<Void>("close")
+			closing.add(new Link<Void>("close")
 			{
 				@Override
 				public void onClick()
@@ -166,9 +169,9 @@ public class ModalDialogPage extends BasePage
 			
 			final MultiLineLabel lorem = new MultiLineLabel("lorem", "");
 			lorem.setOutputMarkupId(true);
-			queue(lorem);
+			form.add(lorem);
 			
-			queue(new AjaxLink<Void>("ipsum") {
+			form.add(new AjaxLink<Void>("ipsum") {
 				@Override
 				public void onClick(AjaxRequestTarget target)
 				{