* */
	public void restore(final Dockable dockable) {
		if (dockable.getDockKey().getLocation() != DockableState.Location.MAXIMIZED) {
			// development error (could have been an assertion).
			throw new IllegalArgumentException(
					"Dockable isn't currently in the MAXIMIZED state : "
							+ dockable);
		}

		DockableState currentState = getDockableState(dockable);
		@SuppressWarnings("null")
		boolean stateChange = currentState != null
				|| currentState.isMaximized();
		DockableState newState = new DockableState(this, dockable,
				DockableState.Location.DOCKED);
		DockableState.Location currentLocation = getLocation(currentState);

		DockableStateWillChangeEvent dswe = new DockableStateWillChangeEvent(
				currentState, newState);
		DockingActionEvent dae = new DockingActionSimpleStateChangeEvent(this,
				dockable, currentLocation, DockableState.Location.DOCKED);

		if (!isDockingActionAccepted(dae, dswe)) {
			return; // vetoed
		}

		if (!DockingPreferences.isLightWeightUsageEnabled()) {
			if (DockingPreferences.isSingleHeavyWeightComponent()
					&& this.currentMaximizedComponentIsHeavyWeight) { // 2005/10/20
				remove(maximizedComponent);
			} else {
				remove(maximizedComponent.getParent()); // remove the awt panel
			}
		} else {
			remove(maximizedComponent);
		}
		((SingleDockableContainer) maximizedComponent).uninstallDocking(this);

		SingleDockableContainer sdc = null;
		if (dummyMaximedReplacer.getParent() instanceof TabbedDockableContainer) {
			sdc = DockableContainerFactory
					.getFactory()
					.createDockableContainer(
							dockable,
							DockableContainerFactory.ParentType.PARENT_TABBED_CONTAINER);
		} else {
			sdc = DockableContainerFactory
					.getFactory()
					.createDockableContainer(
							dockable,
							DockableContainerFactory.ParentType.PARENT_SPLIT_CONTAINER);
		}

		DockingUtilities.replaceChild(dummyMaximedReplacer.getParent(),
				dummyMaximedReplacer, (Component) sdc);

		context.setDockableState(dockable, newState);
		dockable.getDockKey().setLocation(DockableState.Location.DOCKED);
		fireDockingAction(dae, new DockableStateChangeEvent(currentState,
				newState));

		SwingUtilities.invokeLater(new Runnable() {

			public void run() {
				dockable.getComponent().requestFocus();
			}
		});

		sdc.installDocking(this);

		maximizedComponent = null;

		repaint();
	}