public function listingFor($items, \Closure $callback, $attributes = array(), $element = 'ul', $childElement = 'li')
		{

			// Create the element
			$list = \HtmlObject\Element::$element('', $attributes);

			// Get closure info
			$closureMethod = Reflection::getClosureMethod($callback);
			$closureArgs = Reflection::getClosureParams($closureMethod);

			// Loop through items
			$index = 0;
			foreach ($items as $item) {

				// Invoke the closure
				$li = Reflection::invokeClosure($callback, 
					array($index, $item), 
					array($item));

				// Is it an element?
				if (is_string($li)) {

					// Create li containing that...
					$realLi = \HtmlObject\Element::$childElement($li);
					$list->addChild($realLi);

				} elseif (is_subclass_of($li, "\\HtmlObject\\Traits\\Tag")) {

					// An li tag?
					if ($li->getTag() !== $childElement) {

						// Wrap it!
						$realLi = \HtmlObject\Element::$childElement($li);
						$list->addChild($realLi);

					} else {

						// Add it as it is
						$list->addChild($li);

					}

				} else {

					// Not good.
					throw new \Exception("The ulFor callback needs to return a HTMLObject\\Element, or a string containing HTML.", 1);
					
				}



				$index++;
			}
			return $list;

		}