protected void resizeSwimlane(Object swimlane, double w, double h, boolean parentHorizontal)
	{
		mxIGraphModel model = getGraph().getModel();

		model.beginUpdate();
		try
		{
			boolean horizontal = this.isCellHorizontal(swimlane);
			
			if (!this.isSwimlaneIgnored(swimlane))
			{
				mxGeometry geo = model.getGeometry(swimlane);

				if (geo != null)
				{

					if ((parentHorizontal && geo.getHeight() != h)
							|| (!parentHorizontal && geo.getWidth() != w))
					{
						geo = (mxGeometry) geo.clone();

						if (parentHorizontal)
						{
							geo.setHeight(h);
						}
						else
						{
							geo.setWidth(w);
						}

						model.setGeometry(swimlane, geo);
					}
				}
			}

			mxRectangle tmp = (graph.isSwimlane(swimlane)) ? graph
					.getStartSize(swimlane) : new mxRectangle();
			w -= tmp.getWidth();
			h -= tmp.getHeight();

			int childCount = model.getChildCount(swimlane);

			for (int i = 0; i < childCount; i++)
			{
				Object child = model.getChildAt(swimlane, i);
				resizeSwimlane(child, w, h, horizontal);
			}
		}
		finally
		{
			model.endUpdate();
		}
	}